TRACE 句

SELECT ステートメントの末尾に TRACE 句を追加した場合、管理ツールからクエリを実行すると、クエリの実行トレースが返されます。別のクライアント (JDBC クライアントなど) からクエリを実行しても、この情報は返されません。

クエリの実行トレースから、実行エンジンによってクエリがどのように処理されたかを詳しく知ることができます。このプランはツリーとしてモデル化されます。このツリーの各ノードは、クエリの実行またはデータソースへのアクセスに伴う中間ビューを表します。

Administration Tool では、実行するすべてのクエリに TRACE 句を追加し、クエリの実行トレースを分析するためのグラフィカルインターフェイスを提供します (詳細については、管理ガイドの「 ステートメントの実行トレース 」を参照してください)。また、 Trace Viewer を使用して、別の管理用ツールで実行したクエリのトレースを読み込むことができます。

実行トレースからノードごとに提供される情報として、以下があります。

  • [Node type]: ノードがビューである場合、ビューのタイプ (基本ビュー、和結合、結合、選択、積結合など) を示します。データソース (ラッパー) へのアクセスの場合、データソースのタイプ (JDBC、Web サービス、Web など) を示します。

  • [Execution time]: ノードとそのすべての子ノードをすべて実行するために要する時間。

  • [Start time]: 実行プランの中でノード処理が始まる正確な時間。

  • [End of query time]: 実行プランの中でノードの処理 (およびそのすべての子ノードの処理) が終了する正確な時間。

  • [Time until the first tuple of results was obtained]: 処理対象の最初のタプルをノードが受け取るまでの時間。

  • [Number of tuples processed]: ノードで処理されるタプルの数。

  • [Status]: ノードが正常に実行されたか、またはエラーが発生したかを示します。

  • [Advanced parameters]: 各ノードタイプの詳細を示します。その例を以下に示します。

    • ラッパータイプのノードの場合、各データソースで実行される正確なサブクエリと、各データソースへのアクセスに使用されるコネクションのデータが示されます。

    • ビュータイプのノードごとに、キャッシュが使用されているかどうか、スワッピング必要かどうかなどが示されます。

    • 最適化のうえで特に重要なパラメーターとして「No Delegation Cause」があります。同じ JDBC データソースまたは ODBC データソースのテーブルに基づいて定義したビューでは、1 回のクエリでビューからすべてのタプルを取得するために、Virtual DataPort によってソースデータベースへのプロセス全体の委任が試されます。この方法により、複雑なビューでは実行時間を大幅に短縮できます。Virtual DataPort から特定のクエリのプロセス全体をソースデータベースに委任できない場合、このパラメーターにその理由が示されます。たとえば、ソースデータベースでサポートされていない関数を記述した式をクエリで使用すると、取得した結果を後処理することが Virtual DataPort に強制されます。処理を委任できなかった理由を考慮して、委任できるようにビューを書き換えることができます。

  • [Error conditions]: ノードの実行中に発生したエラーがあれば、それが示されます。

たとえば、 以下 の図は、次のクエリの実行トレースを示しています。

SELECT *
FROM INTERNET_INC TRACE

INTERNET_INC は、JDBC データソースからアクセスできる同じ名前のテーブルから作成した基本ビューです。

実行トレース
BASE PLAN (
    name = INTERNET_INC
    startTime = Wed Jan 10 17:50:01 850 GMT+01:00 2007
    endTime = Wed Jan 10 17:50:04 063 GMT+01:00 2007
    responseTime = Wed Jan 10 17:50:04 053 GMT+01:00 2007
    numRows = 4
    state = OK
    completed = true
    fields = [IINC_ID, SUMMARY, TTIME, TAXID, SPECIFIC_FIELD1, SPECIFIC_FIELD2]
    search conditions = []
    filter conditions = []
    numOfFilteredTuples = 0
    numOfDuplicatedTuples = 0
    numOfSwappedTuples = 0
    swapping = false

    JDBC WRAPPER (
        name = internet_inc
        startTime = Wed Jan 10 17:50:02 070 GMT+01:00 2007
        endTime = Wed Jan 10 17:50:04 063 GMT+01:00 2007
        responseTime = Wed Jan 10 17:50:04 063 GMT+01:00 2007
        numRows = 4
        state = OK
        completed = true
        searchConditions = []
        orderByFields = []
        projectedFields = [IINC_ID, SUMMARY, TTIME, TAXID, SPECIFIC_FIELD1, SPECIFIC_FIELD2]
        JDBC ROUTE (
            name = internet_inc#0
            startTime = Wed Jan 10 17:50:03 782 GMT+01:00 2007
            endTime = Wed Jan 10 17:50:04 063 GMT+01:00 2007
            responseTime = Wed Jan 10 17:50:04 063 GMT+01:00 2007
            numRows = 4
            state = OK
            completed = true
            SQLSentence = SELECT t0.iinc_id, t0.summary, t0.ttime, t0.taxId, t0.specific_field1, t0.specific_field2 FROM test_vdb.internet_inc t0
            parameters = []
            DBUri = jdbc:mysql://localhost/test_vdb
            userName = vdb
            connectionTime = 0
            cachedStatus = false
        )
    )
)