全部产品
Search
文档中心

PolarDB:DBMS_STATS

更新时间:Jul 02, 2025

PolarDB for PostgreSQL (Kompatibel dengan Oracle) menyediakan paket DBMS_STATS untuk membantu pengumpulan statistik operasional database, pencadangan statistik yang dihasilkan, serta pemulihan statistik. Anda dapat menentukan titik waktu tertentu untuk pencadangan statistik dan memodifikasi statistik tabel sesuai kebutuhan. Dengan cara ini, pengoptimal dapat menghasilkan rencana eksekusi yang lebih akurat.

Prasyarat

Hubungi kami jika Anda memerlukan bantuan untuk menggunakan paket DBMS_STATS.

Menyiapkan data uji

Catatan

Data uji hanya berlaku untuk contoh-contoh yang disediakan dalam topik ini.

  1. Buat skema bernama dbms_stats_schema.

    CREATE SCHEMA dbms_stats_schema;
  2. Buat tabel bernama dbms_stats_test.

    CREATE TABLE dbms_stats_schema.dbms_stats_test(id int);
  3. Buat indeks.

    CREATE INDEX dbms_stats_index on dbms_stats_schema.dbms_stats_test(id);
  4. Masukkan data.

    INSERT INTO dbms_stats_schema.dbms_stats_test values (generate_series(1,10000));

DBMS_STATS.GATHER_SCHEMA_STATS

Fungsi ini digunakan untuk mengumpulkan dan mencadangkan statistik skema.

Syntax

