OceanBaseデータベースは、DBMS_STATSパッケージに関連するストアドプロシージャを呼び出して、内部テーブルに保存されている統計情報を削除します。
現在、統計情報を削除するための以下の4つの方法がサポートされています:
ストアドプロシージャ
delete_table_statsを使用して、テーブルレベルの統計情報を削除します。ストアドプロシージャ
delete_column_statsを使用して、列レベルの統計情報を削除します。ストアドプロシージャ
delete_schema_statsを使用して、スキーマ内のすべてのテーブルの統計情報を削除します。ストアドプロシージャ
delete_index_statsを使用して、インデックスの統計情報を削除します。
ステートメントプロシージャの定義
OceanBaseはOracleモードとMySQLモードの両方をサポートしており、使用方法は基本的に同じです。特に断りがない限り、デフォルトでは使用方法が一致することを意味します。
具体的なステートメントプロシージャの定義は以下のとおりです:
PROCEDURE delete_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
cascade_parts BOOLEAN DEFAULT TRUE,
cascade_columns BOOLEAN DEFAULT TRUE,
cascade_indexes BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE delete_column_stats (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
cascade_parts BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
col_stat_type VARCHAR2 DEFAULT 'ALL'
);
PROCEDURE delete_schema_stats (
ownname VARCHAR2,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE delete_index_stats(
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
cascade_parts BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
stattype VARCHAR2 DEFAULT 'ALL',
force BOOLEAN DEFAULT FALSE,
tabname VARCHAR2 DEFAULT NULL
);
パラメータの説明は以下の表のとおりです。
| パラメータ | 説明 |
|---|---|
| ownname |
|
| tabname | テーブル名。 |
| indname | インデックス名。 |
| partname | パーティション名。 |
| colname | 列名。 |
| stattab | このパラメータはまだ実装されておらず、使用できません。 |
| statid | このパラメータはまだ実装されておらず、使用できません。 |
| cascade_parts | パーティションレベルおよびサブパーティションレベルの統計情報を同時に削除するかどうか。デフォルトはTRUEです。 |
| cascade_columns | 列レベルの統計情報を同時に削除するかどうか。デフォルトはTRUEです。 |
| cascade_indexes | このパラメータはまだ実装されておらず、使用できません。 |
| statown | このパラメータはまだ実装されておらず、使用できません。 |
| no_invalidate | このパラメータはまだ実装されておらず、使用できません。 |
| force | ロック状態を無視して強制的に削除するかどうか。デフォルトはFALSEです。 |
| col_stat_type | 列レベルの統計情報を削除する際のタイプ。
|
注意:delete_index_statsについては、以下の点にご注意ください:
- Oracleモード:現在のユーザーにおけるインデックス名は一意であるため、テーブル名を指定する必要はありません。
- MySQLモード:同一ユーザー内でインデックス名が一意でない場合があるため、テーブル名を明示的に指定する必要があります。
例
統計情報の削除機能の例は以下のとおりです:
ユーザー
user1のテーブルtbl1のすべての統計情報を削除します。CALL DBMS_STATS.DELETE_TABLE_STATS('user1', 'tbl1');ユーザー
user1のテーブルtbl1のcol1列のすべての統計情報を削除します。CALL DBMS_STATS.DELETE_COLUMN_STATS('user1', 'tbl1', 'col1');ユーザー
user1のすべてのテーブルの統計情報を削除します。CALL DBMS_STATS.DELETE_SCHEMA_STATS('user1');ユーザー
user1のテーブルtbl1のidx1インデックスのすべての統計情報を削除します。CALL DBMS_STATS.DELETE_INDEX_STATS('user1', 'tbl1', 'idx1');
関連ドキュメント
MySQLモードで統計情報を削除するストアドプロシージャのドキュメント:
- DELETE_TABLE_STATS(MySQLモード)
- DELETE_COLUMN_STATS(MySQLモード)
- DELETE_SCHEMA_STATS(MySQLモード)
- DELETE_INDEX_STATS(MySQLモード)
Oracleモードで統計情報を削除するストアドプロシージャのドキュメント: