目次 前 次 PDF


ロギング・ラスト・リソース・トランザクションの最適化

ロギング・ラスト・リソース・トランザクションの最適化
このトピックには次の項が含まれます:
概要
ロギング・ラスト・リソース(LLR)トランザクション最適化は、非XAリソースがグローバル・トランザクションに参加できるようにする、パフォーマンス向上のためのオプションです。
LLRリソースは、そのトランザクション処理にローカル・トランザクションを使用します。Oracle Tuxedoトランザクション・マネージャは、トランザクションの他のすべてのリソースを準備し、LLRリソースのローカル・トランザクションの結果に基づいてグローバル・トランザクションに対するコミットの決定を下します。
LLR参加リソースによるグローバルな2フェーズ・コミット(2PC)トランザクションでは、Oracle Tuxedoトランザクション・マネージャは次の基本的な手順に従います。
リカバリでは、LLR表に残されたトランザクション・レコードは、完了するトランザクションと見なされます。
ロギング・ラスト・リソースの構成
RMファイル内のLLRライブラリの構成
LLRライブラリには、XA操作およびLLRサーバー/TMS用のいくつかの共通APIをエミュレートするXAスイッチが用意されています。${TUXDIR}/udataobjにあるRMファイル内のLLRライブラリは、次のように構成します。
[LLR XAスイッチ名]:[LLR XAスイッチ変数]:[リンク・オプション]
表20-1に、LLRライブラリの詳細を示します。
 
${TUXDIR}/lib/libllroraesql.so
一般的には、LLR XAスイッチ変数はtuxllrsw_[name]、LLR XAスイッチ名はtuxllr_[name]です。関連ライブラリ名はlibllr[name]で、この[name]はRM IDおよび実装IDから構成されます。たとえば、oraはOracleデータベースを示し、esqlは埋込みSQLを示します。
UBBCONFIGファイル内のOPENINFOの構成
UBBCONFIGファイル内のOPENINFOは、次の形式で構成します。
[LLR XAスイッチ名]:[オープン文字列]
表20-2に、その詳細を示します。
 
TuxLLRは、Tuxedo LLRのための特定のオプション・フィールドであり、LLR表名を定義します。定義されない場合は、デフォルト名が使用されます。
LLR表は、LLRサーバーが関係するトランザクションのコミット中のTLOGを格納するために使用されます。この表のデフォルト名はTUXLLR_[DOMAINID]です。[DOMAINID]が空の場合は、DOMが使用されます。TuxLLRを使用してLLR表の名前を指定する場合は、同じ非XAリソース内で異なるTuxedoドメインには必ず異なるLLR表が使用されていることを確認します。そうでない場合は、リカバリが正しく機能しないことがあります。
さらに、LLRスイッチによって使用されるRMのユーザー・アカウントに、LLR表を作成および更新する権限があることを確認します。このようにしないと、エラーが発生することがあります。
たとえば、Oracleデータベースで次のようなメッセージが表示されます。
ORA-01950: 表領域'string'に対する権限がありません
これは、そのユーザーに、指定された表領域でエクステントを割り当てる権限がないことが原因です。この問題を解決するには、適切なシステム権限または表領域における領域リソースをユーザーに付与します。
UBBCONFIGファイル内のLLRオプションの構成
LLR_DELSWAPSIZE numeric_value
スワップ領域に格納できる、完了したLLR関連2PCグローバル・トランザクションID (gtrid)の最大数を指定します。デフォルト値は0です。LLR機能を有効化するには、正の値を指定します。
LLR_DELDELAY numeric_value
LLRの完了したレコードの遅延削除の間隔となる、基本のSCANUNITに対する乗数を指定します。この値は0より大きくなければなりません。このパラメータを指定しない場合、SCANUNIT * LLR_DELDELAYが約30秒になるようにデフォルト値が設定されますが、SCANUNITの値が30秒より大きいときは、LLR_DELDELAYは1に設定されます。
LLRサーバー/TMSの作成
Oracle Tuxedoでは、XAスイッチ名の接頭辞がtuxllr_の場合、Oracle Tuxedo固有のLLR XAスイッチとしてXAスイッチが使用されます。
アプリケーション・サーバーは、LLR XAスイッチを使用して作成されているかぎり、Oracle TuxedoによってLLRサーバーとして処理されます。同じグループ内で同じLLR XAスイッチを使用して作成されたTMSサーバーは、LLR TMSとして扱われます。LLRサーバーが属するグループがLLRグループです。LLRサーバーが関係するトランザクションがLLR関連トランザクションです。このトランザクションのTLOGレコードは、Oracle Tuxedoの従来のTLOGファイルではなく、LLR表に格納されます。
LLRサーバー/TMSでは、正しいLLR XAスイッチを使用する必要があります。これは、RMおよびその実装が、XAスイッチを提供するLLRライブラリと同じである必要があることを意味します。
標準的な構成例
1つのローカル・トランザクションで、埋込みSQLを使用してOracleデータベース表にレコードを挿入するLLRサーバー(server.pc)の例を次に示します。
リスト20‑1  
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
char mylog[200];
int mypid;
EXEC SQL END DECLARE SECTION;
int tpsvrinit(int argc, char *argv[])
{
tpopen();
mypid=getpid();
return(0);
}
void tpsvrdone()
{
tpclose();
}
void ECHO(TPSVCINFO *rqst)
{
strncpy(mylog, rqst->data,rqst->len);
mylog[rqst->len-1] = 0;
EXEC SQL INSERT INTO TUX_RAC_TAB(OWNER, DATA) VALUES(:mypid, :mylog);
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);/*do not commit the local transaction*/
}
 
