8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.


Teradataのクエリーログ(DBQL)について

警告
本記事はTeradata CorporationのサイトTeradataドキュメントに掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については原本をご参照下さい。
また、修正が必要な箇所やご要望についてはコメントをよろしくお願いします。

概要

Teradataへアクセスされるクエリーログ(DBQL)の取得設定方法、及びログ内容についての説明です。

前提条件

・当内容はTeradataVantageのバージョン17.20を前提に記載しています。
・Teradataシステムへ管理者ユーザ(dbc)でのログインが必要です。
・ロギングの開始、編集、終了のコマンド実行時はTeradataモードでの実行が必要です。(Teradata Vantage SQLリクエストおよびトランザクション処理)

クエリーログの設定確認を行う。

クエリーログの取得には、DBQLRulesテーブルに設定が必要となります。
まずは設定状況を確認してみましょう。

dbcユーザでログインを行い、以下SQLを実行し内容を確認します。

dbqlrules.sql
SELECT * FROM DBC.DBQLRules;

返される結果は以下のようになります。

【Teradata Vantage17.20のDBQLRulesの参照例】

UserName AccountString ApplName TypeOfRule ExplainFlag ObjFlag SqlFlag StepFlag XMLPlanFlag StatsUsageFlag Verbose DetailedStats NoColumns SummaryFlag ThresholdFlag ObjectUsage ParamFlag FeatureUsage UtilityInfoFlag TextSizeLimit SummaryVal1 SummaryVal2 SummaryVal3 LockDelay AlgMode TypeOfCriterion DetailDiag
UserA Logging enabled F F F F F F F F F F F F F F F 200 null null null 0 null NO CRITERION null

UserNameカラムに対象ユーザが存在し、TypeOfRuleカラムがLogging enabled"となっていれば、クエリーログの取得ができている状態となります。
代表的なDBQLRulesの設定パラメータ、及び設定時の格納テーブル、参照ビューは以下となります。

設定カラム 設定値 格納テーブル ロギング内容 参照ビュー
TypeOfRule Logging enabled:ロギング有効
WITH NONE:ロギング無効
DBQLogTbl ロギングされている問合わせに関する情報を格納するメインのテーブル。 QryLogV
ExplainFlag T:取得
F:未取得
DBQLExplainTbl 改行なし、書式なしのExplain情報を格納する。 QryLogExplainV
ObjFlag T:取得
F:未取得
DBQLObjTbl ログ対象となっている問合わせのターゲット オブジェクトに関する情報を格納する。問合わせで参照されている各オブジェクトごとに1行が記録される。 QryLogObjectsV
SqlFlag T:取得
F:未取得
DBQLSqlTbl 問合わせのSQLテキスト全体を格納する。1つの問合わせ文字列につき複数行が必要な場合もある。 QryLogSQLV
StepFlag T:取得
F:未取得
DBQLStepTbl 問合わせの実行に使用される各処理ステップに関する情報を保存する。並列ステップを含む各ステップにつき1行が記録される。 QryLogStepsV

設定値の詳細内容は以下ドキュメントを参照してください。
Teradata Vantage - データベースの管理(クエリーロギング DBQL)

クエリーログの取得設定を行う。

1.DBQLRulesに新規にロギングルールを追加する場合。(BEGIN QUERY LOGGING構文)

Begin_Query_Logging.sql
BEGIN QUERY LOGGING [ WITH with_item [,...] ] ON ユーザ名;
[]はオプション
with_itemEXPLAIN,OBJECTS,SQL,STEPINFOなどを指定。

例1.UserAのDBQLロギングをオプション無しで開始する。

Begin_Query_Logging1.sql
BEGIN QUERY LOGGING ON UserA;

例2.UserBについてロギング開始。STEPINFO, OBJECTSの情報も格納させる。

Begin_Query_Logging2.sql
BEGIN QUERY LOGGING WITH STEPINFO, OBJECTS ON UserB;

2.DBQLRulesの既存のロギングルールを編集する場合。(REPLACE QUERY LOGGING構文)

Replace_Query_Logging.sql
REPLACE QUERY LOGGING [ WITH with_item [,...] ] ON ユーザ名;

