統計情報のロック機能は、統計情報をロックして更新を防ぎ、統計情報の安定性を保証するために主に使用されます。
例えば、特定のテーブルから統計情報を収集しないようにしたい場合、事前にロックすることができます。これにより、計画生成時には他の方法(動的サンプリングなど)で統計情報を取得します。また、データが安定しているテーブルについては、頻繁に統計情報を収集する必要がないため、事前にロックすることができます。
ロック機能
現在、統計情報をロックするための以下の3つの方法がサポートされています:
ステートメントプロシージャ
lock_table_statsを使用して、特定のテーブルの統計情報をロックします。ステートメントプロシージャ
lock_partition_statsを使用して、特定のパーティションの統計情報をロックします。ステートメントプロシージャ
lock_schema_statsを使用して、特定のスキーマに属するすべてのテーブルの統計情報をロックします。
ステートメントプロシージャの定義
OceanBaseのOracleおよびMySQLモードはどちらもサポートされており、使用方法は基本的に同じです。特に断りのない限り、デフォルトでは使用方法が同一であることを意味します。
具体的なステートメントプロシージャの定義は以下のとおりです:
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を使用して、特定のスキーマ下のすべてのテーブルの統計情報をアンロックします。
ステートメントプロシージャの定義
OceanBaseのOracleおよびMySQLモードはどちらもサポートされており、基本的な使い方は同じです。特に説明がない限り、デフォルトでは使い方が同一であることを意味します。
具体的なステートメントプロシージャの定義は以下のとおりです:
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');
関連ドキュメント
ロック統計情報ストアドプロシージャ
MySQLモードにおけるロック統計情報のストアドプロシージャのドキュメント:
- LOCK_TABLE_STATS(MySQLモード)
- LOCK_PARTITION_STATS(MySQLモード)
- [LOCK_SCHEMA_STATS(MySQLモード)(../../../../../600.pl-reference/200.pl-mysql/1000.pl-system-package-mysql/15900.dbms-stats-mysql/2800.lock-schema-stats-mysql.md)
Oracleモードにおけるロック統計情報のストアドプロシージャのドキュメント:
スタティスティック情報のロック解除ストアドプロシージャ
MySQLモードにおけるスタティスティック情報のロック解除ストアドプロシージャのドキュメント:
Oracleモードにおけるスタティスティック情報のロック解除ストアドプロシージャのドキュメント: