プラットフォームの互換性
コード ページ変換
データ プロバイダーでは、1 バイト文字セット (SBCS)、マルチバイト文字セット (MBCS)、2 バイト文字セット (DBCS)、および Unicode - UTF8 [1208] (8 ビットの Unicode 変換形式) の組み合わせがサポートされます。
ホスト CCSID
データ プロバイダーは、文字列データでコード ページ変換を実行するホスト CCSID (Coded Character Set Identifier) の値を必要とします。 既定のホスト CCSID 値は Unicode-UTF8 [1208] です。 通常、IBM Informix データベース サーバーは Unicode を利用します。
[PC コード ページ]
データ プロバイダーは、文字列データでコード ページ変換を実行する PC コード ページの値を必要とします。 既定の PC コードページは Unicode-UTF8 [1208] です。 通常、IBM Informix データベース サーバーは Unicode を利用します。
バイナリを文字として処理する
データ プロバイダーでは、Informix データ型と Windows コンシューマー データ型に基づいて、バイナリ (CCSID 65535) および文字列データ型との間で自動的に変換されます。 Informix エンコードは、ホスト CCSID によって決定されます。 Windows エンコードは、PC コード ページによって決定されます。
データ型のマッピング
このトピックでは、OLE DB データ型へのすべてのデータ型のマッピングについて説明します。
Informix から OLE DB データ型へのマッピング
OLE DB データ型への Informix データ型のマッピングを次の表に示します。
OLE DB データ型 | Informix データ型 | 説明 |
---|---|---|
DBTYPE_I8 | bigint | Big integer は 8 バイトのバイナリ整数です。 |
DBTYPE_UI8 | bigserial | 8 バイトの符号なし整数です。 |
DBTYPE_Bytes | blob (blob) | Binary large object は、非テキスト型データまたはバイナリ データを格納するために使用される可変長の文字列です。 |
DBTYPE_BOOL | boolean | Boolean は、true または false の値を格納する 1 バイトのバイナリです。 |
DBTYPE_Bytes | byte | Binary large object は、非テキスト型データまたはバイナリ データを格納するために使用される可変長の文字列です。 |
DBTYPE_STR | char | Char は固定長の SBCS または MBCS 文字列です。 |
DBTYPE_STR | clob | 可変長の character large object は可変長文字列です。 |
DBTYPE_DBDate | 日付 | Date は 10 バイト文字列です。 |
DBTYPE_DBTimesStamp | DATETIME | timestamp は日付、時刻、およびマイクロ秒を表す 32 バイト文字列です。 |
DBTYPE_Decimal | decimal | 10 進数。 |
DBTYPE_R8 | float | Float は 8 バイト倍精度浮動小数点数です。 |
DBTYPE_I8 | int8 | integer 8 は 8 バイトのバイナリ整数です。 |
DBTYPE_I4 | 整数 (integer) | Integer は 4 バイトのバイナリ整数です。 |
DBTYPE_DBTimesStamp | interval | timestamp は日付、時刻、およびマイクロ秒を表す 32 バイト文字列です。 |
DBTYPE_STR | lvarchar | Varying character は可変長の文字列です。 |
DBTYPE_WSTR | nchar | 固定長の Unicode 文字列です。 |
DBTYPE_WSTR | nvarchar | 可変長 Unicode 文字列。 |
DBTYPE_R4 | real | float は 4 バイト倍精度浮動小数点数です。 |
DBTYPE_UI4 | serial | 4 バイトの符号なし整数です。 |
DBTYPE_UI8 | serial8 | 8 バイトの符号なし整数です。 |
DBTYPE_R4 | smallfloat | Real は 4 バイト単精度浮動小数点数です。 |
DBTYPE_I2 | smallint | 2 バイトのバイナリ整数です。 |
DBTYPE_STR | text | 可変長の character large object は可変長文字列です。 |
DBTYPE_STR | varchar | Varying character は可変長の文字列です。 |
OLE DB のスキーマ情報の取得には、定義済みスキーマ行セットと IDBSchemaRowset::GetRowset を使用します。 データ プロバイダーは PROVIDER_TYPES 行セットを公開し、IBM Informix バージョンに基づいて Informix から OLE DB データ型のサポート (種類、マッピング、制限) を示しました。
Informix V11
データ プロバイダーでは、Informix V11 に接続したときに、これらのデータ型へのアクセスをサポートします。
Informix Type_name | OLE DB data_type | Column_size | Minimum_scale | Maximum_scale |
---|---|---|---|---|
bigint | DBTYPE_I8 | 20 | ||
INT8 | DBTYPE_I8 | 20 | ||
SERIAL8 | DBTYPE_UI8 | 20 | ||
BIGSERIAL | DBTYPE_UI8 | 20 | ||
BOOLEAN | DBTYPE_BOOL | 1 | ||
BYTE | DBTYPE_BYTES | 2147483647 | ||
BLOB | DBTYPE_BYTES | 2147483647 | ||
CHAR | DBTYPE_STR | 32767 | ||
[TEXT] | DBTYPE_STR | 2147483647 | ||
CLOB | DBTYPE_STR | 2147483647 | ||
DATE | DBTYPE_DBDATE | 10 | ||
DECIMAL | DBTYPE_DECIMAL | 32 | 0 | 32 |
FLOAT | DBTYPE_R8 | 53 | ||
NCHAR | DBTYPE_WSTR | 32767 | ||
INTEGER | DBTYPE_I4 | 10 | ||
SERIAL | DBTYPE_UI4 | 10 | ||
SMALLFLOAT | DBTYPE_R4 | 24 | ||
real | DBTYPE_R4 | 24 | ||
SMALLINT | DBTYPE_I2 | 5 | ||
DATETIME | DBTYPE_DBTIMESTAMP | 32 | 0 | 12 |
INTERVAL | DBTYPE_DBTIMESTAMP | 32 | 0 | 12 |
VARCHAR | DBTYPE_STR | 255 | ||
LVARCHAR | DBTYPE_STR | 32739 | ||
NVARCHAR | DBTYPE_WSTR | 255 |
パフォーマンス
このトピックに含まれるセクションは、Data Providers for Informix の使用時にパフォーマンスを最大化する上で役立ちます。
パフォーマンスを高めるための構成
パフォーマンスを向上させるには、次の方法でプロバイダーを構成します。
プロバイダー リソースのプールによる接続開始時間の短縮
接続プールは、接続開始時間を短縮する一方で、クライアント コンピューターでのメモリの利用を減らす、クライアント側の最適化です。 OLE DB プロバイダーは接続プールをサポートしています。 OLE DB データ ソース初期化文字列 (Connection Pooling=True) を使用してプールを指定できます。 また、データ ソース ウィザードの [詳細設定] ダイアログおよびデータ リンクの [すべて] ダイアログを使用してプールを構成できます。
プロバイダーは、Max Pool Size プロパティに基づいて接続のキャッシュを維持します。 既定のプール サイズは 100 接続 (Max Pool Size=100) ですが、データ ソース ウィザードまたはデータ リンクの [すべて] ダイアログを使用して調整できます。 "最大プール サイズ" プロパティに上限はありません。 "最大プール サイズ" プロパティに 0 未満の値を構成すると、既定値の 100 が使用されます。
オプションとして、クライアント側プールを使用して接続を確立するまで待機するようデータ プロバイダーに指示する秒数を指定できます。 プールのすべての接続が使用中でタイムアウトまでの時間が経過すると、データ プロバイダーはデータ コンシューマーに対してエラー ("接続が利用できません") を返します。 既定値は 15 秒 (Connect Timeout=15) ですが、データ ソース ウィザードまたはデータ リンクの [すべて] ダイアログを使用して調整できます。 [接続のタイムアウト] プロパティに上限はありません。 クライアント側接続プールで開いている接続を無期限に待機するようデータ プロバイダーに指示するには、-1 を指定します。
データの取得時に行セット キャッシュを最適化する
RowsetCacheSize プロパティを使用すると、データ プロバイダーは Informix から行をプリフェッチすると同時に、行を処理してデータ コンシューマーに返します。 この機能によって、マルチプロセッサ コンピューターおよびマルチコア コンピューターにおける一括読み取り専用処理のパフォーマンスが向上する場合があります。 このプロパティの既定値は 0 です (RowsetCacheSize=0)。この場合、オプションのプリフェッチ機能がオフになります。 推奨の設定値は 10 ~ 100 ですが、最初は 10 に設定することすることをお勧めします。この値は、データ ソース ウィザードまたはデータ リンクの [すべて] ダイアログを使用して調整できます。 このプロパティより、データ プロバイダーは指定された行バッチ数までプリフェッチし、データ プロバイダーの行セット キャッシュに保存します。 行バッチのサイズは、コンシューマーによって指定された OLE DB の IRowset::GetNextRows インターフェイス上の cRows の値に基づいて自動的に決定されます。
実行まで準備コマンドとパラメーターの送信を遅延する
Defer Prepare を使用すると、データ プロバイダーはパラメーター化された INSERT、UPDATE、DELETE、SELECT コマンドの処理を最適化します。 このオプションは OLE DB データ ソース初期化文字列 (Defer Prepare=True) を使用して指定できます。 また、データ ソース ウィザードの [詳細設定] ダイアログおよびデータ リンクの [すべて] ダイアログを使用してプールを構成できます。 INSERT、UPDATE、および DELETE コマンドについては、データ プロバイダーは prepare、execute、および commit コマンドをリモート データベースへの 1 つのネットワーク フローに結合します。 SELECT コマンドについては、PREPARE および EXECUTE コマンドを 1 つのネットワーク フローに結合します。 これによってネットワーク トラフィックが最小限に抑えられると共に、多くの場合、全体的なパフォーマンスが向上します。
実行時間の長いクエリを中断するコマンド タイムアウト
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 サーバー) の平均処理時間、コマンド実行数、データ フェッチ数、トランザクションのコミット数とロールバック数に関する情報がキャプチャされます。