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

PolarDB:DBMS_STATS

最終更新日:Dec 13, 2024

PolarDB for PostgreSQL (Compatible with Oracle) には、DBMS_STATSパッケージが用意されており、データベースの実行に関する統計の収集、生成された統計のバックアップ、統計の復元に役立ちます。 統計バックアップのカスタム時点を指定し、必要に応じてテーブル統計を変更できます。 このようにして、オプティマイザは正確な実行計画を生成できます。

前提条件

DBMS_STATSパッケージを使用する場合は、お問い合わせください。

テストデータの準備

説明

テストデータは、このトピックで提供されている例にのみ適用されます。

  1. dbms_stats_schemaという名前のスキーマを作成します。

    CREATE 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 values (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 * FROM 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 * FROM polar_dbms_stats.backup_history;

DBMS_STATS.GATHER_DATABASE_STATS

この関数は、データベース統計の収集とバックアップに使用されます。

構文

DBMS_STATS.GATHER_DATABASE_STATS ();

データベース統計を収集してバックアップします。 例:

CALL DBMS_STATS.GATHER_DATABASE_STATS();

バックアップ統計を照会します。 例:

SELECT * FROM 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 * FROM polar_dbms_stats.backup_history;

DBMS_STATS.GATHER_COLUMN_STATS

この関数は、指定した列の統計を収集してバックアップするために使用されます。

構文

DBMS_STATS.GATHER_COLUMN_STATS (
        ownname         VARCHAR2,
        tablename       VARCHAR2,
        attname         TEXT
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

分析する列のスキーマを指定します。

tablename

分析する列を含むテーブルの名前を指定します。

attname

分析する列の名前を指定します。

指定した列の統計を収集してバックアップします。 例:

CALL DBMS_STATS.GATHER_COLUMN_STATS('dbms_stats_schema', 'dbms_stats_test', 'id');

列統計のバックアップステータスを照会します。 例:

SELECT * FROM polar_dbms_stats.backup_history;

DBMS_STATS.RESTORE_SCHEMA_STATS

この関数は、指定したスキーマの統計を復元するために使用されます。

構文

DBMS_STATS.RESTORE_SCHEMA_STATS (
        ownname                VARCHAR2, 
        as_of_timestamp        TIMESTAMP WITH TIME ZONE
    );

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        TIMESTAMP WITH TIME ZONE
    );

Parameters

パラメーター

説明

必須 / 任意

as_of_timestamp

統計を復元する時点を指定します。

データベース統計を復元します。 例:

SELECT DBMS_STATS.RESTORE_DATABASE_STATS(time) 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           TIMESTAMP WITH TIME ZONE
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

復元するテーブルのスキーマを指定します。

tabname

復元するテーブルの名前を指定します。

as_of_timestamp

統計を復元する時点を指定します。

指定したテーブルの統計を復元します。 例:

SELECT DBMS_STATS.RESTORE_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test', time) FROM polar_dbms_stats.backup_history WHERE unit='t';

復元された統計を照会します。 例:

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         TEXT,
        tablename       TEXT,
        attname         TEXT,
        as_of_timestamp timestamp with time zone
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

復元する列のスキーマを指定します。

tabname

復元する列を含むテーブルの名前を指定します。

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 timestamp
    );

Parameters

パラメーター

説明

必須 / 任意

before_timestamp

指定された時点を指定します。 システムは、指定された時点より前に生成された統計を削除します。

指定した時点より前に生成されたバックアップ統計を削除します。 例:

SELECT DBMS_STATS.PURGE_STATS(time) 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   DEFAULT NULL, 
        numblks       NUMBER   DEFAULT NULL
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

設定するテーブルのスキーマを指定します。

tabname

設定するテーブルの名前を指定します。

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 NUMBER
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

クエリするテーブルのスキーマを指定します。

tabname

照会するテーブルの名前を指定します。

numrows

テーブルから照会する行数を指定します。

numblks

テーブルから照会するブロックの数を指定します。

テーブル統計のクエリ 例:

DECLARE
    numrows integer;
    numblks integer;
BEGIN
    CALL DBMS_STATS.GET_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test', numrows, numblks);
    raise notice '%', numrows;
    raise notice '%', numblks;
END;

DBMS_STATS.SET_INDEX_STATS

この関数は、インデックス統計を設定するために使用されます。

構文

DBMS_STATS.SET_INDEX_STATS (
        ownname       VARCHAR2,
        indname       VARCHAR2,
        numrows       NUMBER   DEFAULT NULL, 
        numblks       NUMBER   DEFAULT 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 NUMBER
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

クエリするインデックスのスキーマを指定します。

tabname

クエリするインデックスの名前を指定します。

numrows

インデックスからクエリする行数を指定します。

numblks

インデックスからクエリするブロックの数を指定します。

クエリインデックス統計。 例:

DECLARE
    numrows integer;
    numblks integer;
BEGIN
    CALL DBMS_STATS.GET_INDEX_STATS('dbms_stats_schema', 'dbms_stats_index', numrows, numblks);
    raise notice '%', numrows;
    raise notice '%', numblks;
END;

DBMS_STATS.GET_COLUMN_STATS

この関数は、指定した列の統計を照会するために使用されます。

構文

DBMS_STATS.GET_COLUMN_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2, 
        colname       VARCHAR2, 
        distcnt OUT NUMBER, 
        nullcnt OUT NUMBER, 
        avgclen OUT NUMBER
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

クエリする列のスキーマを指定します。

tabname

クエリする列を含むテーブルの名前を指定します。

colname

クエリする列の名前を指定します。

distcnt

クエリする列内の個別の値の数を指定します。

nullcnt

クエリする列の空の値の数を指定します。

avgclen

クエリする列の平均の長さを指定します。

クエリ列統計。 例:

DECLARE
    distcnt integer;
    nullcnt integer;
    avgclen integer;
BEGIN
    CALL DBMS_STATS.GET_COLUMN_STATS('dbms_stats_schema', 'dbms_stats_test', 'id', distcnt, nullcnt, avgclen);
    raise notice '%', distcnt;
    raise notice '%', nullcnt;
    raise notice '%', avgclen;
END;

DBMS_STATS.LOCK_TABLE_STATS

この関数は、使用されているテーブルの統計をロックするために使用されます。

構文

DBMS_STATS.LOCK_TABLE_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2 
    );

Parameters

パラメーター

説明

必須 / 任意

ownname

ロックするテーブルのスキーマを指定します。

tabname

ロックするテーブルの名前を指定します。

使用されているテーブルの統計をロックします。 例:

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

ロックを解除するテーブルのスキーマを指定します。

tabname

ロックを解除するテーブルの名前を指定します。

使用されているテーブルの統計のロックを解除します。 例:

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

ロックする列のスキーマを指定します。

tabname

ロックする列を含むテーブルの名前を指定します。

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

ロックを解除する列のスキーマを指定します。

tabname

ロックを解除する列を含むテーブルの名前を指定します。

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

削除するテーブルのスキーマを指定します。

tabname

削除するテーブルの名前を指定します。

既存のテーブル統計を削除します。 例:

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

削除する列のスキーマを指定します。

tabname

削除する列を含むテーブルの名前を指定します。

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.%';