All Products
Search
Document Center

PolarDB:Aktifkan dan gunakan indeks penyimpanan kolom

Last Updated:Mar 29, 2026

PolarDB for PostgreSQL mendukung columnstore indexes (CSI) untuk mempercepat kueri analitis pada dataset besar. Bergantung pada versi kluster Anda, Anda dapat mengaktifkan CSI dengan menambahkan node read-only In-Memory Columnar Index (IMCI) khusus atau langsung menggunakan ekstensi bawaan polar_csi.

Prasyarat

Sebelum memulai, pastikan bahwa:

  • Kluster Anda menjalankan versi yang didukung: Untuk memeriksa versi mesin minor Anda, jalankan SHOW polardb_version; atau lihat di Konsol. Jika persyaratan versi belum terpenuhi, tingkatkan versi mesin minor terlebih dahulu.

    • PostgreSQL 16 (versi mesin minor 2.0.16.8.3.0 atau lebih baru)

    • PostgreSQL 14 (versi mesin minor 2.0.14.10.20.0 atau lebih baru)

  • Parameter wal_level diatur ke logical. Ini mengaktifkan dukungan replikasi logis dalam write-ahead log (WAL).

    Catatan

    Mengubah parameter wal_level di Konsol akan me-restart kluster. Rencanakan Jendela pemeliharaan Anda sesuai kebutuhan.

  • Setiap tabel yang diindeks memiliki primary key, dan kolom primary key tersebut disertakan dalam indeks penyimpanan kolom.

Batasan

  • Setiap tabel hanya mendukung satu indeks penyimpanan kolom.

  • Memodifikasi indeks penyimpanan kolom yang sudah ada tidak didukung. Untuk menambahkan kolom, hapus dan buat ulang indeks tersebut.

Aktifkan fitur indeks penyimpanan kolom

Pilih metode pengaktifan

Metode yang tersedia bergantung pada versi mesin minor Anda.

Untuk PostgreSQL 16 (2.0.16.9.8.0 atau lebih baru) atau PostgreSQL 14 (2.0.14.17.35.0 atau lebih baru)

Tersedia dua metode. Pilih berdasarkan kebutuhan isolasi workload dan biaya Anda:

Tambahkan node read-only IMCI (disarankan)Gunakan ekstensi pra-instal
SetupTambahkan node melalui KonsolTidak perlu setup; ekstensi sudah pra-instal
MemoryMesin penyimpanan kolom memiliki akses eksklusif ke seluruh memori nodeMesin penyimpanan kolom dibatasi hingga 25% dari memori node
Isolasi workloadWorkload transactional processing (TP) dan analytical processing (AP) berjalan di node terpisahWorkload TP dan AP berbagi node yang sama
BiayaDikenakan biaya tambahan, ditagih dengan tarif yang sama seperti node komputasi regulerTidak ada biaya tambahan

Untuk PostgreSQL 16 (2.0.16.8.3.0 hingga 2.0.16.9.8.0) atau PostgreSQL 14 (2.0.14.10.20.0 hingga 2.0.14.17.35.0)

Hanya tersedia satu metode: instal ekstensi polar_csi secara manual. Lihat Instal ekstensi polar_csi.

Tambahkan node read-only IMCI

Anda dapat menambahkan node read-only IMCI saat membeli kluster atau setelah kluster berjalan.

Kluster harus memiliki setidaknya satu node read-only sebelum Anda dapat menambahkan node IMCI. Kluster single-node tidak didukung.

Tambahkan saat pembelian

Di halaman pembelian PolarDB, atur jumlah node untuk parameter IMCI Read-Only Nodes.

image

Tambahkan di Konsol

  1. Login ke Konsol PolarDB dan buka wilayah tempat kluster Anda berada. Buka wizard Add/Remove Node dengan salah satu metode berikut:

    • Di halaman Clusters, klik Add/Remove Node di kolom Actions. image

    • Di halaman Basic Information kluster Anda, klik Add/Remove Node di bagian Database Nodes. image

  2. Pilih Add Read-only IMCI Node dan klik OK.

  3. Di halaman upgrade/downgrade, konfigurasi dan beli node: image

    1. Klik Add an IMCI Node dan pilih spesifikasi node.

    2. Pilih waktu switchover.

    3. (Opsional) Tinjau Ketentuan Layanan Produk dan Service Level Agreement.

    4. Klik Buy Now.

  4. Kembali ke halaman detail kluster dan tunggu hingga status node berubah menjadi Running.

    image

