PolarDB for PostgreSQL (Compatible with Oracle) には、DBMS_STATSパッケージが用意されており、データベースの実行に関する統計の収集、生成された統計のバックアップ、統計の復元に役立ちます。 統計バックアップのカスタム時点を指定し、必要に応じてテーブル統計を変更できます。 このようにして、オプティマイザは正確な実行計画を生成できる。
前提条件
- polar_dbms_statsプラグインがインストールされています。 次のコマンドを実行して、プラグインをインストールできます。
CREATE EXTENSION polar_dbms_stats;
- polar_dbms_stats.use_locked_statsパラメーターの値はonです。 説明 次のコマンドを実行して、パラメーター値を照会できます。
SHOW polar_dbms_stats.use_locked_stats;
テストデータの準備
dbms_stats_schema
という名前のスキーマを作成します。スキーマを作成dbms_stats_schema;
dbms_stats_test
という名前のテーブルを作成します。CREATE TABLE dbms_stats_schema.dbms_stats_test(id int);
- インデックスを作成します。
CREATE INDEX dbms_stats_index on dbms_stats_schema.dbms_stats_test(id);
- データを挿入します。
INSERT INTO dbms_stats_schema.dbms_stats_test値 (generate_series(1,10000));
DBMS_STATS.GATHER_SCHEMA_STATS
この関数は、スキーマ統計の収集とバックアップに使用されます。
構文
DBMS_STATS.GATHER_SCHEMA_STATS (
ownname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 分析するスキーマの名前を指定します。 | 可 |
例
スキーマ統計を収集してバックアップします。 例:
CALL DBMS_STATS.GATHER_SCHEMA_STATS('dbms_stats_schema ');
スキーマ統計のバックアップステータスを照会します。 例:
SELECT * からpolar_dbms_stats.backup_history;
DBMS_STATS.GATHER_TABLE_STATS
この関数は、テーブル統計の収集とバックアップに使用されます。
構文
DBMS_STATS.GATHER_TABLE_STATS ()
ownname VARCHAR2、
tabname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 分析するテーブルのスキーマを指定します。 | 可 |
タブ名 | 分析するテーブルの名前を指定します。 | 可 |
例
テーブル統計を収集してバックアップします。 例:
CALL DBMS_STATS.GATHER_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test');
バックアップ統計を照会します。 例:
SELECT * からpolar_dbms_stats.backup_history;
DBMS_STATS.GATHER_DATABASE_STATS
この関数は、データベース統計の収集とバックアップに使用されます。
構文
DBMS_STATS.GATHER_DATABASE_STATS ();
例
データベース統計を収集してバックアップします。 例:
CALL DBMS_STATS.GATHER_DATABASE_STATS();
バックアップ統計を照会します。 例:
SELECT * からpolar_dbms_stats.backup_history;
DBMS_STATS.GATHER_INDEX_STATS
この関数は、インデックス統計の収集とバックアップに使用されます。
構文
DBMS_STATS.GATHER_INDEX_STATS (
ownname VARCHAR2、
indname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 分析するインデックスのスキーマを指定します。 | 可 |
indname | 分析するインデックスの名前を指定します。 | 可 |
例
インデックス統計を収集してバックアップします。 例:
CALL DBMS_STATS.GATHER_INDEX_STATS('dbms_stats_schema ', 'dbms_stats_index');
バックアップ統計を照会します。 例:
SELECT * からpolar_dbms_stats.backup_history;
DBMS_STATS.GATHER_COLUMN_STATS
この関数は、指定した列の統計を収集してバックアップするために使用されます。
構文
DBMS_STATS.GATHER_COLUMN_STATS (
ownname VARCHAR2、
tablename VARCHAR2、
attnameテキスト
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 分析する列のスキーマを指定します。 | 可 |
tablename | 分析する列を含むテーブルの名前を指定します。 | 可 |
attname | 分析する列の名前を指定します。 | 可 |
例
指定した列の統計を収集してバックアップします。 例:
CALL DBMS_STATS.GATHER_COLUMN_STATS('dbms_stats_schema ', 'dbms_stats_test', 'id');
列統計のバックアップステータスを照会します。 例:
SELECT * からpolar_dbms_stats.backup_history;
DBMS_STATS.RESTORE_SCHEMA_STATS
この関数は、指定したスキーマの統計を復元するために使用されます。
構文
DBMS_STATS.RESTORE_SCHEMA_STATS (
ownname VARCHAR2、
as_of_timestampタイムゾーン付きタイムスタンプ
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 復元するスキーマの名前を指定します。 | はい |
as_of_timestamp | 統計を復元する時点を指定します。 | はい |
例
指定したスキーマの統計を復元します。 例:
SELECT DBMS_STATS.RESTORE_SCHEMA_STATS('dbms_stats_schema ',time) FROM polar_dbms_stats.backup_history WHERE unit='s';
復元された統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema % ';
DBMS_STATS.RESTORE_DATABASE_STATS
この関数は、データベース統計を復元するために使用されます。
構文
DBMS_STATS.RESTORE_DATABASE_STATS (
as_of_timestampタイムゾーン付きタイムスタンプ
);
Parameters
パラメーター | 説明 | 必須 |
as_of_timestamp | 統計を復元する時点を指定します。 | はい |
例
データベース統計を復元します。 例:
SELECT DBMS_STATS.RESTORE_DATABASE_STATS (時間) FROM polar_dbms_stats.backup_history WHERE unit='d';
復元された統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema % ';
DBMS_STATS.RESTORE_TABLE_STATS
この関数は、指定されたテーブルの統計を復元するために使用されます。
構文
DBMS_STATS.RESTORE_TABLE_STATS ()
ownname VARCHAR2、
tabname VARCHAR2、
as_of_timestampタイムゾーン付きタイムスタンプ
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 復元するテーブルのスキーマを指定します。 | 可 |
タブ名 | 復元するテーブルの名前を指定します。 | はい |
as_of_timestamp | 統計を復元する時点を指定します。 | はい |
例
指定したテーブルの統計を復元します。 例:
SELECT DBMS_STATS.RESTORE_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test', time)
復元された統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema % ';
DBMS_STATS.RESTORE_COLUMN_STATS
この関数は、指定した列の統計を復元するために使用されます。
構文
DBMS_STATS.RESTORE_COLUMN_STATS (
ownnameテキスト、
tablenameテキスト、
attnameテキスト、
as_of_timestampタイムスタンプとタイムゾーン
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 復元する列のスキーマを指定します。 | はい |
タブ名 | 復元する列を含むテーブルの名前を指定します。 | 可 |
attname | 復元する列の名前を指定します。 | 可 |
as_of_timestamp | 統計を復元する時点を指定します。 | 可 |
例
指定した列の統計を復元します。 例:
SELECT DBMS_STATS.RESTORE_COLUMN_STATS('dbms_stats_schema ', 'dbms_stats_test', 'id', time) FROM polar_dbms_stats.backup_history WHERE unit='c';
復元された統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema % ';
DBMS_STATS.PURGE_STATS
この関数は、指定された時点より前に生成されたバックアップ統計を削除するために使用されます。
構文
DBMS_STATS.PURGE_STATS (
before_timestampタイムスタンプ
);
Parameters
パラメーター | 説明 | 必須 |
before_timestamp | 指定された時点を指定します。 システムは、指定された時点より前に生成された統計を削除します。 | 可 |
例
指定した時点より前に生成されたバックアップ統計を削除します。 例:
SELECT DBMS_STATS.PURGE_STATS (時間) FROM polar_dbms_stats.backup_history WHERE unit='c';
DBMS_STATS.SET_TABLE_STATS
この関数は、指定されたテーブルの統計を設定するために使用されます。
構文
DBMS_STATS.SET_TABLE_STATS (
ownname VARCHAR2、
tabname VARCHAR2、
numrows NUMBERデフォルトNULL、
numblks NUMBERデフォルトNULL
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 設定するテーブルのスキーマを指定します。 | 可 |
タブ名 | 設定するテーブルの名前を指定します。 | 可 |
numrows | テーブルの行数を指定します。 | 可 |
numblks | テーブルのブロック数を指定します。 | 可 |
例
テーブル統計を設定します。 例:
CALL DBMS_STATS.SET_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test', 1234, 4321);
DBMS_STATS.GET_TABLE_STATS
この関数は、指定されたテーブルの統計を照会するために使用されます。
構文
DBMS_STATS.GET_TABLE_STATS (
ownname VARCHAR2、
tabname VARCHAR2、
numrows OUT NUMBER,
numblks OUT番号
);
Parameters
パラメーター | 説明 | 必須 |
ownname | クエリするテーブルのスキーマを指定します。 | 可 |
タブ名 | 照会するテーブルの名前を指定します。 | 可 |
numrows | テーブルから照会する行数を指定します。 | 可 |
numblks | テーブルから照会するブロックの数を指定します。 | 可 |
例
テーブル統計のクエリ 例:
DECLARE
numrows整数;
numblks整数;
開始
CALL DBMS_STATS.GET_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test', numrows, numberks);
通知 '%' を上げる、numrows;
通知を上げる '%' 、numblks;
エンド;
DBMS_STATS.SET_INDEX_STATS
この関数は、インデックス統計を設定するために使用されます。
構文
DBMS_STATS.SET_INDEX_STATS (
ownname VARCHAR2、
indname VARCHAR2、
numrows NUMBERデフォルトNULL、
numblks NUMBERデフォルトNULL
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 設定するインデックスのスキーマを指定します。 | 可 |
indname | 設定するインデックスの名前を指定します。 | 可 |
numrows | インデックスに設定する行数を指定します。 | 可 |
numblks | インデックスに設定するブロックの数を指定します。 | 可 |
例
インデックス統計を設定します。 例:
CALL DBMS_STATS.SET_INDEX_STATS('dbms_stats_schema ', 'dbms_stats_index', 2345, 5432);
DBMS_STATS.GET_INDEX_STATS
この関数は、指定されたインデックスの統計を照会するために使用されます。
構文
DBMS_STATS.GET_INDEX_STATS (
ownname VARCHAR2、
tabname VARCHAR2、
numrows OUT NUMBER,
numblks OUT番号
);
Parameters
パラメーター | 説明 | 必須 |
ownname | クエリするインデックスのスキーマを指定します。 | 可 |
タブ名 | クエリするインデックスの名前を指定します。 | 可 |
numrows | インデックスからクエリする行数を指定します。 | 可 |
numblks | インデックスからクエリするブロックの数を指定します。 | 可 |
例
クエリインデックス統計。 例:
DECLARE
numrows整数;
numblks整数;
開始
CALL DBMS_STATS.GET_INDEX_STATS('dbms_stats_schema ', 'dbms_stats_index', numrows, numberks);
通知 '%' を上げる、numrows;
通知を上げる '%' 、numblks;
エンド;
DBMS_STATS.GET_COLUMN_STATS
この関数は、指定した列の統計を照会するために使用されます。
構文
DBMS_STATS.GET_COLUMN_STATS (
ownname VARCHAR2、
tabname VARCHAR2、
colname VARCHAR2、
distcntアウト番号、
nullcntアウト番号、
avgclenアウト番号
);
Parameters
パラメーター | 説明 | 必須 |
ownname | クエリする列のスキーマを指定します。 | 可 |
タブ名 | クエリする列を含むテーブルの名前を指定します。 | 可 |
colname | クエリする列の名前を指定します。 | 可 |
distcnt | クエリする列内の個別の値の数を指定します。 | 可 |
nullcnt | クエリする列の空の値の数を指定します。 | 可 |
avgclen | クエリする列の平均の長さを指定します。 | 可 |
例
クエリ列統計。 例:
DECLARE
distcnt整数;
nullcnt整数;
avgclen整数;
開始
CALL DBMS_STATS.GET_COLUMN_STATS('dbms_stats_schema ', 'dbms_stats_test', 'id', distcnt, nullcnt, avgclen);
通知 '%' を上げる, distcnt;
通知 '%' を上げる、nullcnt;
通知 '%' を上げる, avgclen;
エンド;
DBMS_STATS.LOCK_TABLE_STATS
この関数は、使用されているテーブルの統計をロックするために使用されます。
構文
DBMS_STATS.LOCK_TABLE_STATS ()
ownname VARCHAR2、
tabname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | ロックするテーブルのスキーマを指定します。 | 可 |
タブ名 | ロックするテーブルの名前を指定します。 | 可 |
例
使用されているテーブルの統計をロックします。 例:
CALL DBMS_STATS.LOCK_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test');
ロックされた統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname = 'dbms_stats_schema.dbms_stats_test ';
DBMS_STATS.UNLOCK_TABLE_STATS
この関数は、使用されているテーブルの統計のロックを解除するために使用されます。
構文
DBMS_STATS.UNLOCK_TABLE_STATS ()
ownname VARCHAR2、
tabname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | ロックを解除するテーブルのスキーマを指定します。 | 可 |
タブ名 | ロックを解除するテーブルの名前を指定します。 | 可 |
例
使用されているテーブルの統計のロックを解除します。 例:
CALL DBMS_STATS.UNLOCK_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test');
ロックされた統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname = 'dbms_stats_schema.dbms_stats_test ';
DBMS_STATS.LOCK_SCHEMA_STATS
この関数は、使用されているスキーマの統計をロックするために使用されます。
構文
DBMS_STATS.LOCK_SCHEMA_STATS ()
ownname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | ロックするスキーマの名前を指定します。 | 可 |
例
使用されているスキーマの統計をロックします。 例:
CALL DBMS_STATS.LOCK_SCHEMA_STATS('dbms_stats_schema ');
ロックされた統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema.% ';
DBMS_STATS.UNLOCK_SCHEMA_STATS
この関数は、使用されているスキーマの統計のロックを解除するために使用されます。
構文
DBMS_STATS.UNLOCK_SCHEMA_STATS (
ownname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | ロックを解除するスキーマの名前を指定します。 | 可 |
例
使用されているスキーマの統計のロックを解除します。 例:
CALL DBMS_STATS.UNLOCK_SCHEMA_STATS('dbms_stats_schema ');
ロックされた統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema.% ';
DBMS_STATS.LOCK_COLUMN_STATS
この関数は、使用されている列の統計をロックするために使用されます。
構文
DBMS_STATS.LOCK_COLUMN_STATS ()
ownname VARCHAR2、
tabname VARCHAR2、
attname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | ロックする列のスキーマを指定します。 | 可 |
タブ名 | ロックする列を含むテーブルの名前を指定します。 | 可 |
attname | ロックする列の名前を指定します。 | 可 |
例
使用されている列の統計をロックします。 例:
CALL DBMS_STATS.LOCK_COLUMN_STATS('dbms_stats_schema ', 'dbms_stats_test', 'id');
DBMS_STATS.UNLOCK_COLUMN_STATS
この関数は、使用されている列の統計のロックを解除するために使用されます。
構文
DBMS_STATS.UNLOCK_COLUMN_STATS (
ownname VARCHAR2、
tabname VARCHAR2、
attname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | ロックを解除する列のスキーマを指定します。 | 可 |
タブ名 | ロックを解除する列を含むテーブルの名前を指定します。 | 可 |
attname | ロックを解除する列の名前を指定します。 | 可 |
例
使用されている列の統計のロックを解除します。 例:
CALL DBMS_STATS.UNLOCK_COLUMN_STATS('dbms_stats_schema ', 'dbms_stats_test', 'id');
DBMS_STATS.DELETE_TABLE_STATS
この関数は、既存のテーブル統計を削除するために使用されます。
構文
DBMS_STATS.DELETE_TABLE_STATS ()
ownname VARCHAR2、
tabname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 削除するテーブルのスキーマを指定します。 | 可 |
タブ名 | 削除するテーブルの名前を指定します。 | 可 |
例
既存のテーブル統計を削除します。 例:
CALL DBMS_STATS.DELETE_TABLE_STATS('dbms_stats_schema ', 'dbms_stats_test');
既存のテーブル統計が削除された後にテーブル統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_backup WHERE relname = 'dbms_stats_schema.dbms_stats_test ';
DBMS_STATS.DELETE_COLUMN_STATS
この関数は、既存の列統計を削除するために使用されます。
構文
DBMS_STATS.DELETE_COLUMN_STATS (
ownname VARCHAR2、
tabname VARCHAR2、
attname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 削除する列のスキーマを指定します。 | 可 |
タブ名 | 削除する列を含むテーブルの名前を指定します。 | 可 |
attname | 削除する列の名前を指定します。 | 可 |
例
既存の列統計を削除します。 例:
CALL DBMS_STATS.DELETE_COLUMN_STATS('dbms_stats_schema ', 'dbms_stats_test', 'id');
DBMS_STATS.DELETE_SCHEMA_STATS
この関数は、既存のスキーマ統計を削除するために使用されます。
構文
DBMS_STATS.DELETE_SCHEMA_STATS (
ownname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 削除するスキーマの名前を指定します。 | 可 |
例
既存のスキーマ統計を削除します。 例:
CALL DBMS_STATS.DELETE_SCHEMA_STATS('dbms_stats_schema ');
既存のスキーマ統計が削除された後、スキーマ統計を照会します。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_backup WHERE relname LIKE 'dbms_stats_schema.% ';
DBMS_STATS.DELETE_INDEX_STATS
この関数は、既存のインデックス統計を削除するために使用されます。
構文
DBMS_STATS.DELETE_INDEX_STATS (
ownname VARCHAR2、
indname VARCHAR2
);
Parameters
パラメーター | 説明 | 必須 |
ownname | 削除するインデックスのスキーマを指定します。 | 可 |
indname | 削除するインデックスの名前を指定します。 | 可 |
例
既存のインデックス統計を削除します。 例:
CALL DBMS_STATS.DELETE_INDEX_STATS('dbms_stats_schema ', 'dbms_stats_index');
既存のインデックス統計が削除された後のクエリインデックス統計。 例:
SELECT count(*) FROM polar_dbms_stats.relation_stats_backup WHERE relname LIKE 'dbms_stats_schema.% ';