リスト20-2 RMファイルの構成
tuxllr_oraesql:tuxllrsw_oraesql: -lllroraesql -L${ORACLE_LIB} -lclntsh
 
リスト20-3 UBBCONFIGの構成
*RESOURCE
MODEL SHM
SCANUNIT 5
MAXGTT 600
LLR_DELDELAY 6
LLR_DELSWAPSIZE 500
*MACHINES
"m1" LMID=L1 TLOGSIZE=100
*GROUPS
GRP1 LMID=L1 GRPNO=10 TMSNAME="TMS_LLRORAESQL" TMSCOUNT=2
OPENINFO="tuxllr_oraesql:ORACLE_XA+SqlNet=orcl.tux1+ACC=P/scott/tiger"
server1 SRVGRP=GRP1 SRVID=10
 
リスト20-4 LLRサーバーおよびTMSの作成
${PROC} ${PROCFLAGS} iname=server.pc
buildserver -r tuxllr_oraesql -o server1 -f server.c
buildtms -r tuxllr_oraesql -o TMSLLRORAESQL
 
完了したLLRトランザクションのTLOGレコードの遅延削除
LLR表内の完了した2PCグローバル・トランザクションID (gtrid)のTLOGレコードは、遅延方式でパージされます。このパージはタイマーに基づきます。LLR_DELDELAYパラメータを使用してこれを構成できます。
新しく導入されたBB内のスワップ領域が、完了したLLR関連gtridを一時的に格納するために使用されます。BBLにより、スワップ領域内のこれらのgtridが各ローカル・キャッシュ・スキャン・ユニットに移動され、タイムアウトすると、gtridに従ってLLR表内の対応するTLOGレコードがパージされます。スワップ領域のサイズは、LLR_DELSWAPSIZE属性を使用して指定できます。
スワップ領域が小さすぎる場合、その時点でスワップ領域に格納できない完了したgtridは、関連するコーディネータTMSプロセスによって一時的にキャッシュされます。
予期しないノード・クラッシュ(例: BBの消失)が発生すると、時間どおりにパージされず、完了したレコードがLLR表に残ります。Tuxedoリカバリ中のトランザクション表のエントリには各レコードが必要です。BB内のトランザクション表のサイズは、MAXGTTで指定されます。MAXGTTがこれらのレコードを格納するのに十分な大きさでない場合、ノードが復元されるときにBBLの起動が失敗します。これが発生した場合は、MAXGTTの値を増やして再試行してください。
少なくとも、スキャン・ユニット内のすべての完了したLLR関連2PCのgtridを格納できるように、十分なLLR_DELSWAPSIZEを指定することをお薦めします。
BBLでは、LLR表内の完了したgtridレコードをパージしません。これはシステム提供のLLRヘルパー・プロセスを呼び出して、このジョブを実行します。このプロセスは、Tuxedoリカバリ中にBBLがLLRデータ内のレコードを取得する場合にも役立ちます。
注意:
.llrディレクトリが$APPDIRの下に作成され、LLRによって使用される一時ファイルが格納されます。
制約および制限事項
通常のXAサーバーと同様に、LLRサーバー内の顧客コードは、tpopen/tpcloseを介して接続を管理する必要があります。
LLRサーバーによって使用されるOPENINFOは、MRMグループに従って、GROUPセクションに指定する必要があります
LLRサーバーでは、tpsuspendおよびtpresumeはサポートされていません
RM固有(libllroraesql固有)
XAスイッチtuxllrsw_oraesqlのシミュレートでは、スレッド・コンテキストはサポートされていません。LLR関連MRMグループに従って、Oracleデータベースへのその他のXA接続では、OPENINFOThreadsプロパティは有効にしないでください。そうでない場合は、アプリケーション・サーバーでのLLR接続上のSQLジョブは動作しません。
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved