All Products
Search
Document Center

PolarDB:hypopg

Last Updated:Jul 02, 2025

Ekstensi hypopg membantu Anda memeriksa apakah suatu jenis indeks dapat mempercepat satu atau lebih kueri.

Prasyarat

  • Sebelum menggunakan ekstensi hypopg, tentukan hal berikut:

    • Kueri mana yang perlu dioptimalkan.

    • Jenis indeks yang akan digunakan.

  • Ekstensi ini didukung pada kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle) yang menjalankan mesin berikut:

    • PolarDB for PostgreSQL (Kompatibel dengan Oracle) 2.0 (versi revisi 2.0.14.1.0 atau lebih baru).

    • PolarDB for PostgreSQL (Kompatibel dengan Oracle) 1.0 (versi revisi 1.1.28 atau lebih baru).

    Catatan

    Anda dapat mengeksekusi salah satu dari pernyataan berikut untuk melihat versi revisi kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle):

    SHOW polar_version;

Ikhtisar

hypopg adalah ekstensi pihak ketiga sumber terbuka yang didukung oleh dan PolarDB for PostgreSQL (Kompatibel dengan Oracle). Indeks hipotetis yang dibuat oleh hypopg tidak ada di tabel sistem apa pun, tetapi disimpan dalam memori pribadi yang terhubung. Ekstensi hypopg memastikan bahwa indeks hipotetis digunakan oleh pernyataan EXPLAIN (tidak termasuk opsi ANALYZE) karena indeks tersebut tidak ada secara fisik. Indeks hipotetis tidak benar-benar ada atau mengonsumsi sumber daya seperti CPU dan disk.

Catatan

Ekstensi hypopg mendukung jenis indeks berikut:

  • btree: indeks Pohon-B.

  • brin: indeks rentang blok.

  • hash: indeks hash.

  • bloom: indeks bloom. Anda harus menginstal ekstensi bloom terlebih dahulu.

Penggunaan

  1. Instal ekstensi hypopg.

    1. Instal ekstensi hypopg.

      CREATE EXTENSION hypopg;
    2. Periksa apakah ekstensi hypopg telah diinstal.

      \dx hypopg

      Hasil contoh:

                        Daftar ekstensi yang diinstal
        Nama  | Versi | Skema |             Deskripsi
      --------+---------+--------+-------------------------------------
       hypopg | 1.3.1   | public | Indeks hipotetis untuk PostgreSQL
      (1 baris)
      Catatan
      • Hasil sebelumnya menunjukkan bahwa hypopg 1.3.1 telah diinstal.

      • Anda juga dapat mengeksekusi pernyataan SQL untuk menanyakan tabel pg_extension guna memeriksa apakah ekstensi hypopg telah diinstal. Contoh:

        SELECT * FROM pg_extension WHERE extname = 'hypopg';

        Hasil contoh:

        extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
        ---------+----------+--------------+----------------+------------+-----------+--------------
         hypopg  |       10 |         2200 | t              | 1.3.1      |           |
        (1 baris)
  2. Konfigurasikan parameter.

    Parameter

    Deskripsi

    hypopg.enabled

    Menentukan apakah akan mengaktifkan ekstensi hypopg. Nilai default: on. Nilai valid:

    • on

    • off

      Catatan

      Ketika ekstensi hypopg dinonaktifkan, indeks hipotetis tidak digunakan, tetapi indeks hipotetis yang ada tidak dihapus.

    hypopg.use_real_oids

    Menentukan apakah akan menggunakan pengenal objek (OID) nyata. Nilai default: off. Nilai valid:

    • off: tidak menggunakan OID nyata. Sebagai gantinya, ID dipilih dari rentang ID yang tidak digunakan. ID tersebut dicadangkan oleh database untuk digunakan di rilis mendatang. Ini tidak menciptakan masalah apa pun karena rentang ID yang tidak digunakan dihitung secara dinamis saat ekstensi hypopg pertama kali digunakan, dan dapat digunakan di server sekunder.

      Catatan

      Namun, ketika parameter ini diatur ke off, sekitar 2500 indeks hipotetis dapat ada secara total. Ketika jumlah maksimum tercapai, akan membutuhkan waktu sangat lama untuk membuat indeks hipotetis baru. Dalam hal ini, Anda harus memanggil fungsi hypopg_reset() untuk menyelesaikan masalah ini. Untuk informasi lebih lanjut, lihat Operasi indeks hipotetis.

    • on: menggunakan OID nyata. Parameter hypopg.use_real_oids digunakan untuk mencegah masalah di mana diperlukan waktu sangat lama untuk membuat indeks hipotetis baru ketika jumlah maksimum indeks hipotetis tercapai. hypopg meminta OID nyata. Ini memerlukan lebih banyak sumber daya kunci dan OID nyata tidak dapat digunakan di server sekunder. Namun, semua OID dapat digunakan. Untuk informasi lebih lanjut, lihat Operasi indeks hipotetis.

      Catatan

      Mengubah status parameter ini tidak mereset OID indeks hipotetis. OID nyata dan non-nyata dapat berkoeksistensi.

  3. Hapus ekstensi hypopg.

    DROP EXTENSION hypopg;
Catatan

Untuk informasi lebih lanjut, lihat Operasi indeks hipotetis.