Instal ekstensi polar_csi

Akun database yang digunakan untuk menginstal ekstensi harus merupakan Akun istimewa.

Ekstensi polar_csi bersifat cakupan tingkat database. Untuk menggunakan CSI di beberapa database dalam satu kluster, instal ekstensi tersebut di setiap database secara terpisah.

Gunakan metode ini untuk kluster yang menjalankan PostgreSQL 16 (2.0.16.8.3.0 hingga 2.0.16.9.8.0) atau PostgreSQL 14 (2.0.14.10.20.0 hingga 2.0.14.17.35.0). Untuk versi yang lebih baru, ekstensi sudah pra-instal.

Instal dari Konsol

  1. Login ke Konsol PolarDB dan klik ID kluster untuk membuka halaman detail kluster.

  2. Di panel navigasi kiri, pilih Settings and Management > Extension Management.

  3. Di tab Extension Management, pilih Uninstalled Extensions.

  4. Di pojok kanan atas, pilih database target. Di baris polar_csi, klik Install. Di kotak dialog, pilih Database Account target dan klik OK.

    image.png

Instal dari command line

Sambungkan ke kluster database dan jalankan pernyataan berikut di database target:

CREATE EXTENSION polar_csi;

Buat indeks penyimpanan kolom

Sintaks

Gunakan klausa USING CSI untuk membuat indeks penyimpanan kolom. Sertakan CONCURRENTLY untuk menghindari pemblokiran operasi tulis selama pembuatan indeks.

-- Indeks kolom tertentu
CREATE INDEX [ CONCURRENTLY ] <index_name> ON <table_name> USING CSI(<column1>, <column2>, ...);

-- Indeks semua kolom
CREATE INDEX [ CONCURRENTLY ] <index_name> ON <table_name> USING CSI;

Parameter

ParameterDeskripsi
CONCURRENTLYOpsional. Membuat indeks tanpa memblokir operasi tulis pada tabel sumber. Gunakan ini untuk tabel online yang sudah ada. Lihat catatan di bawah untuk persyaratan versi.
<index_name>Nama indeks penyimpanan kolom.
<table_name>Nama tabel yang akan diindeks.
<column1>, <column2>, ...Kolom yang akan disertakan. Jika dihilangkan, semua kolom akan diindeks.
CONCURRENTLY memerlukan PostgreSQL 14 dengan versi mesin minor 2.0.14.13.27.0 atau lebih baru. Versi ini juga mengaktifkan fitur logical replication slot secara default. Pada versi lama, instal ulang ekstensi polar_csi atau hubungi dukungan. Selama pembuatan indeks secara konkuren, sebuah logical replication slot sementara dibuat dan dilepas secara otomatis setelah sinkronisasi data selesai.

Contoh

  1. Buat tabel uji dengan primary key:

    CREATE TABLE sales (sale_id int primary key, name CHAR(10), amount int);
  2. Buat indeks penyimpanan kolom. Pilih salah satu opsi berikut:

    TujuanPernyataan
    Indeks kolom tertentuCREATE INDEX idx_csi_sales ON sales USING CSI(sale_id, amount);
    Indeks semua kolomCREATE INDEX idx_csi_sales ON sales USING CSI;
    Indeks kolom tertentu tanpa memblokir tulisCREATE INDEX CONCURRENTLY idx_csi_sales ON sales USING CSI(sale_id, amount);
  3. Verifikasi bahwa indeks telah dibuat:

    SELECT * FROM pg_indexes WHERE tablename = 'sales';

Monitor progres pembuatan indeks

Untuk tabel besar, pembuatan indeks dapat memakan waktu cukup lama. Periksa progres dengan:

SELECT * FROM pg_stat_progress_create_index;

Kolom utama yang perlu diperhatikan:

KolomApa yang Dijelaskan
phaseFase saat ini dalam pembuatan indeks (misalnya, building index)
blocks_done / blocks_totalProgres melalui tabel
tuples_done / tuples_totalJumlah baris yang telah diproses

Ketika blocks_done sama dengan blocks_total dan tuples_done sama dengan tuples_total, indeks telah selesai.

