すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_STATS

最終更新日:Jun 03, 2024

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;

テストデータの準備

説明 テストデータは、このトピックで提供されている例にのみ適用されます。
  1. dbms_stats_schemaという名前のスキーマを作成します。
    スキーマを作成dbms_stats_schema;
  2. dbms_stats_testという名前のテーブルを作成します。
    CREATE TABLE dbms_stats_schema.dbms_stats_test(id int);
  3. インデックスを作成します。
    CREATE INDEX dbms_stats_index on dbms_stats_schema.dbms_stats_test(id);
  4. データを挿入します。
    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

この関数は、指定されたテーブルの統計を設定するために使用されます。

説明 SET_TABLE_STATS関数を呼び出してテーブルの統計を設定する前に、テーブルの統計が収集されていることを確認してください。 テーブル統計が収集されない場合は、GATHEER_SCHEMA_STATSまたはGATHER_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.% ';