平台兼容性
代码页转换
数据提供程序支持单字节字符集(SBCS)、混合字节字符集(MBCS)双字节字符集(DBCS)和 Unicode - UTF8 [1208]的组合,这是一种 8 位 Unicode 转换格式。
主机 CCSID
数据提供程序需要主机 CCSID(编码字符集标识符)的值,用于对字符串数据执行代码页转换。 默认主机 CCSID 值为 Unicode - UTF8 [1208]。 通常,IBM Informix 数据库服务器使用 Unicode。
电脑代码页
数据提供程序需要 PC 代码页的值,用于对字符串数据执行代码页转换。 默认电脑代码页为 Unicode - UTF8 [1208]。 通常,IBM Informix 数据库服务器使用 Unicode。
将二进制文件处理为字符
数据提供程序会根据 Informix 数据类型和 Windows 使用者数据类型,自动在二进制(CCSID 65535)和字符串数据类型之间转换。 Informix 编码由主机 CCSID 确定。 Windows 编码由电脑代码页确定。
数据类型映射
本主题介绍所有数据类型映射到 OLE DB 数据类型。
Informix 到 OLE DB 数据类型映射
下表介绍了 Informix 数据类型映射到 OLE DB 数据类型。
| OLE DB 数据类型 | Informix 数据类型 | 说明 |
|---|---|---|
| DBTYPE_I8 | bigint | 大整数是一个 8 字节二进制整数。 |
| DBTYPE_UI8 | bigserial | 无符号 8 字节二进制整数。 |
| DBTYPE_Bytes | blob | 二进制大型对象是用于存储非文本或二进制数据的可变长度字符串。 |
| DBTYPE_BOOL | 布尔 | 布尔值是用于存储 true 或 false 值的单个字节二进制文件。 |
| DBTYPE_Bytes | 字节 | 二进制大型对象是用于存储非文本或二进制数据的可变长度字符串。 |
| 数据库类型_字符串 | 字符型 | 字符是固定长度的 SBCS 或 MBCS 字符串。 |
| 数据库类型_字符串 | Clob | 不同长度的字符大型对象是一个不同长度的字符串。 |
| DBTYPE_DBDate | date | 日期是一个 10 字节字符串。 |
| DBTYPE_DBTimesStamp | 日期/时间 | 时间戳是表示日期、时间和微秒的 32 字节字符串。 |
| DBTYPE_Decimal | 十进制 | 十进制数。 |
| DBTYPE_R8 | float | 浮点数是一个 8 字节双精度浮点数。 |
| DBTYPE_I8 | int8 | 整数 8 是一个 8 字节二进制整数。 |
| DBTYPE_I4 | 整数 | 整数是一个 4 字节二进制整数。 |
| DBTYPE_DBTimesStamp | 间隔 | 时间戳是表示日期、时间和微秒的 32 字节字符串。 |
| 数据库类型_字符串 | lvarchar | 不同的字符是一个不同长度的字符串。 |
| DBTYPE_WSTR | nchar | 固定长度的 Unicode 字符串。 |
| DBTYPE_WSTR | nvarchar | 可变长度的 Unicode 字符串。 |
| DBTYPE_R4 | real | 浮点数是 4 字节双精度浮点数。 |
| DBTYPE_UI4 | 串行 | 无符号 4 字节二进制整数。 |
| DBTYPE_UI8 | serial8 | 无符号 8 字节二进制整数。 |
| DBTYPE_R4 | smallfloat | 实数是 4 字节单精度浮点数。 |
| DBTYPE_I2 | smallint | 双字节二进制整数。 |
| 数据库类型_字符串 | 文本消息 | 不同长度的字符大型对象是一个不同长度的字符串。 |
| 数据库类型_字符串 | varchar | 不同的字符是一个不同长度的字符串。 |
使用 IDBSchemaRowset::GetRowset 的预定义架构行集检索 OLE DB 中的架构信息。 数据提供者公开了名为 PROVIDER_TYPES 的行集,用于根据 IBM Informix 版本指示 Informix 到 OLE DB 数据类型支持(类型、映射、限制)。
Informix V11
数据提供程序支持在连接到 Informix V11 时访问这些数据类型。
| Informix Type_name | OLE DB 数据类型 | 列大小 | Minimum_scale | 最大缩放比例 |
|---|---|---|---|---|
| BIGINT | DBTYPE_I8 | 20 | ||
| INT8 | DBTYPE_I8 | 20 | ||
| SERIAL8 | DBTYPE_UI8 | 20 | ||
| BIGSERIAL | DBTYPE_UI8 | 20 | ||
| BOOLEAN | DBTYPE_BOOL | 1 | ||
| 字节 | DBTYPE_BYTES | 2147483647 | ||
| BLOB | DBTYPE_BYTES | 2147483647 | ||
| CHAR | 数据库类型_字符串 | 32767 | ||
| 文本 | 数据库类型_字符串 | 2147483647 | ||
| CLOB | 数据库类型_字符串 | 2147483647 | ||
| DATE | DBTYPE_DBDATE(数据库日期类型) | 10 | ||
| DECIMAL | DBTYPE_DECIMAL | 32 | 0 | 32 |
| FLOAT | DBTYPE_R8 | 53 | ||
| NCHAR | DBTYPE_WSTR | 32767 | ||
| INTEGER | DBTYPE_I4 | 10 | ||
| 串行 | DBTYPE_UI4 | 10 | ||
| SMALLFLOAT | DBTYPE_R4 | 24 | ||
| 真实 | DBTYPE_R4 | 24 | ||
| SMALLINT | DBTYPE_I2 | 5 | ||
| DATETIME | DBTYPE_DBTIMESTAMP | 32 | 0 | 12 |
| 间隔 | DBTYPE_DBTIMESTAMP | 32 | 0 | 12 |
| VARCHAR | 数据库类型_字符串 | 255 | ||
| LVARCHAR | 数据库类型_字符串 | 32739 | ||
| NVARCHAR | DBTYPE_WSTR | 255 |
性能
本主题包含以下部分,这些部分将帮助你在使用 Data Provider for Informix 时最大程度地提高性能。
配置以优化性能
若要提高性能,请通过以下方式配置提供程序。
汇集资源以减少连接启动时间
连接池是一种客户端优化,可减少连接启动时间,同时减少客户端计算机上的内存利用率。 OLE DB 提供程序支持连接池。 可以使用 OLE DB 数据源初始化字符串(Connection Pooling=True)指定连接池。 此外,还可以使用数据源向导的 “高级” 对话框和数据链接的 “全部” 对话框配置池。
提供程序根据最大池大小属性来维护连接缓存。 默认池大小为 100 个连接(最大池大小=100),可以使用数据源向导或数据链接的“所有”对话框进行调整。 最大池大小属性没有上限。 如果为最大池大小属性配置小于 0 的值,则使用默认值 100。
(可选)可以指定秒数,以指示数据提供程序等待使用客户端池建立连接。 当池中的所有连接都正在使用且超时期限过期时,数据提供程序将向数据使用者返回错误(“连接不可用”)。 默认值为 15 秒(连接超时=15),可以使用数据源向导或数据链接的“所有”对话框进行调整。 Connect Timeout 属性没有上限。 指定 -1 以指示数据提供程序无限期等待客户端连接池中的打开连接。
获取数据时优化行集缓存
RowsetCacheSize 属性指示数据提供程序预取 Informix 的行,同时处理这些行并将其返回给数据使用者。 此功能可以提高多处理器或多核计算机上的批量只读操作的性能。 此属性的默认值为 0(RowsetCacheSize=0),指示可选的预提取功能为“off”。 建议设置介于 10 到 100 之间的值,初始建议值为 10,可以使用数据源向导或数据链接的“所有”对话框进行调整。 此属性指示数据提供程序预提取到指定数量的行批,这些行批存储在数据提供程序的缓存行集中。 行数据批次的大小根据使用者指定的 OLE DB IRowset::GetNextRows 接口上的 cRows 值自动确定。
延迟参数命令的准备直至执行
Defer Prepare 指示数据提供程序优化参数化 INSERT、UPDATE、DELETE 和 SELECT 命令的处理。 可以使用 OLE DB 数据源初始化字符串(Defer Prepare=True)指定此选项。 此外,还可以使用数据源向导的 “高级” 对话框和数据链接的 “全部” 对话框配置池。 对于 INSERT、UPDATE 和 DELETE 命令,数据提供程序会将准备、执行和提交命令合并到远程数据库的一个网络流中。 对于 SELECT 命令,数据提供程序会将准备和执行命令合并到一个网络流中。 这样可以最大程度地减少网络流量,并经常提高整体性能。
用于超时终止长时间运行查询的命令
OLE DB Provider for Informix 提供命令超时属性,使开发人员能够自动终止长时间运行的查询,这些查询可能会对性能产生不利影响。
OLE DB 行集DBPROP_COMMANDTIMEOUT的默认值为 0,这意味着不会超时。 可以为许多使用者(例如 SQL Server 2008 R2 中的使用者)指定命令超时值。
测量性能
为了衡量性能,数据提供程序提供性能计数器。 默认情况下,性能计数器处于关闭状态。 通过将以下注册表项的值更改为 1,可以打开它们:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Host Integration Server\Data Integration\UpdateCounters = 1
数据提供程序性能计数器捕获有关打开的连接、打开的语句、数据包和已发送/接收的字节、主机(Informix服务器)平均处理时间、命令执行、数据获取以及事务提交/回滚的信息。