Contoh

  1. Buat tabel dan sisipkan beberapa data. Tabel tidak memiliki indeks. Contoh:

    CREATE TABLE hypo (id integer, val text);
    INSERT INTO hypo SELECT i, 'line ' || i FROM generate_series(1, 100000) i;
    VACUUM ANALYZE hypo;

    Periksa apakah kueri dipercepat. Contoh:

    EXPLAIN SELECT val FROM hypo WHERE id = 1;

    Hasil contoh:

                           RENCANA KUERI
    --------------------------------------------------------
     Seq Scan on hypo  (biaya=0.00..1791.00 baris=1 lebar=10)
       Filter: (id = 1)
    (2 baris)
    Catatan

    Pemindaian berurutan digunakan dalam kueri sederhana karena tabel hypo tidak memiliki indeks.

  2. Buat indeks hipotetis pada tabel. Contoh:

    SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)') ;

    Hasil contoh:

    indexrelid |      indexname
    ------------+----------------------
          13925 | <13925>btree_hypo_id
    (1 baris)

    Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    13925

    OID indeks hipotetis.

    <13925>btree_hypo_id

    Nama indeks hipotetis.

    Catatan
    • Indeks B-tree sederhana pada kolom id mempercepat kueri ini.

    • Fungsi hypopg_create_index() menerima pernyataan CREATE INDEX standar apa pun (pernyataan lain yang dilewatkan ke fungsi diabaikan) dan membuat indeks hipotetis untuk setiap pernyataan.

    • OID dihasilkan secara dinamis. Dalam contoh ini, nilainya adalah 13925.

  3. Eksekusi pernyataan EXPLAIN untuk memeriksa apakah database menggunakan indeks. Contoh:

    EXPLAIN SELECT val FROM hypo WHERE id = 1;

    Hasil contoh:

                                         RENCANA KUERI
    ------------------------------------------------------------------------------------
     Index Scan using "<13925>btree_hypo_id" on hypo  (biaya=0.04..8.06 baris=1 lebar=10)
       Kondisi Indeks: (id = 1)
    (2 baris)
    Catatan

    Database menggunakan indeks.

  4. Eksekusi pernyataan EXPLAIN untuk memeriksa apakah database menggunakan indeks hipotetis saat pernyataan dieksekusi. Contoh:

    EXPLAIN ANALYZE SELECT val FROM hypo WHERE id = 1;

    Hasil contoh:

                                                RENCANA KUERI
    ---------------------------------------------------------------------------------------------------
     Seq Scan on hypo  (biaya=0.00..1791.00 baris=1 lebar=10) (aktual waktu=0.030..15.439 baris=1 loop=1)
       Filter: (id = 1)
       Baris Dihapus oleh Filter: 99999
     Waktu Perencanaan: 0.066 ms
     Waktu Eksekusi: 15.492 ms
    (5 baris)
    Catatan

    Periksa apakah database menggunakan indeks hipotetis saat pernyataan dieksekusi.

Operasi indeks hipotetis

Ekstensi hypopg menyediakan fitur dan tampilan yang berguna.

  • Tampilan hypopg_list_indexes: mencantumkan semua indeks hipotetis yang ada. Contoh:

    SELECT * FROM hypopg_list_indexes ;

    Hasil contoh:

     indexrelid |      index_name      | schema_name | table_name | am_name
    ------------+----------------------+-------------+------------+---------
          13925 | <13925>btree_hypo_id | public      | hypo       | btree
    (1 baris)
  • Fungsi hypopg(): mencantumkan semua indeks hipotetis yang ada dalam format yang sama dengan pg_index. Contoh:

    SELECT * FROM hypopg() ;

    Hasil contoh:

          indexname       | indexrelid | indrelid | innatts | indisunique | indkey | indcollation | indclass | indoption | indexprs | indpred | amid
    ----------------------+------------+----------+---------+-------------+--------+--------------+----------+-----------+----------+---------+------
     <13925>btree_hypo_id |      13925 |    16450 |       1 | f           | 1      | 0            | 1978     |           |          |         |  403
    (1 baris)
  • Fungsi hypopg_get_indexdef(oid): memperoleh pernyataan CREATE INDEX aktual menggunakan OID indeks hipotetis. Contoh:

    SELECT index_name, hypopg_get_indexdef(indexrelid) FROM hypopg_list_indexes ;

    Hasil contoh:

          index_name      |             hypopg_get_indexdef
    ----------------------+----------------------------------------------
     <13925>btree_hypo_id | CREATE INDEX ON public.hypo USING btree (id)
    (1 baris)
  • Fungsi hypopg_relation_size(oid): memperkirakan ukuran indeks hipotetis. Contoh:

    SELECT index_name, pg_size_pretty(hypopg_relation_size(indexrelid))
    FROM hypopg_list_indexes ;

    Hasil contoh:

          index_name      | pg_size_pretty
    ----------------------+----------------
     <13925>btree_hypo_id | 2544 kB
    (1 baris)
  • Fungsi hypopg_drop_index(oid): menghapus indeks hipotetis dengan OID tertentu. Contoh:

    SELECT hypopg_drop_index(13925);

    Hasil contoh:

     hypopg_drop_index
    -------------------
     t
    (1 baris)
  • Fungsi hypopg_reset(): menghapus semua indeks hipotetis. Contoh:

    SELECT hypopg_reset();

    Hasil contoh:

     hypopg_reset
    --------------
    
    (1 baris)