例1.UserAのDBQLロギングについてSQL詳細情報(SQL文の文字列長の制約無し)を取得する。

Replace_Query_Logging1.sql
REPLACE QUERY LOGGING WITH SQL ON UserA;

例2.UserBについてDBQLogTblへのロギング、STEPINFO, OBJECTSの情報格納と合わせてEXPLAINの情報も格納させるよう追加する。

Replace_Query_Logging2.sql
REPLACE QUERY LOGGING WITH STEPINFO, OBJECTS , EXPLAIN ON UserB;

3.DBQLrulesのロギングルールを削除する場合。(END QUERY LOGGING構文)

End_Query_Logging.sql
END QUERY LOGGING ON ユーザ名;

例1.UserAのロギングルールを削除する。

End_Query_Logging1.sql
END QUERY LOGGING ON UserA;

クエリーログの参照を行う。

データベース クエリー ログの参照ビューQryLogVを参照する。

例1.ログ取得日時が2022年7月内でエラーとなったSQLのSQL開始時間、実行ユーザ、エラーコード、クエリー内容を特定する。

QryLogV_Select1.sql
SELECT StartTime,UserName,ErrorCode,QueryText
FROM dbc.QryLogV
WHERE
CollectTimeStamp >='2022-07-01 00:00:00' AND
CollectTimeStamp  <'2022-08-01 00:00:00' AND
ErrorCode<>0;
StartTime UserName ErrorCode QueryText
2022/07/22 15:18:52 UserA 6706 Insert into TblA Select * From TblB;
2022/07/18 1:02:34 UserB 3807 Select C1,C2,C3 From TblC Where C4=xxx;

例2.2022年8月12日の10時台でCPU負荷が高い順に、ログ取得時間、実行ユーザ、CPU時間、クエリー内容を特定する。

QryLogV_Select2.sql
SELECT CollectTimeStamp,UserName,AMPCPUTime,QueryText
FROM dbc.QryLogV
WHERE
CollectTimeStamp >='2022-08-12 10:00:00' AND
CollectTimeStamp  <'2022-08-12 11:00:00' 
ORDER BY AMPCPUTime DESC;
CollectTimeStamp UserName AMPCPUTime QueryText
2022/07/12 10:50:03 UserA 1005 Insert Into TblA Select C1,C2 From TblB;
2022/07/12 10:57:30 UserE 614 Update TblC Where C1=xxx;
2022/07/12 10:47:01 UserA 270 Select * From TblD Where C3=yyy;
2022/07/12 10:27:51 UserB 252 Select C4,C5,C6 From TblE;
2022/07/12 10:35:44 UserC 251 Select C7,C8 From TblF;
・・・ ・・・ ・・・ ・・・

QryLogV表示内容(Teradata Vantage17.20)

