統計情報のエクスポート機能は、主にテーブルの統計情報を指定されたユーザーテーブルにエクスポートして保存するために使用されます。一方、インポート機能は、指定されたユーザーテーブルの統計情報を現在の統計情報内部テーブルにインポートし、再収集のプロセスを省略することが主な目的です。
例えば、データベース移行時には、大規模テーブルの統計情報を指定されたユーザーテーブルにエクスポートして一緒にデータ移行を行うことができます。データ移行が完了した後、以前に保存された統計情報を含むユーザーテーブルのデータを新しいデータベースの対応する統計情報内部テーブルに直接インポートすることができます。
統計情報ユーザーテーブル
統計情報ユーザーテーブルは、内部テーブルが収集した統計情報を保存するために主に使用されます。具体的なテーブル構造と関連説明は以下の表を参照してください。
| フィールド | データ型 | テーブルレベル統計情報 TYPE='T' | カラムレベル統計情報 TYPE='C' |
|---|---|---|---|
| STATID | VARCHAR2(30) | User Settable | User Settable |
| TYPE | CHAR(1) | Table | Column |
| VERSION | NUMBER | 予約フィールド | 予約フィールド |
| FLAGS | NUMBER | 予約フィールド | 予約フィールド |
| C1 | VARCHAR2(30) | Table Name | Table Name |
| C2 | VARCHAR2(30) | Partition Name | Partition Name |
| C3 | VARCHAR2(30) | Subpartition Name | Subpartition Name |
| C4 | VARCHAR2(30) | 予約フィールド | Column Name |
| C5 | VARCHAR2(30) | Owner | Owner |
| C6 | VARCHAR2(30) | 予約フィールド | 予約フィールド |
| N1 | NUMBER | Num Rows | Num Distinct |
| N2 | NUMBER | Blocks | Density |
| N3 | NUMBER | Average Row Length | 予約フィールド |
| N4 | NUMBER | Sample Size | Sample Size |
| N5 | NUMBER | 予約フィールド | Num Nulls |
| N6 | NUMBER | 予約フィールド | Lower Value |
| N7 | NUMBER | 予約フィールド | High Value |
| N8 | NUMBER | 予約フィールド | Average Column Length |
| N9 | NUMBER | 予約フィールド | 予約フィールド |
| N10 | NUMBER | 予約フィールド | Endpoint Number |
| N11 | NUMBER | 予約フィールド | Endpoint Value |
| N12 | NUMBER | 予約フィールド | ENDPOINT_REPEAT_COUNT |
| N13 | NUMBER | 予約フィールド | 予約フィールド |
| D1 | DATE | Last Analyzed | Last Analyzed |
| T1 | TIMESTAMP(6) WITH TIME ZONE | 予約フィールド | 予約フィールド |
| R1 | RAW(32) | 予約フィールド | Lower RAW Value |
| R2 | RAW(32) | 予約フィールド | High RAW Value |
| R3 | RAW(32) | 予約フィールド | ENDPOINT_ACTUAL_VALUE_RAW |
| CH1 | VARCHAR2(1000) | 予約フィールド | 予約フィールド |
| CH1 | CLOB | 予約フィールド | 予約フィールド |
| BH1 | BLOB | 予約フィールド | 予約フィールド |
| OB_SPEC1 | NUMBER | OB Macro Block CNT | OB LLC Bitmap Size |
| OB_SPEC2 | NUMBER | OB Micro Block CNT | 予約フィールド |
| OB_SPEC3 | VARCHAR2(4096) | 予約フィールド | OB LLC Bitmap(ND Synopsis) |
ステートメントプロシージャの定義
OceanBaseはOracleモードとMySQLモードの両方をサポートしており、使用方法は基本的に同じです。特に説明がない限り、デフォルトでは使用方法が同一であることを意味します。
DBMS_STATSパッケージは、統計情報ユーザーテーブルを作成および削除するためのステートメントプロシージャcreate_stat_tableとdrop_stat_tableを提供しています。定義は以下のとおりです:
PROCEDURE create_stat_table(
ownname VARCHAR2,
stattab VARCHAR2,
tblspace VARCHAR2 DEFAULT NULL,
global_temporary BOOLEAN DEFAULT FALSE
);
PROCEDURE drop_stat_table(
ownname VARCHAR2,
stattab VARCHAR2
);
パラメータの説明は以下の表のとおりです。
| パラメータ | 説明 |
|---|---|
| ownname |
|
| stattab | 作成する統計情報ユーザーテーブルの名前を指定します。 |
| tblspace | テーブルグループ名。 |
| global_temporary | このパラメータは現在実装されておらず、利用できません。 |
エクスポート機能
現在、統計情報をエクスポートするための以下の4つの方法がサポートされています:
ステートメントプロシージャ
export_table_statsを使用して、テーブルレベルの統計情報をエクスポートします。ステートメントプロシージャ
export_column_statsを使用して、列レベルの統計情報をエクスポートします。ステートメントプロシージャ
export_schema_statsを使用して、スキーマ内のすべてのテーブルの統計情報をエクスポートします。ステートメントプロシージャ
export_index_statsを使用して、インデックスの統計情報をエクスポートします。
ステートメントプロシージャの定義
OceanBaseはOracleおよびMySQLの両モードをサポートしており、使用方法は基本的に同一です。特に断りがない限り、デフォルトでは使用方法が同じであることを意味します。
具体的なステートメントプロシージャの定義は以下のとおりです:
PROCEDURE export_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
cascade BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY
);
PROCEDURE export_column_stats (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL
);
PROCEDURE export_schema_stats (
ownname VARCHAR2,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL
);
PROCEDURE export_index_stats (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
tabname VARCHAR2 DEFAULT NULL
);
パラメータの説明は以下の表のとおりです。
| パラメータ | 説明 |
|---|---|
| ownname |
|
| tabname | テーブル名。 |
| indname | インデックス名。 |
| partname | パーティション名。 |
| colname | 列名。 |
| cascade | 列レベルの統計情報を一緒にエクスポートするかどうか。デフォルトはTRUEです。 |
| stattab | 統計情報をエクスポートするユーザーテーブルの名前を指定します。 |
| statid | このパラメータはまだ実装されておらず、使用できません。 |
| statown | 統計情報をエクスポートするユーザーテーブルのユーザー名を指定します。 |
| stat_category | このパラメータはまだ実装されておらず、使用できません。 |
インポート機能
現在、統計情報をインポートするための以下の4つの方法がサポートされています:
ステートメントプロシージャ
import_table_statsを使用して、テーブルレベルの統計情報をインポートします。ステートメントプロシージャ
import_column_statsを使用して、列レベルの統計情報をインポートします。ステートメントプロシージャ
import_schema_statsを使用して、スキーマ内のすべてのテーブルの統計情報をインポートします。ステートメントプロシージャ
import_index_statsを使用して、インデックスの統計情報をインポートします。
ステートメントプロシージャの定義
OceanBaseはOracleモードとMySQLモードの両方をサポートしており、その使用方法は基本的に同じです。特に断りがない限り、デフォルトでは使用方法が一致することを意味します。
具体的なステートメントプロシージャの定義は以下のとおりです:
PROCEDURE import_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
cascade BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY
);
PROCEDURE import_column_stats (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE import_schema_stats (
ownname VARCHAR2,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE import_index_stats (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
tabname VARCHAR2 DEFAULT NULL
);
パラメータの説明は以下の表のとおりです。
| パラメータ | 説明 |
|---|---|
| ownname |
|
| tabname | テーブル名。 |
| indname | インデックス名。 |
| partname | パーティション名。 |
| colname | 列名。 |
| cascade | 列レベルの統計情報を一緒にエクスポートするかどうか。デフォルトはTRUEです。 |
| stattab | 統計情報をエクスポートするユーザーテーブルの名前を指定します。 |
| statid | このパラメータはまだ実装されておらず、使用できません。 |
| statown | 統計情報をエクスポートするユーザーテーブルのユーザー名を指定します。 |
| stat_category | このパラメータはまだ実装されておらず、使用できません。 |
| no_invalidate | このパラメータはまだ実装されておらず、使用できません。 |
| force | ロック状態を無視して強制的に削除するかどうか。デフォルトはFALSEです。 |
例
ユーザー
testの統計情報ユーザーテーブルtest_statを作成します。CALL dbms_stats.create_stat_table('test', 'test_stat');ユーザー
testのテーブルtbl1の統計情報をtest_statにエクスポートします。CALL dbms_stats.export_table_stats('test', 'tbl1', stattab=>'test_stat', statown=>'test');ユーザー
testのtest_statから、ユーザーtestのtbl1テーブルの統計情報をインポートします。CALL dbms_stats.import_table_stats('test', 'tbl1', stattab=>'test_stat', statown=>'test');ユーザー
testの統計情報ユーザーテーブルtest_statを削除します。CALL dbms_stats.drop_stat_table('test', 'test_stat');
関連ドキュメント
統計情報ユーザーテーブルの作成・削除ストアドプロシージャ
MySQLモードにおける統計情報ユーザーテーブルの作成・削除ストアドプロシージャのドキュメント:
Oracleモードにおける統計情報ユーザーテーブルの作成・削除ストアドプロシージャのドキュメント:
統計情報のエクスポート
MySQLモードにおける統計情報のエクスポートに関するストアドプロシージャのドキュメント:
- EXPORT_TABLE_STATS(MySQLモード)
- EXPORT_INDEX_STATS(MySQLモード)
- EXPORT_COLUMN_STATS(MySQLモード)
- EXPORT_SCHEMA_STATS(MySQLモード)
Oracleモードにおける統計情報のエクスポートに関するストアドプロシージャのドキュメント:
- EXPORT_TABLE_STATS(Oracleモード)
- EXPORT_INDEX_STATS(Oracleモード)
- EXPORT_COLUMN_STATS(Oracleモード)
- EXPORT_SCHEMA_STATS(Oracleモード)
統計情報のインポート
MySQLモードにおける統計情報のインポートに関するストアドプロシージャのドキュメント:
- IMPORT_TABLE_STATS(MySQLモード)
- IMPORT_INDEX_STATS(MySQLモード)
- IMPORT_COLUMN_STATS(MySQLモード)
- IMPORT_SCHEMA_STATS(MySQLモード)
Oracleモードにおける統計情報のインポートに関するストアドプロシージャのドキュメント: