オブジェクト使用カウントについて
オブジェクト使用カウントを収集する目的は、DBAでさまざまなデータベース オブジェクトの使用頻度を特定するための有効な方法を提供することによって、Teradata Databaseのシステム管理能力を最大限に引き出すことです。オブジェクト使用カウントは、テーブル、ビュー、マクロ、列、インデックス、統計などのデータベース オブジェクトがシステム レベルで使用された頻度に関する情報を記録したものです。これには、更新、削除、および挿入操作に関する総アクセス カウント(UDIカウントと総称される)と最後のアクセス タイムスタンプが含まれます。この情報は、総称して、オブジェクト使用データまたはOUDと呼ばれます。
DBQL機能と違って、オブジェクト使用カウント データはシステム レベルのオブジェクト使用を測定します。一方、DBQLは同様のオブジェクト関連データをリクエスト レベルで記録します。
- データベース アクセス
- テーブル アクセス
- 列アクセス
- インデックス アクセス これには、以下のインデックス アクセスのすべてが含まれます。
- プライマリ
- セカンダリ
- 結合
- ハッシュ
- 削除、挿入、および更新アクセス
- 各データベース オブジェクト アクセスに関連付けられた使用の種類 これには、以下のアクセスのすべてが含まれます。
- マクロ
- ビュー
- ユーザー定義プロシージャ
- トリガー
- ユーザー定義関数
- ユーザー定義メソッド
- ユーザー定義型
- 統計使用
最適化ルーチンは、DBC.ObjectUsageのオブジェクト使用数を使用してTeradata Database内のさまざまなデータベース オブジェクトのアクセス使用を追跡します。Teradata Databaseは、2つのバージョンの使用カウント(ユーザーとシステム)を追跡します。この2つのカウントは同じですが、ユーザー レベルの使用カウントはユーザーがリセットできるが、システム レベルの使用カウントはTeradata Databaseでしかリセットできないという特性のみが異なっています。
- ユーザー オブジェクト使用カウントは、DBC.ClearUserUseCountとDBC.ClearUserStatCountのシステム マクロを使用して、自分が決めた間隔で、リセットできます。これらのマクロの詳細は、<データ ディクショナリ>を参照してください。
この種の情報は、システム モニター、システム性能の分析、および頻繁に使用されるオブジェクトの調整などの文脈内で役に立ちます。
- システム オブジェクト使用カウントをリセットできるのはTeradata Databaseだけです。 リセット間隔は、このカウントが使用される最適化によって異なります。
システム オブジェクト使用カウントは、統計などのシステム データベース オブジェクトの最適化の文脈内で役に立ちます。統計の使用を正確に追跡できる能力は、統計を正確に再収集するためのCOLLECT STATISTICS文のTHRESHOLDオプションの能力の優先順位付けに不可欠です。
UDIカウントについて
UDIカウントは、Teradata Databaseによって追跡されるオブジェクト使用数の重要なレベルです。COLLECT STATISTICSのTHRESHOLDオプションを効果的に解釈するには詳細レベルの追跡粒度が必要なため、Teradata DatabaseはDBC.ObjectUsage内のデータベース オブジェクトに対して実行された更新、削除、および挿入操作の回数を追跡します。この合計がUDIカウントと呼ばれます。最後のリセット タイムスタンプを使用して、UDIカウントはテーブルのカーディナリティの変更を正確に測定します。
この種の情報は、DBAとアプリケーション ユーザーのための内部データベース最適化に役に立ちます。オブジェクト使用カウントと同様に、Teradata Databaseは2つのバージョンのUDIカウント(ユーザーとシステム)を追跡します。この2つのカウントは、UDIカウントはユーザーまたはTeradata Databaseがリセットできるという点を除き、同一です。
UDIカウントの収集はデフォルトで無効になっており、BEGIN QUERY LOGGINGリクエストの一部としてデータベース用のUSECOUNTオプションを指定することによってしかその収集を有効にできません。
USECOUNTオプションの詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「BEGIN QUERY LOGGING」を参照してください。
- テーブル これには、以下のテーブル タイプに関するカウントは含まれません。
- データ ディクショナリ
- エラー
- ログ
- キュー
- 結合インデックス
- ハッシュ インデックス
- DELETE
- INSERT
- MERGE (マージ操作、マージ削除操作、およびマージ更新操作を含む)
- SELECT
- UPDATE (UPDATEのUpsert形式を含む)
- 一般
このカテゴリには、ユーザー定義関数やユーザー定義プロシージャなどのDML呼び出し操作によるアクセスが含まれます。
- 統計
システムUDIカウントをリセットできるのはTeradata Databaseだけです。
Teradata Databaseは、システムUDIカウントを使用して、テーブル カーディナリティを見積もったり、統計を外挿したり、統計を再収集するためのしきい値を追跡したりします。
最適化ルーチンによるUDIカウントの使用
最適化ルーチンは、UDIカウントを使用してテーブル カーディナリティを見積もり、最初の統計収集時に決定されたTHRESHOLDオプションをいつ適用するかを見積もります。
テーブル カーディナリティを見積もるために、最適化ルーチンはDBC.ObjectUsageから挿入カウントと削除カウントを取得してから、それらのカウントをカーディナリティ見積もりに代入します。
最適化ルーチンは、統計を収集または再収集するときは必ず、UDIカウントを利用して元のCOLLECT STATISTICSリクエストに対して指定されたTHRESHOLDオプションを適用します。Teradata Databaseは、最初に、テーブルのマスター レコードから削除UDIカウントと挿入UDIカウントを、列から更新UDIカウントを取得してから、それらをDBC.ObjectUsageからの最新のUDIカウントと合わせて、最終的なカーディナリティ見積もりを作成します。
オブジェクト使用カウントの精度
オブジェクト使用カウントの精度は、最適化ルーチンで問合わせの最適化と統計の再収集に対して有効な決定ができる程度に正確である必要があります。使用カウントが不正確になる可能性がある2つの一般的なシナリオがあります。
使用カウントの不正確さの種類 | 説明 |
---|---|
過少申告 | 使用カウントは、システムの再起動が原因で収集されなかった場合に過少申告される可能性があります。 再起動が発生すると、メモリ常駐OUCキャッシュ内の使用カウント情報が失われ、ディスクに書き込まれません。その結果、最適化ルーチンは、最新の統計が陳腐化していると認識されない場合に統計を再収集しないといった誤った決定を下す可能性があります。 使用カウントの過少申告のリスクを軽減するために、OUCキャッシュは再起動の影響を受けない永続メモリ セグメントも使用します。そのため、そうしなければ失われる可能性のある使用カウント情報を完全な状態で維持し、使用カウント データの収集を中断することなく再開できます。 |
過大申告 | 使用カウントは、収集してからトランザクション アボート後に取得された場合に過大申告される可能性があります。 アボートが発生した場合は、オブジェクト使用カウント収集が問合わせやトランザクションのロジックとは無関係に実行されるため、メモリ常駐OUCキャッシュ内の使用カウント情報が廃棄されません。 これにより、不適切なときに情報がディスクにコミットされるため、カウントの過大申告が起きる危険性があります。最適化ルーチンは、過大申告されたカウントに基づいて不必要に統計を再収集するといった誤った決定を下す可能性があります。 |