統計情報のロック機能は主に統計情報をロックし、統計情報の更新を防ぎ、統計情報の安定性を保証するために使用されます。
例えば、特定のテーブルの統計情報収集を無効にしたい場合、事前にそのテーブルをロックすることができます。そうすると、プラン生成時には他の方法(動的サンプリングなど)で統計情報を取得します。また、データが安定しているテーブルについては、頻繁に統計情報を収集する必要がないため、事前にロックすることができます。
ロック機能
現在、統計情報をロックする方法は以下の3種類がサポートされています:
ストアドプロシージャ
lock_table_statsを使用して、特定のテーブルの統計情報をロックします。ストアドプロシージャ
lock_partition_statsを使用して、特定のパーティションの統計情報をロックします。ストアドプロシージャ
lock_schema_statsを使用して、特定のスキーマ下のすべてのテーブルの統計情報をロックします。
各ストアドプロシージャの定義は以下のとおりです:
PROCEDURE lock_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
stattype VARCHAR2 DEFAULT 'ALL'
);
PROCEDURE lock_partition_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2
);
PROCEDURE lock_schema_stats(
ownname VARCHAR2,
STATTYPE VARCHAR2 DEFAULT 'ALL'
);
パラメータの説明は以下の表のとおりです。
パラメータ |
説明 |
|---|---|
| ownname |
|
| tabname | テーブル名。 |
| partname | パーティション名。 |
| stattype | ロックのタイプ。一般的に以下の3種類のロックタイプが含まれます:
説明現在のOceanBaseデータベースのOracleモードは、 |
ロック機能の例
ユーザー test のテーブル t_part のテーブルレベル統計情報および p0 パーティションの統計情報をロックします。
CALL dbms_stats.lock_table_stats('test', 't_part');
CALL dbms_stats.lock_partition_stats('test', 't_part', 'p0');
アンロック機能
現在、統計情報のアンロックには以下の3つの方法がサポートされています:
ステートメント
unlock_table_statsを使用して、特定のテーブルの統計情報をアンロックします。ステートメント
unlock_partition_statsを使用して、特定のパーティションの統計情報をアンロックします。ステートメント
unlock_schema_statsを使用して、特定のスキーマ下のすべてのテーブルの統計情報をアンロックします。
各ステートメントの定義は以下のとおりです:
PROCEDURE unlock_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
stattype VARCHAR2 DEFAULT 'ALL'
);
PROCEDURE unlock_partition_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2
);
PROCEDURE unlock_schema_stats(
ownname VARCHAR2,
STATTYPE VARCHAR2 DEFAULT 'ALL'
);
パラメータの説明は以下の表のとおりです。
パラメータ |
説明 |
|---|---|
| ownname |
|
| tabname | テーブル名。 |
| partname | パーティション名。 |
| stattype | ロックのタイプ。一般的に3種類のロックタイプがあります:
説明現在のOceanBaseデータベースのOracleモードは、 |
注意
テーブルに対してテーブルレベルとパーティションレベルの両方でロックをかけた場合、アンロックする際もテーブルレベルとパーティションレベルの両方の統計情報を同時にアンロックする必要があります。
アンロック機能の例
ユーザー test のテーブル t_part のテーブルレベル統計情報と p0 パーティションの統計情報をアンロックします。
CALL dbms_stats.unlock_table_stats('test', 't_part');
CALL dbms_stats.unlock_partition_stats('test', 't_part', 'p0');