Batalkan pembuatan indeks

Jika pembuatan indeks memakan waktu terlalu lama dan memengaruhi workload Anda, batalkan menggunakan process ID (pid) dari pg_stat_progress_create_index:

-- Batalkan secara graceful
SELECT pg_cancel_backend(<pid>);

-- Hentikan paksa
SELECT pg_terminate_backend(<pid>);

Periksa ukuran indeks

SELECT pg_size_pretty(pg_relation_size('idx_csi_sales'));

Konfigurasi sinkronisasi data real-time

Setelah Anda membuat indeks penyimpanan kolom, data baru yang ditulis ke tabel row-store secara otomatis disinkronkan ke indeks secara real-time. Tidak diperlukan konfigurasi tambahan.

Untuk menyesuaikan performa sinkronisasi dalam skenario tulis intensif (PostgreSQL 14, versi mesin minor 2.0.14.13.28.0 atau lebih baru), sesuaikan:

ParameterRentangDefaultEfek
polar_csi.update_interval0–3.600 detik3 detikInterval sinkronisasi. Meningkatkan nilai ini mengelompokkan transaksi kecil, meningkatkan throughput saat volume tulis tinggi.
polar_csi.update_batch_count1.024–4.294.967.295100.000Jumlah maksimum baris per Pembaruan batch. Meningkatkan nilai ini meningkatkan efisiensi pembaruan untuk transaksi besar.
Parameter ini hanya tersedia pada PostgreSQL 14 (versi mesin minor 2.0.14.13.28.0 atau lebih baru). PostgreSQL 16 tidak memiliki parameter setara.

Gunakan indeks penyimpanan kolom

Aktifkan routing kueri

Secara default, kueri tidak menggunakan indeks penyimpanan kolom. Aktifkan pada cakupan yang sesuai dengan kasus penggunaan Anda:

Cakupan global

(semua database, semua session)

Atur parameter polar_csi.enable_query ke on di Konsol.

Cakupan session

(hanya session saat ini)

SET polar_csi.enable_query = ON;

Cakupan per-kueri

(satu pernyataan)

Ini memerlukan ekstensi pg_hint_plan. Instal terlebih dahulu:

CREATE EXTENSION pg_hint_plan;

Kemudian gunakan komentar petunjuk dalam kueri Anda:

-- Arahkan satu kueri ke indeks penyimpanan kolom
/*+ SET(polar_csi.enable_query on) */ SELECT COUNT(*) FROM sales;

-- Arahkan satu kueri dan atur threshold biaya
/*+ SET(polar_csi.enable_query on) SET(polar_csi.cost_threshold 0) */ SELECT COUNT(*) FROM sales;

Kontrol threshold biaya

Parameter polar_csi.cost_threshold menentukan kapan mesin penyimpanan kolom digunakan. Jika estimasi biaya kueri berada di bawah ambang batas, mesin row-store menangani kueri; jika di atas, mesin penyimpanan kolom yang menangani.

SET polar_csi.cost_threshold = 0;
Mengatur polar_csi.cost_threshold ke 0 memaksa semua kueri menggunakan indeks penyimpanan kolom, termasuk pencarian sederhana yang mungkin lebih cepat di row store. Hindari pengaturan ini di lingkungan produksi. Sesuaikan ambang batas berdasarkan workload aktual Anda.

Verifikasi bahwa kueri menggunakan indeks penyimpanan kolom

Gunakan EXPLAIN untuk memeriksa Rencana kueri. Kueri yang menggunakan indeks penyimpanan kolom akan menampilkan CSI Executor dalam output rencana:

SHOW polar_csi.cost_threshold;
EXPLAIN SELECT COUNT(*) FROM sales;

Output yang diharapkan:

  QUERY PLAN
--------------
 CSI Executor
(1 row)

Jika Anda tidak melihat CSI Executor, lihat Pemecahan Masalah.

Konfigurasi konsistensi kueri

Indeks penyimpanan kolom mendukung dua Tingkat konsistensi:

