17.00 - 17.05 - オブジェクト使用カウントとUDIカウント - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLリクエストおよびトランザクション処理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

オブジェクト使用カウントについて

オブジェクト使用カウントを収集する目的は、DBAでさまざまなデータベース オブジェクトの使用頻度を特定するための有効な方法を提供することによって、システム管理能力を最大限に引き出すことです。オブジェクト使用カウントは、テーブル、ビュー、マクロ、列、インデックス、統計などのデータベース オブジェクトがシステム レベルで使用された頻度に関する情報を記録したものです。これには、更新、削除、および挿入操作に関する総アクセス カウント(UDIカウントと総称される)と最後のアクセス タイムスタンプが含まれます。この情報は、総称して、オブジェクト使用データまたはOUDと呼ばれます。

DBQL機能と違って、オブジェクト使用カウント データはシステム レベルのオブジェクト使用を測定します。一方、DBQLは同様のオブジェクト関連データをリクエスト レベルで記録します。

オブジェクト使用数は、次のような種類の情報を追跡します。
  • データベース アクセス
  • テーブル アクセス
  • 列アクセス
  • インデックス アクセス
    これには、以下のインデックス アクセスのすべてが含まれます。
    • プライマリ
    • セカンダリ
    • 結合
    • ハッシュ
  • 削除、挿入、および更新アクセス
  • 各データベース オブジェクト アクセスに関連付けられた使用の種類
    これには、以下のアクセスのすべてが含まれます。
    • マクロ
    • ビュー
    • ユーザー定義プロシージャ
    • トリガー
    • ユーザー定義関数
    • ユーザー定義メソッド
    • ユーザー定義型
  • 統計使用

最適化ルーチンは、DBC.ObjectUsageのオブジェクト使用カウントを使用して内のさまざまなデータベース オブジェクトのアクセス使用を追跡します。Vantageは、2つのバージョンの使用カウント(ユーザーとシステム)を追跡します。この2つのカウントは同じですが、ユーザー レベルの使用カウントはユーザーがリセットできるが、システム レベルの使用カウントはVantageでしかリセットできないという特性のみが異なっています。

以下のリストでは、ユーザー オブジェクト使用数とシステム オブジェクト使用数の類似点と相違点を定義します。
  • ユーザー オブジェクト使用カウントは、DBC.ClearUserUseCountDBC.ClearUserStatCountのシステム マクロを使用して、自分が決めた間隔で、リセットできます。これらのマクロの詳細は、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。

    この種の情報は、システム モニター、システム性能の分析、および頻繁に使用されるオブジェクトの調整などの文脈内で役に立ちます。

  • システム オブジェクト使用カウントをリセットできるのはVantageだけです。 リセット間隔は、このカウントが使用される最適化によって異なります。

    システム オブジェクト使用カウントは、統計などのシステム データベース オブジェクトの最適化の文脈内で役に立ちます。統計の使用を正確に追跡できる能力は、統計を正確に再収集するためのCOLLECT STATISTICS文のTHRESHOLDオプションの能力の優先順位付けに不可欠です。

UDIカウントについて

UDIカウントは、Vantageによって追跡されるオブジェクト使用数の重要なレベルです。COLLECT STATISTICSのTHRESHOLDオプションを効果的に解釈するには詳細レベルの追跡粒度が必要なため、VantageはDBC.ObjectUsage内のデータベース オブジェクトに対して実行された更新、削除、および挿入操作の回数を追跡します。この合計がUDIカウントと呼ばれます。最後のリセット タイムスタンプを使用して、UDIカウントはテーブルのカーディナリティの変更を正確に測定します。

この種の情報は、DBAとアプリケーション ユーザーのための内部データベース最適化に役に立ちます。オブジェクト使用カウントと同様に、Vantageは2つのバージョンのUDIカウント(ユーザーとシステム)を追跡します。この2つのカウントは、UDIカウントはユーザーまたはVantageがリセットできるという点を除き、同一です。

UDIカウントの収集はデフォルトで無効になっており、BEGIN QUERY LOGGINGリクエストの一部としてデータベース用のUSECOUNTオプションを指定することによってしかその収集を有効にできません。

USECOUNTオプションの詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「BEGIN QUERY LOGGING」を参照してください。

Teradata Databaseは、以下のデータベース オブジェクトに関するUDIカウントをログに記録します。
  • テーブル
    これには、以下のテーブル タイプに関するカウントは含まれません。
    • データ ディクショナリ
    • エラー
    • ログ
    • キュー
  • 結合インデックス
  • ハッシュ インデックス
UDIカウントは、以下のSQL DML文とアクセスに関してログに記録されます。
  • DELETE
  • INSERT
  • MERGE (マージ操作、マージ削除操作、およびマージ更新操作を含む)
  • SELECT
  • UPDATE (UPDATEのUpsert形式を含む)
  • 一般

    このカテゴリには、ユーザー定義関数やユーザー定義プロシージャなどのDML呼び出し操作によるアクセスが含まれます。

  • 統計

システムUDIカウントをリセットできるのはVantageだけです。

Vantageは、システムUDIカウントを使用して、テーブル カーディナリティを見積もったり、統計を外挿したり、統計を再収集するためのしきい値を追跡したりします。

最適化ルーチンによるUDIカウントの使用

最適化ルーチンは、UDIカウントを使用してテーブル カーディナリティを見積もり、最初の統計収集時に決定されたTHRESHOLDオプションをいつ適用するかを見積もります。

テーブル カーディナリティを見積もるために、最適化ルーチンはDBC.ObjectUsageから挿入カウントと削除カウントを取得してから、それらのカウントをカーディナリティ見積もりに代入します。

最適化ルーチンは、統計を収集または再収集するときは必ず、UDIカウントを利用して元のCOLLECT STATISTICSリクエストに対して指定されたTHRESHOLDオプションを適用します。Vantageは、最初に、テーブルのマスター レコードから削除UDIカウントと挿入UDIカウントを、列から更新UDIカウントを取得してから、それらをDBC.ObjectUsageからの最新のUDIカウントと合わせて、最終的なカーディナリティ見積もりを作成します。

オブジェクト使用カウントの精度

オブジェクト使用カウントの精度は、最適化ルーチンで問合わせの最適化と統計の再収集に対して有効な決定ができる程度に正確である必要があります。使用カウントが不正確になる可能性がある2つの一般的なシナリオがあります。

使用カウントの不正確さの種類 説明
過少申告 使用カウントは、システムの再起動が原因で収集されなかった場合に過少申告される可能性があります。

再起動が発生すると、メモリ常駐OUCキャッシュ内の使用カウント情報が失われ、ディスクに書き込まれません。その結果、最適化ルーチンは、最新の統計が陳腐化していると認識されない場合に統計を再収集しないといった誤った決定を下す可能性があります。

使用カウントの過少申告のリスクを軽減するために、OUCキャッシュは再起動の影響を受けない永続メモリ セグメントも使用します。そのため、そうしなければ失われる可能性のある使用カウント情報を完全な状態で維持し、使用カウント データの収集を中断することなく再開できます。

過大申告 使用カウントは、収集してからトランザクション アボート後に取得された場合に過大申告される可能性があります。

アボートが発生した場合は、オブジェクト使用カウント収集が問合わせやトランザクションのロジックとは無関係に実行されるため、メモリ常駐OUCキャッシュ内の使用カウント情報が廃棄されません。

これにより、不適切なときに情報がディスクにコミットされるため、カウントの過大申告が起きる危険性があります。最適化ルーチンは、過大申告されたカウントに基づいて不必要に統計を再収集するといった誤った決定を下す可能性があります。