統計情報のロック機能は、主に統計情報をロックして更新を防ぎ、統計情報の安定性を保証するために使用されます。
例えば、特定のテーブルの統計情報収集を無効にしたい場合、事前にロックすることができます。そうすると、スケジュール生成時には他の方法(動的サンプリングなど)で統計情報を取得します。また、データが安定しているテーブルについては、頻繁に統計情報を収集する必要がないため、事前にロックすることができます。
ロック機能
現在、統計情報をロックする以下の3つの方法がサポートされています:
ストアドプロシージャ
lock_table_statsを使用して、特定のテーブルの統計情報をロックします。ストアドプロシージャ
lock_partition_statsを使用して、特定のパーティションの統計情報をロックします。ストアドプロシージャ
lock_schema_statsを使用して、特定の Schema 内のすべてのテーブルの統計情報をロックします。
具体的なストアドプロシージャの定義は以下のとおりです:
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を使用して、特定の Schema 内のすべてのテーブルの統計情報をアンロックします。
具体的なストアドプロシージャの定義は以下のとおりです:
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');