TingkatNilai parameterPerilakuKapan digunakan
konsistensi akhir (default)polar_csi.forward_replay_wait = offKueri mungkin mengembalikan data yang sedikit usang jika proses penulisan sedang berlangsungWorkload dengan volume tulis tinggi di mana data near-real-time dapat diterima
konsistensi kuatpolar_csi.forward_replay_wait = onKueri menunggu data penyimpanan kolom tersinkronisasi dengan row store sebelum mengembalikan hasilKueri yang harus mencerminkan hasil penulisan terbaru
-- Aktifkan konsistensi kuat
SET polar_csi.forward_replay_wait = on;
Di bawah tekanan tulis tinggi, konsistensi kuat dapat menyebabkan kueri menunggu lebih lama. Aktifkan hanya jika kasus penggunaan Anda memerlukannya.

Hapus dan bangun ulang indeks penyimpanan kolom

Indeks penyimpanan kolom tidak dapat dimodifikasi langsung. Untuk menambah atau menghapus kolom, hapus indeks tersebut dan buat ulang, atau rebuild.

Hapus indeks penyimpanan kolom

DROP INDEX idx_csi_sales;

Rebuild indeks penyimpanan kolom

REINDEX INDEX idx_csi_sales;

Tuning performa

Percepat pembuatan indeks

ParameterRentangDefaultDeskripsi
polar_csi.memory_limit1–1.048.576 MB1.024 MBMemori yang tersedia untuk mesin penyimpanan kolom. Nilai yang lebih tinggi mempercepat pembuatan indeks. Pertahankan nilai ini pada atau di bawah 20% dari total memori kluster untuk menghindari error kehabisan memori (OOM).
polar_csi.flush_count2.048–20.480.000204.800Jumlah baris per commit batch. Meningkatkan nilai ini meningkatkan throughput tetapi memerlukan lebih banyak memori.

Percepat kueri

ParameterRentangDefaultDeskripsi
polar_csi.exec_parallel1–5122Tingkat paralelisme per kueri. Nilai yang lebih tinggi meningkatkan performa pada kueri yang memindai dataset besar. Pertahankan nilai ini pada atau di bawah jumlah core CPU pada node komputasi.
polar_csi.memory_limit1–1.048.576 MB1.024 MBMemori yang tersedia untuk mesin penyimpanan kolom. Pertahankan nilai ini pada atau di bawah 20% dari total memori kluster untuk menghindari error OOM.
polar_csi.cost_threshold1–1.000.000.00050.000 (PG14); 1.000 (PG16)Ambang batas biaya kueri untuk routing ke penyimpanan kolom. Nilai yang sangat tinggi dapat mencegah kueri kompleks menggunakan indeks; nilai yang sangat rendah dapat mengarahkan kueri sederhana ke penyimpanan kolom, mengurangi konkurensi. Sesuaikan berdasarkan workload Anda.
polar_csi.forward_replay_waiton | offoffTingkat konsistensi. off = konsistensi akhir; on = konsistensi kuat (kueri menunggu sinkronisasi).
Untuk PostgreSQL 14, nilai default polar_csi.cost_threshold diubah menjadi 50.000 pada versi mesin minor 2.0.14.13.28.0. Versi sebelumnya menggunakan nilai default 1.000.

Pemecahan Masalah

Kueri tidak menggunakan indeks penyimpanan kolom

Jika EXPLAIN tidak menampilkan CSI Executor, lakukan pemeriksaan berikut secara berurutan:

  1. Konfirmasi `polar_csi.enable_query` aktif.

    SHOW polar_csi.enable_query;

    Jika output adalah off, aktifkan:

    SET polar_csi.enable_query = ON;
  2. Periksa threshold biaya.

    SHOW polar_csi.cost_threshold;
    EXPLAIN SELECT COUNT(*) FROM sales;

    Bandingkan estimasi biaya kueri (dari output EXPLAIN) dengan ambang batas. Jika biaya lebih rendah dari ambang batas, mesin row-store menangani kueri sesuai desain. Turunkan ambang batas atau gunakan petunjuk per-kueri untuk memaksa routing ke penyimpanan kolom saat pengujian.

  3. Verifikasi bahwa indeks penyimpanan kolom mencakup kolom yang dikueri.

    SELECT * FROM pg_indexes WHERE tablename = 'sales';

    Jika indeks tidak mencakup kolom yang dirujuk dalam kueri, hapus dan buat ulang dengan kolom yang benar.

  4. Periksa fitur yang tidak didukung. Tinjau batasan untuk memastikan bahwa kueri dan konfigurasi tabel memenuhi semua persyaratan.