Oracle Tuxedoアプリケーションの設定

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

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

このトピックには次の項が含まれます:

 


概要

ロギング・ラスト・リソース(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ライブラリの詳細を示します。

表20-1 LLRライブラリ
LLR XAスイッチ名
LLR XAスイッチ変数
リンク・オプション
RM
実装
LLRライブラリ
tuxllr_oraesql
tuxllrsw_oraesql
-lllroraesql -L${ORACLE_LIB}
-lclntsh
Oracle
埋込みSQL
${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に、その詳細を示します。

表20-2 OPENINFOの形式
LLR XAスイッチ名
書式
tuxllr_oraesql
ORACLE_XA{+required_fields...} [+optional_fields...]
SqlNet、AccおよびDBの詳細は、 Oracleオンライン・ドキュメントを参照してください。

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によって使用される一時ファイルが格納されます。

 


制約および制限事項


  先頭に戻る       前  次