DBMS_STATS.GATHER_SCHEMA_STATS (
        ownname          VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan nama skema yang ingin Anda analisis.

Ya

Examples

Kumpulkan dan cadangkan statistik skema. Contoh:

CALL DBMS_STATS.GATHER_SCHEMA_STATS('dbms_stats_schema');

Kueri status pencadangan statistik skema. Contoh:

SELECT * FROM polar_dbms_stats.backup_history;

DBMS_STATS.GATHER_TABLE_STATS

Fungsi ini digunakan untuk mengumpulkan dan mencadangkan statistik tabel.

Syntax

DBMS_STATS.GATHER_TABLE_STATS (
        ownname          VARCHAR2, 
        tabname          VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda analisis.

Ya

tabname

Menentukan nama tabel yang ingin Anda analisis.

Ya

Examples

Kumpulkan dan cadangkan statistik tabel. Contoh:

CALL DBMS_STATS.GATHER_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test');

Kueri statistik pencadangan. Contoh:

SELECT * FROM polar_dbms_stats.backup_history;

DBMS_STATS.GATHER_DATABASE_STATS

Fungsi ini digunakan untuk mengumpulkan dan mencadangkan statistik database.

Syntax

DBMS_STATS.GATHER_DATABASE_STATS ();

Examples

Kumpulkan dan cadangkan statistik database. Contoh:

CALL DBMS_STATS.GATHER_DATABASE_STATS();

Kueri statistik pencadangan. Contoh:

SELECT * FROM polar_dbms_stats.backup_history;

DBMS_STATS.GATHER_INDEX_STATS

Fungsi ini digunakan untuk mengumpulkan dan mencadangkan statistik indeks.

Syntax

DBMS_STATS.GATHER_INDEX_STATS (
        ownname          VARCHAR2, 
        indname          VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari indeks yang ingin Anda analisis.

Ya

indname

Menentukan nama indeks yang ingin Anda analisis.

Ya

Examples

Kumpulkan dan cadangkan statistik indeks. Contoh:

CALL DBMS_STATS.GATHER_INDEX_STATS('dbms_stats_schema', 'dbms_stats_index');

Kueri statistik pencadangan. Contoh:

SELECT * FROM polar_dbms_stats.backup_history;

DBMS_STATS.GATHER_COLUMN_STATS

Fungsi ini digunakan untuk mengumpulkan dan mencadangkan statistik kolom tertentu.

Syntax

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

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari kolom yang ingin Anda analisis.

Ya

tablename

Menentukan nama tabel yang berisi kolom yang ingin Anda analisis.

Ya

attname

Menentukan nama kolom yang ingin Anda analisis.

Ya

Examples

Kumpulkan dan cadangkan statistik untuk kolom tertentu. Contoh:

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

Kueri status pencadangan statistik kolom. Contoh:

SELECT * FROM polar_dbms_stats.backup_history;

DBMS_STATS.RESTORE_SCHEMA_STATS

Fungsi ini digunakan untuk memulihkan statistik skema tertentu.

Syntax

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

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan nama skema yang ingin Anda pulihkan.

Ya

as_of_timestamp

Menentukan titik waktu ke mana Anda ingin memulihkan statistik.

Ya

Examples

Pulihkan statistik untuk skema tertentu. Contoh:

SELECT DBMS_STATS.RESTORE_SCHEMA_STATS('dbms_stats_schema',time) FROM polar_dbms_stats.backup_history WHERE unit='s';

Kueri statistik yang dipulihkan. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema%';

DBMS_STATS.RESTORE_DATABASE_STATS

Fungsi ini digunakan untuk memulihkan statistik database.

Syntax

DBMS_STATS.RESTORE_DATABASE_STATS (
        as_of_timestamp        TIMESTAMP WITH TIME ZONE
    );

Parameters

Parameter

Deskripsi

Diperlukan

as_of_timestamp

Menentukan titik waktu ke mana Anda ingin memulihkan statistik.

Ya

Examples

Pulihkan statistik database. Contoh:

SELECT DBMS_STATS.RESTORE_DATABASE_STATS(time) FROM polar_dbms_stats.backup_history WHERE unit='d';

Kueri statistik yang dipulihkan. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema%';

DBMS_STATS.RESTORE_TABLE_STATS

Fungsi ini digunakan untuk memulihkan statistik tabel tertentu.

Syntax

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

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda pulihkan.

Ya

tabname

Menentukan nama tabel yang ingin Anda pulihkan.

Ya

as_of_timestamp

Menentukan titik waktu ke mana Anda ingin memulihkan statistik.

Ya

Examples

Pulihkan statistik untuk tabel tertentu. Contoh:

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

Kueri statistik yang dipulihkan. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema%';

DBMS_STATS.RESTORE_COLUMN_STATS

Fungsi ini digunakan untuk memulihkan statistik kolom tertentu.

Syntax

DBMS_STATS.RESTORE_COLUMN_STATS (
        ownname         TEXT,
        tablename       TEXT,
        attname         TEXT,
        as_of_timestamp timestamp with time zone
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari kolom yang ingin Anda pulihkan.

Ya

tabname

Menentukan nama tabel yang berisi kolom yang ingin Anda pulihkan.

Ya

attname

Menentukan nama kolom yang ingin Anda pulihkan.

Ya

as_of_timestamp

Menentukan titik waktu ke mana Anda ingin memulihkan statistik.

Ya

Examples

Pulihkan statistik untuk kolom tertentu. Contoh:

SELECT DBMS_STATS.RESTORE_COLUMN_STATS('dbms_stats_schema', 'dbms_stats_test', 'id', time) FROM polar_dbms_stats.backup_history WHERE unit='c';

Kueri statistik yang dipulihkan. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema%';

DBMS_STATS.PURGE_STATS

Fungsi ini digunakan untuk menghapus statistik pencadangan yang dihasilkan sebelum titik waktu tertentu.

Syntax

DBMS_STATS.PURGE_STATS (
        before_timestamp timestamp
    );

Parameters

Parameter

Deskripsi

Diperlukan

before_timestamp

Menentukan titik waktu tertentu. Sistem akan menghapus statistik yang dihasilkan sebelum titik waktu tersebut.

Ya

Examples

Hapus statistik pencadangan yang dihasilkan sebelum titik waktu tertentu. Contoh:

SELECT DBMS_STATS.PURGE_STATS(time) FROM polar_dbms_stats.backup_history WHERE unit='c';

DBMS_STATS.SET_TABLE_STATS

Fungsi ini digunakan untuk mengonfigurasi statistik tabel tertentu.

Catatan

Sebelum memanggil fungsi SET_TABLE_STATS untuk mengonfigurasi statistik tabel, pastikan bahwa statistik tabel telah dikumpulkan. Jika belum, gunakan fungsi GATHER_SCHEMA_STATS atau GATHER_TABLE_STATS untuk mengumpulkannya.

Syntax

DBMS_STATS.SET_TABLE_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2, 
        numrows       NUMBER   DEFAULT NULL, 
        numblks       NUMBER   DEFAULT NULL
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda konfigurasi.

Ya

tabname

Menentukan nama tabel yang ingin Anda konfigurasi.

Ya

numrows

Menentukan jumlah baris untuk tabel tersebut.

Ya

numblks

Menentukan jumlah blok untuk tabel tersebut.

Ya

Examples

Konfigurasikan statistik tabel. Contoh:

CALL DBMS_STATS.SET_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test', 1234, 4321);

DBMS_STATS.GET_TABLE_STATS

Fungsi ini digunakan untuk menanyakan statistik tabel tertentu.

Syntax

DBMS_STATS.GET_TABLE_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2, 
        numrows       OUT NUMBER, 
        numblks       OUT NUMBER
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda tanyakan.

Ya

tabname

Menentukan nama tabel yang ingin Anda tanyakan.

Ya

numrows

Menentukan jumlah baris yang ingin Anda tanyakan dari tabel tersebut.

Ya

numblks

Menentukan jumlah blok yang ingin Anda tanyakan dari tabel tersebut.

Ya

Examples

Tanyakan statistik tabel. Contoh:

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

Fungsi ini digunakan untuk mengonfigurasi statistik indeks.

Syntax

DBMS_STATS.SET_INDEX_STATS (
        ownname       VARCHAR2,
        indname       VARCHAR2,
        numrows       NUMBER   DEFAULT NULL, 
        numblks       NUMBER   DEFAULT NULL
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari indeks yang ingin Anda konfigurasi.

Ya

indname

Menentukan nama indeks yang ingin Anda konfigurasi.

Ya

numrows

Menentukan jumlah baris yang ingin Anda konfigurasi untuk indeks tersebut.

Ya

numblks

Menentukan jumlah blok yang ingin Anda konfigurasi untuk indeks tersebut.

Ya

Examples

Konfigurasikan statistik indeks. Contoh:

CALL DBMS_STATS.SET_INDEX_STATS('dbms_stats_schema', 'dbms_stats_index', 2345, 5432);

DBMS_STATS.GET_INDEX_STATS

Fungsi ini digunakan untuk menanyakan statistik indeks tertentu.

Syntax

DBMS_STATS.GET_INDEX_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2, 
        numrows       OUT NUMBER, 
        numblks       OUT NUMBER
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari indeks yang ingin Anda tanyakan.

Ya

tabname

Menentukan nama indeks yang ingin Anda tanyakan.

Ya

numrows

Menentukan jumlah baris yang ingin Anda tanyakan dari indeks tersebut.

Ya

numblks

Menentukan jumlah blok yang ingin Anda tanyakan dari indeks tersebut.

Ya

Examples

Tanyakan statistik indeks. Contoh:

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

Fungsi ini digunakan untuk menanyakan statistik kolom tertentu.

Syntax

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

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari kolom yang ingin Anda tanyakan.

Ya

tabname

Menentukan nama tabel yang berisi kolom yang ingin Anda tanyakan.

Ya

colname

Menentukan nama kolom yang ingin Anda tanyakan.

Ya

distcnt

Menentukan jumlah nilai unik dalam kolom yang ingin Anda tanyakan.

Ya

nullcnt

Menentukan jumlah nilai kosong dalam kolom yang ingin Anda tanyakan.

Ya

avgclen

Menentukan panjang rata-rata dari kolom yang ingin Anda tanyakan.

Ya

Examples

Tanyakan statistik kolom. Contoh:

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

Fungsi ini digunakan untuk mengunci statistik tabel yang sedang digunakan.

Syntax

DBMS_STATS.LOCK_TABLE_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2 
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda kunci.

Ya

tabname

Menentukan nama tabel yang ingin Anda kunci.

Ya

Examples

Kunci statistik tabel yang sedang digunakan. Contoh:

CALL DBMS_STATS.LOCK_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test');

Tanyakan statistik yang terkunci. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname = 'dbms_stats_schema.dbms_stats_test';

DBMS_STATS.UNLOCK_TABLE_STATS

Fungsi ini digunakan untuk membuka kunci statistik tabel yang sedang digunakan.

Syntax

DBMS_STATS.UNLOCK_TABLE_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2 
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda buka kuncinya.

Ya

tabname

Menentukan nama tabel yang ingin Anda buka kuncinya.

Ya

Examples

Buka kunci statistik untuk tabel yang sedang digunakan. Contohnya:

CALL DBMS_STATS.UNLOCK_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test');

Tanyakan statistik yang terkunci. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname = 'dbms_stats_schema.dbms_stats_test';

DBMS_STATS.LOCK_SCHEMA_STATS

Fungsi ini digunakan untuk mengunci statistik skema yang sedang digunakan.

Syntax

DBMS_STATS.LOCK_SCHEMA_STATS (
        ownname       VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan nama skema yang ingin Anda kunci.

Ya

Examples

Kunci statistik skema yang sedang digunakan. Contoh:

CALL DBMS_STATS.LOCK_SCHEMA_STATS('dbms_stats_schema');

Tanyakan statistik yang terkunci. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema.%';

DBMS_STATS.UNLOCK_SCHEMA_STATS

Fungsi ini digunakan untuk membuka kunci statistik skema yang sedang digunakan.

Syntax

DBMS_STATS.UNLOCK_SCHEMA_STATS (
        ownname       VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan nama skema yang ingin Anda buka kuncinya.

Ya

Examples

Buka kunci statistik skema yang sedang digunakan. Contoh:

CALL DBMS_STATS.UNLOCK_SCHEMA_STATS('dbms_stats_schema');

Tanyakan statistik yang terkunci. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_locked WHERE relname LIKE 'dbms_stats_schema.%';

DBMS_STATS.LOCK_COLUMN_STATS

Fungsi ini digunakan untuk mengunci statistik kolom yang sedang digunakan.

Syntax

DBMS_STATS.LOCK_COLUMN_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2, 
        attname       VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari kolom yang ingin Anda kunci.

Ya

tabname

Menentukan nama tabel yang berisi kolom yang ingin Anda kunci.

Ya

attname

Menentukan nama kolom yang ingin Anda kunci.

Ya

Examples

Kunci statistik kolom yang sedang digunakan. Contoh:

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

DBMS_STATS.UNLOCK_COLUMN_STATS

Fungsi ini digunakan untuk membuka kunci statistik kolom yang sedang digunakan.

Syntax

DBMS_STATS.UNLOCK_COLUMN_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2, 
        attname       VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari kolom yang ingin Anda buka kuncinya.

Ya

tabname

Menentukan nama tabel yang berisi kolom yang ingin Anda buka kuncinya.

Ya

attname

Menentukan nama kolom yang ingin Anda buka kuncinya.

Ya

Examples

Buka kunci statistik kolom yang sedang digunakan. Contoh:

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

DBMS_STATS.DELETE_TABLE_STATS

Fungsi ini digunakan untuk menghapus statistik tabel yang ada.

Syntax

DBMS_STATS.DELETE_TABLE_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari tabel yang ingin Anda hapus.

Ya

tabname

Menentukan nama tabel yang ingin Anda hapus.

Ya

Examples

Hapus statistik tabel yang ada. Contoh:

CALL DBMS_STATS.DELETE_TABLE_STATS('dbms_stats_schema', 'dbms_stats_test');

Tanyakan statistik tabel setelah statistik tabel dihapus. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_backup WHERE relname = 'dbms_stats_schema.dbms_stats_test';

DBMS_STATS.DELETE_COLUMN_STATS

Fungsi ini digunakan untuk menghapus statistik kolom yang ada.

Syntax

DBMS_STATS.DELETE_COLUMN_STATS (
        ownname       VARCHAR2, 
        tabname       VARCHAR2,
        attname       VARCHAR2
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari kolom yang ingin Anda hapus.

Ya

tabname

Menentukan nama tabel yang berisi kolom yang ingin Anda hapus.

Ya

attname

Menentukan nama kolom yang ingin Anda hapus.

Ya

Examples

Hapus statistik kolom yang ada. Contoh:

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

DBMS_STATS.DELETE_SCHEMA_STATS

Fungsi ini digunakan untuk menghapus statistik skema yang ada.

Syntax

DBMS_STATS.DELETE_SCHEMA_STATS (
        ownname       VARCHAR2 
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan nama skema yang ingin Anda hapus.

Ya

Examples

Hapus statistik skema yang ada. Contoh:

CALL DBMS_STATS.DELETE_SCHEMA_STATS('dbms_stats_schema');

Tanyakan statistik skema setelah statistik skema dihapus. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_backup WHERE relname LIKE 'dbms_stats_schema.%';

DBMS_STATS.DELETE_INDEX_STATS

Fungsi ini digunakan untuk menghapus statistik indeks yang ada.

Syntax

DBMS_STATS.DELETE_INDEX_STATS (
        ownname       VARCHAR2,
        indname       VARCHAR2 
    );

Parameters

Parameter

Deskripsi

Diperlukan

ownname

Menentukan skema dari indeks yang ingin Anda hapus.

Ya

indname

Menentukan nama indeks yang ingin Anda hapus.

Ya

Examples

Hapus statistik indeks yang ada. Contoh:

CALL DBMS_STATS.DELETE_INDEX_STATS('dbms_stats_schema', 'dbms_stats_index');

Tanyakan statistik indeks setelah statistik indeks dihapus. Contoh:

SELECT count(*) FROM polar_dbms_stats.relation_stats_backup WHERE relname LIKE 'dbms_stats_schema.%';