ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者ガイド
リリース11.2.1
B56048-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

7 アプリケーションのチューニング

この章では、TimesTenデータ・ストア上で最適に実行されるようにCアプリケーションをチューニングする方法について説明します。 チューニングの一般的な詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTen Databaseのパフォーマンス・チューニングに関する項を参照してください。

この章の内容は次のとおりです。

ドライバ・マネージャの回避(必要な場合)

ドライバ・マネージャで提供される一部の機能を必要としないODBCアプリケーションは、ドライバ・マネージャを使用しないでTimesTenにリンクできます。特に、TimesTen以外のデータ・ベース・システムへのODBCアクセスを必要としないアプリケーションでは、ドライバ・マネージャを使用しないことを検討する必要があります。 これは、アプリケーションをTimesTenのデータ・マネージャまたはクライアント・ドライバに直接リンクすることによって行います(「リンク・オプション」を参照)。パフォーマンスは、約20%向上します。

アプリケーションがドライバまたはドライバ・マネージャと直接リンクしているかどうかを確認する方法については、「リンク・オプションのテスト」を参照してください。


注意:

データ・ストアに接続している一部のアプリケーションは、ドライバ・マネージャを使用してリンクできます。同じデータ・ストアに接続している他のアプリケーションは、直接リンクされます。

バッチ実行用パラメータ配列の使用

アプリケーションで、バッチと呼ばれる文の実行のグループを使用して、パフォーマンスを向上できます。

SQLParamOptions ODBC関数では、アプリケーションによってSQLBindParameterで割り当てられるパラメータのセットに複数の値を指定できます。 これは、同じSQL文を様々なパラメータ値を使用して複数回処理する場合に有効です。 たとえば、アプリケーションで、INSERT文に関連付けられているパラメータのセットに複数の値のセットを指定すると、INSERT文を1回実行してその挿入処理をすべて実行できます。

TimesTenでは、SQLParamOptionsをINSERT、UPDATEおよびDELETE文とともに使用できますが、SELECT文とともに使用することはできません。 TimesTenリリース11.2.1では、次のバッチ・サイズをお薦めします。

表7-1に、SQLParamOptions引数の概要を示します。 詳細は、ODBC APIのリファレンス・マニュアルを参照してください。

表7-1 SQLParamOptions引数

引数 説明

hstmt

SQLHSTMT

文ハンドル

crow

SQLROWSETSIZE

各パラメータの値の数。

pirow

SQLROWSETSIZE

現在の行番号の記憶域へのポインタ。


crow値が1より大きく、SQLBindParameterrgbValue引数がパラメータ値の配列を指し、pcbValue引数が長さの配列を指すことを想定しています。 (「SQLBindParameter関数」も参照してください。)

バッチ処理の完全な動作例は、TimesTenクイック・スタート・デモのソース・ファイルbulkinsert.cを参照してください。 (TTClassesを使用したC++でのプログラミングについては、bulktest.cppも参照してください。)


注意:

SQLParamOptionsをTimesTen Client/Serverドライバとともに使用する場合、実行時データ・パラメータはサポートされません。

過剰なバインドの回避

SQLBindColまたはSQLBindParameterは、型変換およびプログラム・バッファをデータ列またはパラメータと関連付けるためにコールします。 特定のSQL文で、文を繰り返し実行する間に特定のデータ列またはパラメータに対する型変換またはメモリー・バッファが変更されない場合は、SQLBindColまたはSQLBindParameterを繰り返しコールしないことをお薦めします。


注意:

SQL_UNBINDオプションを指定してSQLFreeStmtをコールすると、すべての列がアンバインドされます。

SQLGetDataの回避

SQLGetDataを使用すると、列をバインドせずにデータをフェッチできます。 この場合、アプリケーションでフェッチ対象のすべての行のすべての列に対してSQLGetData ODBCコールを発行する必要があるため、パフォーマンスに悪影響を及ぼす可能性があります。一方、バインドされた列を使用する場合は、フェッチされる列ごとに1回のみのODBCコールが必要となります。また、TimesTen ODBCドライバには、バインドされた列でデータをフェッチする方法が適しています。

ただし、SQLGetData は、長い文字列またはバイナリ列からデータをピース単位でフェッチする場合に非常に有効です。

データ型の変換の回避

TimesTenの命令パスは非常に短いため、データ変換による短時間の遅れでさえ、トランザクション時間の大幅な増加の原因となる可能性があります。 データ型の変換を回避するには、次の手順を実行します。

TimesTenデータ行のバルク・フェッチ

TimesTenのTT_PREFETCH_COUNTオプション(SQLSetStmtOptionを使用して設定可能)を使用すると、アプリケーションで複数のデータ行をフェッチできます。この機能は、コミット読取り分離レベルを使用しているアプリケーションで使用できます。大量のTimesTenデータを取得するアプリケーションの場合、複数行のフェッチによってパフォーマンスを大幅に向上させることができます。ただし、すべてのアプリケーションですべてのデータが取得されるまで、取得されるすべての行にロックが設定されるため、同時実行性は低下します。 TT_PREFETCH_COUNTの使用方法の詳細は、「複数のデータ行のプリフェッチ」を参照してください。