列名 内容
ProcID ディスパッチャのプロセス ID を返します。
CollectTimeStamp (プライマリ キー) DBQLogキャッシュが割り当てられた日時。
QueryID クエリーを識別するためにシステム全体で固有 ID を返します。
UserID ユーザーの ID を返します。
UserName クエリーを発行したユーザーの名前を返します。
DefaultDatabase クエリーで使われる現在のデフォルト データベースの名前を返します。
AcctString ユーザーがクエリーを発行した拡張アカウント文字列。
ExpandAcctString ユーザーの拡張ログオン列を返します。
SessionID セッションの固有の識別番号を返します。
LogicalHostID 記録されるクエリーのログオン元の固有識別子を返します。値 0 は内部セッションを意味します。
RequestNum すべてのクエリーのクライアント リクエスト番号。ストアド プロシージャ CALL 文内の文の場合、リクエスト番号は CALL と同じです。
InternalRequestNum データベース システムで使用される内部リクエスト番号を返します。
TxnUniq ProcId で使用されるトランザクション固有の部分。
LockLevel このリクエストに関連付けられた 高レベルのロック。
LogonDateTime セッションにログオンされた日時を返します。
AcctStringTime ユーザーが拡張アカウント文字列(ASE)を指定したときの&T コードの結果を返します。
AcctStringHour ユーザーが拡張アカウント文字列(ASE)を指定したときの&H コードの結果を返します。
AcctStringDate ユーザーが拡張アカウント文字列(ASE)を指定したときの&D コードの結果を返します。
LogonSource ログオン ソース文字列テキストを返します。
AppID アプリケーション ID を返します。
ClientID クライアント ID を返します。
ClientAddr 実行依頼されたクエリーのクライアント アドレス。
QueryBand クエリーが実行依頼されたバンドを返します。
ProfileID システムのコスト プロファイルインスタンスに割り当てられている固有番号を返します。
StartTime クエリーが実行依頼された時間を返します。
TDWMAdmissionTime ワークロード管理によってリクエストがシステムに入り込むことが許可される時刻(ARM 処理後)。
FirstStepTime このクエリーの 初のステップがディスパッチされた時間を返します。
FirstRespTime 初の応答がホストに送信された時間。
ElapsedTime 初の応答時間と開始時間の差を返します。
NumSteps このクエリーの(レベル 1)ステップの合計数を返します。
NumJoinSteps リクエスト内の結合ステップの数。
NumSumSteps リクエスト内の合計ステップの数。
NumStepswPar 並列ステップを持つ(レベル 1)ステップの数を返します。
MaxStepsInPar このクエリーに関して並列的に行なわれる(レベル 2)ステップの大数を返します。
NumResultRows クエリーで返された総行数を返します。
NumResultOneMBRows クエリーに返される一連の行内の1MB 行(1MB > size > 64KB)の数。
MaxOneMBRowSize クエリーで返される一連の行における 大 1MB 行の実際のバイト数。
TotalIOCount クエリーで生成された AMP の IO の数を返します。
AMPCPUTime このクエリーで使用される AMPCPU 合計時間(秒)。
ParserCPUTime クエリーに使用された構文解析プログラムとディスパッチャの合計 CPU 時間(秒)を返します。
UtilityByteCount FastLoad ジョブまたはMultiLoad ジョブの一部としてクライアントで転送されたバイト数。
UtilityRowCount FastLoad または MultiLoad で読み込まれた行数を返します。
ErrorCode クエリーが原因で構文解析プログラムのエラーが発生した場合にエラー コードを返します。
ErrorText ErrorCode が 0 でない場合のエラーのテキストを返します。
WarningOnly 警告モードで TDWM の実行中にエラーが報告された場合、またはまったくログに記録されていない場合は、警告コード T に true を返します。WarningOnly が true でない場合は、フィールドにNULL があります。
AbortFlag このクエリーがアボートされた場合に T(yes)を返します。
CacheFlag このフィールドは、クエリーがステップ キャッシュにない場合は空白です。使用可能な値は T、G、S、A です。
StatementType クエリーで実行された文のタイプ。複数文リクエストの 後の文のタイプ。
StatementGroup DDL、DML、または SELECT 文のいずれであるかに関わらず、クエリーのグループを返します。複文リクエストの場合、この値はリクエスト内のさまざまな文の種類の数を示します。
QueryText クエリー テキストを返します。デフォルトのサイズは 200 文字です。
NumOfActiveAMPs このクエリーでアクティブなAMP の数を返します。
MaxAMPCPUTime クエリーで CPU 使用率が も高かった AMP の CPU 時間(秒)を返します。
MaxCPUAmpNumber CPU 使用率が も高かった AMP 番号を返します。
MinAmpCPUTime ステップで CPU 使用率が も低かった AMP の CPU 時間(秒)を返します。
MaxAmpIO (HotAmpIO から名前変更)ステップで I/O 利用率が も高かったAMP を返します。
MaxIOAmpNumber ステップで I/O 使用量が も高かった AMP 番号を返します。
MinAmpIO (LowAmpIO から名前変更)クエリーで I/O が も低かった I/O カウントを返します。
SpoolUsage クエリー内の任意のステップのピーク スプール使用量(バイト)(DataCollectAlg = 3)。それ以外の場合、クエリーでスプールに使用されたバイト数。
LSN ロード ユーティリティに使用したログオン シーケンス番号を返します。
EstResultRows このクエリーで返される行の推定数。
EstProcTime EstProcTime は、 適化ルーチンからの推定処理秒数(0.001 秒単位)を返します。
EstMaxStepTime 適化ルーチンからの 大ステップ推定時間(秒)。
EstMaxRowCount このクエリーのステップの 大推定行数。
TDWMEstMemUsage 大ステップの 大推定メモリ(MB)。
AMPCPUTimeNorm 共存システムの正規化されたAMP CPU 時間(秒)を返します。
ParserCPUTimeNorm 共存システムの正規化された構文解析プログラム CPU 時間(秒) を返します。
MaxAMPCPUTimeNorm MaxAMPCPUTimeNorm は、クエリー内で CPU 使用率が大のAMP の正規化された CPU 時間を秒単位(0.001 の精度)で返します。
MaxCPUAmpNumberNorm CPU 使用率が も高かった AMP 番号を返します。
MinAmpCPUTimeNorm MinAmpCPUTimeNorm は、クエリー内で CPU 使用率が小のAMP の正規化された AMP CPU 時間を秒単位(0.001 の精度)で返します。
ParserExpReq 構文解析プログラムが高速リクエスト時に待機した秒数を返します。
ProxyUser プロキシ ユーザーの名前を返します。
ProxyRole クエリーに使用されるプロキシロール。
SessionTemporalQualifier DBC.QryLogV.SessionTemporalQualifier は、SQL ストアドとは別のセッションでセッション テンポラル修飾子を記録します。
CalendarName DBC.QryLogV.CalendarNameは、セッションに設定されたカレンダ名を記録します。
CPUDecayLevel 任意の 1 つのノードでの CPU 使用率が到達した も重大な低下レベルが含まれます。
IODecayLevel 任意の 1 つのノードでの IO 使用率が到達した も重大な低下レベルが含まれます。
TacticalCPUException CPU 例外があったノードの総数。
TacticalIOException IO 例外があったノードの総数。
SeqRespTime すべてのステップが順に実行されたと仮定した場合の、応答時間の合計秒数が含まれます。
ReqIOKB リクエストの論理 IO 使用量の合計キロバイト数。
ReqPhysIO リクエストの物理 I/O 数。
ReqPhysIOKB リクエストの物理 IO 使用量の合計キロバイト数。
DataCollectAlg DBQL が使用する CPU/IO 収集アルゴリズムを返します。使用可能な値には、1(従来のアルゴリズム) が含まれます。
CallNestingLevel リクエストがストアド プロシージャで実行されるときの入れ子レベル。
NumRequestCtx セッションと関連付けられたリクエスト コンテキスト数。
KeepFlag これは値(Y)または(N)のフラグで、クライアントの応答の必要がなくなるまで応答パーセルを保持する必要があることを示します。
QueryRedriven これは値(Y)または(N)のフラグで、クエリーが再実行されたかどうかを示します。
ReDriveKind クエリーが再実行されたときのリセット保護のタイプが含まれます。(MN)-メモリの非フォールバック応答、(DF)-ディクショナリテーブルのフォールバック応答、(DN)-ディクショナリ テーブル非フォールバック応答。
LastRespTime リクエストの終了、ホスト/クライアント応答フェーズの終了(該当する場合) (DataCollectAlg = 3)。
DisCPUTime このクエリーのディスパッチャで使用される CPU 秒数。
Statements リクエスト内の文の数。
DisCPUTimeNorm このクエリーのディスパッチャで使用される正規化 CPU 秒数。
TxnMode このクエリーのトランザクション モード(ANSI、BTET)。
RequestMode このクエリーのリクエスト モード: Prep - 準備クエリーのみ。PrepS - 準備クエリーのみ、パラメータ化 SQL。Exec - クエリーの実行。Both - 準備と実行クエリー。
DBQLStatus 内部 DBQL ロギング ステータス。
NumFragments リクエストの IPE 計画実行のフラグメント数。
VHLogicalIO リクエスト全体で Very Hot な論理 I/O の総数。
VHPhysIO リクエスト全体で Very Hot な物理 I/O の総数。
VHLogicalIOKB リクエスト全体で Very Hot な論理 I/O の総キロバイト数。
VHPhysIOKB リクエスト全体で Very Hot な物理 I/O の総キロバイト数。
LockDelay オブジェクトにロックを設定する 大待機時間(100 分の 1 秒単位)。
CheckpointNum MLOADX のチェックポイント間隔番号。
UnityTime ストアド プロシージャ リクエストが Unity によって処理された時間(秒単位)。
UtilityInfoAvailable リクエストに DBQLUtilityTblテーブルで利用可能なユーティリティ情報が含まれるかどうかを示します。
UnitySQL Y - Unity が SQL の変更をリクエストしたことを示します。Unity が Unity トランザクション テーブルを更新するようにリクエストしたときに設定されます。
ThrottleBypassed リクエストが TDWM のThrottleBypass 機能によってのみ実行が可能だったどうかを返します。
FlexThrottle フラグ'T'は、Flex Throttle 機能により、このクエリーが TDWM 遅延キューから解放されたことを示します。
IterationCount リクエストに関連するデータパーセルの反復回数。
TTGranularity セッションで設定されたトランザクション時間粒度名を記録します。
MaxStepMemory リクエストのいずれかのステップで使用される 大メモリ(MB)。
TotalServerByteCount 外部サーバーから送受信された合計バイト数。
PersistentSpool SpoolUsage の固定部分。
RemoteQuery フラグ'T'は、リモート クエリーが実行依頼されたことを示します。
ProxyUserID プロキシ ユーザーが永久ユーザーの場合、プロキシ ユーザーの内部 ID を返します。
DelayTime ワークロード管理によってクエリーが遅延した秒数を返します。
TDWMRuleID クエリーのルール識別子を返します。
MinRespHoldTime 小応答時間に適合するように応答が保持された秒数。
TotalFirstRespTime 遅延時間+実行時間+ 小応答時間(秒)
ParamQuery フラグ'T'は、クエリーがパラメータ化されていることを示します。
ProfileName ユーザーがクエリーを実行依頼したときのプロファイル名(存在する場合)を返します。
WDName クエリーに割り当てられたワークロード定義(WD)名を返します。
MaxNumMapAMPs リクエストで使用された 大連続マップの AMP の数を返します。
MinNumMapAMPs このリクエストで使用された小連続マップの AMP の数。
SysDefNumMapAMPs システム デフォルト マップのAMP の数。
UsedIota リクエストで使用される IO トークンを返します。
ImpactSpool リクエストによるシステム レベルのスプールへの影響。
AutoDBAData 値は、リクエストに AutoDBA データが含まれているかどうかを示します。
UAFName EXECUTE FUNCTION によって実行される分析関数の名前。デフォルトは NULL。
UnityQueryType リプレイされた SQL かまたはCDA かを示します。
DefaultDBCacheUsed 値「T」はステップ キャッシュのデフォルトの DB 部分が使用されたことを示す。それ以外の場合は「F」。リクエストがキャッシュされなかった場合は NULL。
ReqAWTTime リクエストの AWT 経過秒数を返します。
MaxReqAwtTime リクエストの 大 AWT 経過秒数を返します。
MaxReqAWTTimeAmpNum リクエストの 大 AWTTime を持つ AMP 番号を返します。
MinReqAWTTime リクエストの 小 AWT 経過秒数を返します。
UDFVMData リクエストの UDF 仮想メモリデータ サイズ。
UDFVMPeak リクエストの UDF 仮想メモリピーク。
TotalUDFMemUsage リクエスト用に UDF が使用するメモリの合計(バイト単位)。
MaxReqUDFMemUsage リクエスト用に UDF が使用する大メモリ(バイト単位)。
MaxReqUDFMemUsageAmpNum このリクエスト用に UDF が使用する 大メモリを持つ AMP 番号。
PGRCTimeToGetPlan パーティション化されたグローバル リクエスト キャッシュ機能がオンの場合に、ターゲット PE からの計画取得のために、キャッシュ管理スレッドとセッションスレッド間で通信する際の所要時間。
PGRCTgtPENum PGRC 機能が ON の場合に、このリクエストの PSTEPS を保持するターゲット PE 番号を返します。
NosRecordsReturned Native Object Store リクエストによって返されたレコードの数。
NosRecordsSkipped Native Object Store リクエストによってスキップされたレコードの数。
NosPhysReadIO Native Object Store ファイルの物理読み取り IO の合計。
NosPhysReadIOKB Native Object Store ファイルの物理読み取り IO の合計(KB)。
NosRecordsReturnedKB Native Object Store ファイルについて返されたレコードの合計(KB)。
NosTotalIOWaitTime リクエストでの Native Object Store IO の待機時間の合計(秒)。
NosMaxIOWaitTime リクエストでの Native Object Store IO の 大待機時間(秒)。
NosCPUTime リクエストの Native Object Storeファイルを読み取るための CPU 時間(秒)。この時間は、他のNOS CPU 以外のフィールドにすでに含まれています。
NosTables リクエストでアクセスされたNative Object Store テーブルの総数。READ_NOS を介してアクセスすると、他の NOS フィールドはインクリメントされますが、このフィールドはインクリメントされないので注意してください。
NosFiles このリクエストで、Native Object Store ファイルの読み取りが試行された回数。
NosFilesSkipped スキップされた Native Object Store ファイルの数。
StepCacheHash キャッシュされている場合は、このリクエストのステップ キャッシュのハッシュ値。それ以外の場合は NULL。
ResponseTimeMet クエリーがワークロード定義の目標サービス レベルを満たしている場合は T。
TDWMMSRCount リクエストで BT、ET、コミット、マクロ、実体化された Tmp テーブル、および Null 文を除いた、文の数。
DeferTime ARM ルールにより、ワークロード管理によってクエリーが遅延した秒数。
DeferRuleID このリクエストを遅延する原因となった ARM ルールの 1 つである TDWM ルール ID。
StmtDMLRowCount DML (挿入、更新、または削除)文の行数を返します。
UnityQueryForeignInfo UnityForeignQueryID および UnityForeignSystemID
MaxPSFWDID このリクエストで確認される大 PSF WDID。
MaxPSFWDIDAmpNum このリクエストの 大 PSF WDIDAMP 番号。
ReqPeakAmpPrvMem リクエスト内のいずれかの AMP で使用される、要求サイズに基づく専用メモリの合計ピーク(MB 単位)。
ReqPeakAmpPrvMemAmpNum リクエストで使用された要求サイズに基づく専用メモリの合計ピークを報告した AMP 番号。
ReqPeakAmpShrMem リクエスト内のいずれかの AMP で使用される、要求サイズに基づく共有メモリの合計ピーク(MB 単位)。
ReqPeakAmpShrMemAmpNum リクエストで使用された要求サイズに基づく共有メモリの合計ピークを報告した AMP 番号。
NosPhysWriteIO このリクエストでの Native Object Store ファイルの物理的な書き込み IO 数の合計。
NosPhysWriteIOKB このリクエストでの Native Object Store ファイルの物理的な書き込み IO の KB 合計。
NosFilesWritten このリクエストで Native Object Store が試行したファイル書き込み回数。
ReqPhysLocIO リクエストのローカル物理 IO の合計数。
ReqPhysLocIOKB リクエストのローカル物理 IO の合計(キロバイト単位)。
ReqLocSpoolUsage リクエストの SpoolUsage のローカル スプール使用量部分(バイト単位)。
TDWMEstMemResLimit メモリ リソース制限を検証するメモリ見積もり(メガバイト単位)。
HPTotalPipelines 計画内でパイプラインを使用して処理されているステップの合計数。
HPMaxPipelines パイプライン ユニットでの 大ステップ数は、クエリーを処理するために多くの AWT が必要になることを示します。

QryLogV、QryLogExplainV、QryLogObjectsV、QryLogSQLV、QryLogStepsV参照ビューの内容については以下ドキュメントを参照して下さい。
Teradata Vantage - データディクショナリ

クエリーログのメンテナンス

クエリーログは自動的に削除されませんので、定期的にデータの削除を行い、
データベースの容量オーバーにならないようにしてください。

削除SQLの例(現在から3か月以上前のログデータを削除)

DBql_Delete.sql
DELETE FROM dbc.DBQLogTbl
WHERE CAST(CollectTimeStamp AS DATE) < ADD_MONTHS(CURRENT_DATE, -3)
8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?