XMLTextInfoフィールドのロック プラン データをシュレッドして、ロック競合の詳細を確認するには、以下の手順を実行します。
- DIPPOSTスクリプトがシステム上で実行されたことを確認します。DIPPOSTは、インストール時にDIPALLの一部として実行される最後のスクリプトです。このスクリプトを実行する必要がある場合、このスクリプトは短時間で実行されます。Linuxコマンド ラインからDIPを開始し、DIPPOSTスクリプトを実行します。
dip
ポスト コマンド スクリプトの名前を選択します。DIPPOST Executing DIPPOST Please wait... DIPPOST is complete Would you like to execute another DIP script (Y/N)? n Exiting DIP...
- BTEQを使用してログオンし、このプロシージャを以前に使用した際に作成されたオブジェクトを削除してから、ユーザー定義ターゲット データベースを作成します。
.logon unzen,dbc; drop database TargetDBName create database TargetDBName as perm=10000000
- 権限を新しいユーザーlocklogshredderに付与し、locklogshredderとしてログオンします。DIPPOSTスクリプトがユーザーlocklogshredderを作成しました。
grant all on TargetDBName to TargetDBName with grant option; grant all on TargetDBName to dbc with grant option; grant all on TargetDBName to locklogshredder with grant option; grant all on locklogshredder to TargetDBName with grant option; grant all on td_sysxml to TargetDBName with grant option; grant all on TargetDBName to td_sysxml with grant option; .logon unzen/locklogshredder;
- 以前の断片化操作のターゲット テーブルが残っている場合、それらのテーブルを削除します。断片化操作によって、断片化されたデータを格納するためのターゲット テーブルが作成されます。ユーザーはSQL DDLを作成しません。ただし、ユーザーはそのための領域を準備し、そのテーブルを格納する必要があります。それぞれのシュレッディング操作の後に、前回のシュレッディング操作によるデータをクリーンアップして、古いデータが蓄積するのを回避します。
drop table TargetDBName.Shredded_LockTbl; drop table TargetDBName.Shredded_TransTbl;
- 必要に応じてBTEQを使用し、出力をフォーマットする準備をします。
- シュレッドされたデータを持つターゲット テーブルを作成するストアド プロシージャを呼び出します。テーブルがすでに存在する場合、ゼロ以外の結果が返されます。
CALL LockLogShredder.SP_CreateTable('TargetDBName','Shredded_LockTbl', 'Shredded_TransTbl', resultCode);
- ターゲット テーブルにデータを取り込むストアド プロシージャを呼び出します。
CALL LockLogShredder.SP_LockLog_Shredder('select random(0,21437899), CREATEXML(xmltextinfo) from dbc.dbqlxmllocktbl', 'TargetDBName','Shredded_Locktbl', 'Shredded_TransTbl', resultCode);
このストアド プロシージャは、DBQLXMLLockTblのXMLデータをシュレッドし、各XMLを1つの長いテキスト文字列から複数のフィールドに変換し、それらを2つのターゲット テーブルに格納します。ターゲット テーブルShredded_LockTblは、DBQLXMLLockTblのTextInfo列で、大半のロック情報のシュレッドされた出力を保持します。ロック競合情報には、ブロックするトランザクションとそれによりブロックされる最初のトランザクションのみが含まれます。ターゲット テーブルShredded_TransTblは、ブロックするトランザクションの背後で待機するすべてのブロックされたトランザクションを含むように、これを展開します。 - 結果のサイズが事前にわかるように、ターゲット テーブルのシュレッドされた行の数を表示します。
sel count(*) from TargetDBName.Shredded_LockTbl; sel count(*) from TargetDBName.Shredded_TransTbl;
- シュレッドされたロック テーブルとトランザクション テーブルに問合わせを行ない、ブロックされたトランザクションのリストを表示します。
sel queryid from TargetDBName.Shredded_LockTbl order by 1; sel queryid from TargetDBName.Shredded_TransTbl order by 1;
- データの問合わせを行ない、基本ロック テーブルの行を表示します。次の例では、情報をShredded_LockTblから取得して、要求されたロックの取得がブロックされるクエリーを表示します。ここでテーブルt3にはすでに書き込みロックがあり、他の2つのリクエストが同じテーブルで読み取りロックと排他ロックを取得しようとすると、ブロックされます。Shredded_LockTbl.BlockedLockTypeRequestedフィールドでは、問合わせをブロックしたロック リクエストに関する情報が提供されます。
SELECT QueryId, DatabaseName, TableName, SessionID_Combined , BlockedUserName, BlkedDatabaseName , BlkedTableName , BlkedPEVproc, BlkedTransactionStartTime, BlkedStepNum_1, BlkedStepNum_2, BlockedSessionID_Combined, BlockedLockTypeRequested, BlkedTransactionState FROM TargetDBName.Shredded_LockTbl; *** Query completed. 2 rows found. 14 columns returned. *** Total elapsed time was 1 second. queryid 307195142968284064. DatabaseName USER1 TableName t3 SessionID_Combined 1646 BlockedUserName ? BlkedDatabaseName ? BlkedTableName ? BlkedPEVproc ? BlkedTransactionStartTime ? BlkedStepNum_1 ? BlkedStepNum_2 ? BlockedSessionID_Combined 1650 BlockedLockTypeRequested Read BlkedTransactionState ? queryid 307195142968284063. DatabaseName USER1 TableName t3 SessionID_Combined 1650 BlockedUserName ? BlkedDatabaseName ? BlkedTableName ? BlkedPEVproc ? BlkedTransactionStartTime ? BlkedStepNum_1 ? BlkedStepNum_2 ? BlockedSessionID_Combined 1651 BlockedLockTypeRequested Exclusive BlkedTransactionState ?
- データの問合わせを行ない、トランザクション テーブルの行を表示します。次の例は、ロック競合中のリクエストのトランザクション状態を示しています。問合わせがt3で排他ロックを要求するために無限にブロックされ、しばらくするとアボートされました。次の出力では、同じqueryidの2番目のエントリは、オブジェクト情報とトランザクション状態がなく、無限の待機のために問合わせがアボートされたことを示しています。
SELECT QueryID, DatabaseName, TableName, StepNum_1, StepNum_2, TransactionState, TransactionStartTime, unique_1 , unique_2 , PEVproc , LockObjectRequested, LockTypeRequested, LockStatus FROM TargetDBName.Shredded_TransTbl; *** Query completed. 3 rows found. 13 columns returned. *** Total elapsed time was 1 second. queryid 307195142968284072. DatabaseName USER1 TableName t3 StepNum_1 1 StepNum_2 0 TransactionState Inactive TransactionStartTime 2017-11-29 06:09:01.930000 unique_1 15 unique_2 10014 PEVproc 30719 LockObjectRequested R LockTypeRequested Exclusive LockStatus Waiting queryid 307195142968284071. DatabaseName ? TableName ? StepNum_1 ? StepNum_2 ? TransactionState ? TransactionStartTime ? unique_1 ? unique_2 ? PEVproc ? LockObjectRequested ? LockTypeRequested ? LockStatus ? queryid 307195142968284072. DatabaseName ? TableName ? StepNum_1 ? StepNum_2 ? TransactionState ? TransactionStartTime ? unique_1 ? unique_2 ? PEVproc ? LockObjectRequested R LockTypeRequested Exclusive LockStatus Waiting
- QueryIdフィールドを使用して、シュレッドされたターゲット テーブルShredded_LockTblとShredded_TransTblを結合します。このフィールドは両方のテーブルにあります。
SELECT a.queryid (TITLE 'QUERYID'), a.DatabaseName (TITLE 'Lock_DatabaseName'), a.TableName (TITLE 'Lock_TableName'), a.UserName (TITLE 'Lock_UserName'), a.AccountName (TITLE 'Lock_AccountName'), a.MessageClass (TITLE 'Lock_MessageClass'), a.MessageKind (TITLE 'Lock_MessageKind'), a.MessageClassName (TITLE 'Lock_MessageClassName'), a.MessageKindName (TITLE 'Lock_MessageKindName'), a.WorkLevel (TITLE 'Lock_WorkLevel'), a.OperationType (TITLE 'Lock_OperationType'), a.JobType (TITLE 'Lock_JobType'), a.LockTypeRequested (TITLE 'Lock_LockTypeRequested'), a.LockObjectRequested (TITLE 'Lock_LockObjectRequested'), a.BlockedLockTypeRequested (TITLE 'Lock_BlockedLockTypeRequested'), a.BlockedLockObjectRequested (TITLE 'Lock_BlockedLockObjectRequested'), a.LockDelay (TITLE 'Lock_LockDelay'), a.LocalDeadLock (TITLE 'Lock_LocalDeadLock'), a.GlobalDeadLock (TITLE 'Lock_GlobalDeadLock'), a.MultipleBlocker (TITLE 'Lock_MultipleBlocker'), a.ErrorText (TITLE 'Lock_ErrorText'), a.AbortFlag (TITLE 'Lock_AbortFlag'), a.ErrorCode (TITLE 'Lock_ErrorCode'), b.queryid (TITLE 'COMMON QUERYID'), b.DatabaseName (TITLE 'Trans_DatabaseName'), b.TableName (TITLE 'Trans_TableName'), b.unique_1 (TITLE 'Trans_unique_1'), b.unique_2 (TITLE 'Trans_unique_2'), b.PEVproc (TITLE 'Trans_PEVproc'), b.LockTypeRequested (TITLE 'Trans_LockTypeRequested'), b.LockObjectRequested (TITLE 'Trans_LockObjectRequested') FROM TargetDBName.Shredded_LockTbl a, TargetDBName.Shredded_TransTbl b WHERE a.QueryId = b.QueryId and a.GlobalDeadLock='true';