17.00 - 17.05 - DBQLXMLLockTblのデータの断片化 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データベースの管理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
管理
Publication ID
B035-1093-170K-JPN
Language
日本語 (日本)
XMLTextInfoフィールドのロック プラン データをシュレッドして、ロック競合の詳細を確認するには、以下の手順を実行します。
  1. 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...
  2. BTEQを使用してログオンし、このプロシージャを以前に使用した際に作成されたオブジェクトを削除してから、ユーザー定義ターゲット データベースを作成します。
    .logon unzen,dbc;
    drop database TargetDBName
    create database TargetDBName as perm=10000000
  3. 権限を新しいユーザー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;
  4. 以前の断片化操作のターゲット テーブルが残っている場合、それらのテーブルを削除します。
    断片化操作によって、断片化されたデータを格納するためのターゲット テーブルが作成されます。ユーザーはSQL DDLを作成しません。ただし、ユーザーはそのための領域を準備し、そのテーブルを格納する必要があります。それぞれのシュレッディング操作の後に、前回のシュレッディング操作によるデータをクリーンアップして、古いデータが蓄積するのを回避します。
    drop table TargetDBName.Shredded_LockTbl;
    drop table TargetDBName.Shredded_TransTbl;
  5. 必要に応じてBTEQを使用し、出力をフォーマットする準備をします。
  6. シュレッドされたデータを持つターゲット テーブルを作成するストアド プロシージャを呼び出します。テーブルがすでに存在する場合、ゼロ以外の結果が返されます。
    CALL
    LockLogShredder.SP_CreateTable('TargetDBName','Shredded_LockTbl',
    'Shredded_TransTbl', resultCode);
  7. ターゲット テーブルにデータを取り込むストアド プロシージャを呼び出します。
    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は、ブロックするトランザクションの背後で待機するすべてのブロックされたトランザクションを含むように、これを展開します。
  8. 結果のサイズが事前にわかるように、ターゲット テーブルのシュレッドされた行の数を表示します。
    sel count(*) from TargetDBName.Shredded_LockTbl;
    sel count(*) from TargetDBName.Shredded_TransTbl;
  9. シュレッドされたロック テーブルとトランザクション テーブルに問合わせを行ない、ブロックされたトランザクションのリストを表示します。
    sel queryid from TargetDBName.Shredded_LockTbl order by 1;
    sel queryid from TargetDBName.Shredded_TransTbl order by 1;
  10. データの問合わせを行ない、基本ロック テーブルの行を表示します。
    次の例では、情報を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 ?
  11. データの問合わせを行ない、トランザクション テーブルの行を表示します。
    次の例は、ロック競合中のリクエストのトランザクション状態を示しています。問合わせが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
    
    
  12. 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';