XLAは、非永続モードで初期化できます(「永続および非永続のXLAモード」を参照)。ほとんどの場合、XLAは永続モードで使用する必要があります。ただし、ディスクレス・ロギングを有効(Logging = 2)にしてデータ・ストアからレコードを読み取る場合は、非永続モードでXLAを使用する必要があります。
非永続モードと永続モードの主な相違点として、非永続モードでの処理の特徴を次に示します。
次の項では、非永続モードでのXLAの処理手順について説明します。
XLAでのその他のすべての手順(ブックマークに関連するものは除く)は、「XLAイベント・ハンドラ・アプリケーションの作成」で説明されている手順と同じです。
「データ・ストア接続ハンドルの取得」の説明に従ってODBCを初期化し、環境ハンドル、接続ハンドルおよび文ハンドルを取得した後、非永続モードでXLAを初期化し、XLAハンドル(xla_handle)を取得してトランザクション・ログにアクセスできます。非永続モードでは、複数のオープンXLA接続が存在する場合がありますが、いずれの時点でも1つの接続のみがステージング・バッファにアクセスするように読取りを調整する必要があります。
非永続モードでのXLAの初期化は、ブックマークを識別する必要がないことを除き、永続モードでの初期化とほぼ同じです(「XLAの初期化およびXLAハンドルの取得」を参照)。ttXlaHandle_h型としてxla_handleを初期化し、ttXlaOpenTimesTen関数へアドレスを渡してXLAハンドルを取得します。
非永続モードでXLAを初期化した後、ttXlaConfigBuffer関数を使用して、XLAステージング・バッファのサイズを設定します。1つのステージング・バッファのみが1つのデータ・ストアに対して設定できます。ステージング・バッファのサイズの設定は、通常の切断の場合は保持されます。ただし、このサイズ設定は、チェックポイント処理が行われているかどうかによっては、異常終了した場合に保持されない可能性があります。
ステージング・バッファのサイズを選択する場合は、バッファを小さく設定しすぎると、TimesTenの更新でバッファがいっぱいとなり、それ以上の更新が拒否されることを考慮してください。また、バッファに大量の領域を割り当てすぎると、メモリーが浪費されます。
ステージング・バッファのサイズを設定するには、ttXlaConfigBufferのnewSizeパラメータに値を、oldSizeパラメータにNULLを指定します。oldSizeには、ステージング・バッファの以前のサイズが返されます。
たとえば、ステージング・バッファのサイズを400,000バイトに設定するには、次のように入力します。
SQLUBIGINT oldsz, newsz newsz = 400000; rc = ttXlaConfigBuffer(xla_handle, &oldsz, &newsz); printf("The old size of the XLA buffer is %d\n",(int)oldsz); printf("The new size of the XLA buffer is %d\n",(int)newsz);ステージング・バッファのサイズは、設定後、随時サイズ変更できます。ただし、サイズ変更を行うと、現在のバッファがコピーされるため、大幅にパフォーマンスが低下する場合があります。より小さいサイズをステージング・バッファに指定し、その小さいサイズに現在の内容を格納できない場合、ステージング・バッファは変更されず、エラーが返されます。
また、ttXlaConfigBuffer関数を使用すると、ステージング・バッファの現在のサイズを取得できます。現在のバッファ・サイズを取得するには、newSizeにNULLを指定します。ステージング・バッファの現在のサイズはoldSizeに返されます。次に例を示します。
rc = ttXlaConfigBuffer(xla_handle, &oldsz, NULL); printf("The old size of the XLA buffer is %d\n",(int)oldsz);XLAの使用を終了した後、サイズを0(ゼロ)に設定してステージング・バッファを削除できます。次に例を示します。
newsz = 0; rc = ttXlaConfigBuffer(xla_handle, NULL &newsz);
非永続モードでXLAを処理している場合は、ttXlaStatus関数を使用して、トランザクション・ログ・バッファおよびXLAステージング・バッファのステータス情報を取得できます。この情報はttXlaStatus_tデータ型でコード化されます。この情報には、次の情報が含まれています。
たとえば、現在のXLAのステータスを取得するには、次のように入力します。
ttXlaStatus_t s; rc = ttXlaStatus(xla_handle, &s);ttXlaResetStatus関数を使用してttXlaStatus_t -> xlabufminfreeフィールドの値を再設定できます。次に例を示します。
rc = ttXlaResetStatus(xla_handle);ttXlaStatus_t -> xlabufminfree 値は、トランザクション・ログ・バッファ内の空き領域の最小数(バイト)で、ステージング・バッファの最適サイズを再計算する場合に有効な統計です。トランザクション・ログ・バッファを拡大および縮小すると、xlabufminfreeは最小領域を正確に反映しなくなります。ttXlaResetStatusをコールしてxlabufminfreeをNULLに設定し、後でttXlaStatusをコールして新しい最小値を取得してから、最適なnewSize値を計算してttXlaConfigBuffer関数に渡します。