All Products
Search
Document Center

PolarDB:Aktifkan dan gunakan In-Memory Column Index (IMCI)

Last Updated:Jul 17, 2026

Anda dapat mengaktifkan dan menggunakan fitur In-Memory Column Index (IMCI) untuk PolarDB for PostgreSQL dengan dua cara: menambahkan node read-only IMCI atau menggunakan ekstensi pra-instal. Pilih metode yang paling sesuai dengan kebutuhan Anda.

Prasyarat

  • Versi kluster:

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

    • PostgreSQL 15 (versi mesin minor 2.0.15.15.7.0 atau lebih baru)

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

    • PostgreSQL 17 (versi mesin minor 2.0.17.7.5.0 atau lebih baru)

    Catatan

    Anda dapat melihat versi mesin minor di konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika versi mesin minor tidak memenuhi persyaratan, tingkatkan versi mesin minor.

  • Parameter wal_level harus diatur ke logical. Pengaturan ini menambahkan informasi yang diperlukan untuk logical decoding ke write-ahead logging (WAL).

    Catatan

    Anda dapat mengatur parameter wal_level di konsol. Mengubah parameter ini akan me-restart kluster. Rencanakan operasi bisnis Anda dengan tepat dan lakukan dengan hati-hati.

  • Tabel sumber harus memiliki primary key, dan kolom kunci primer harus disertakan saat Anda membuat indeks penyimpanan kolom. Disarankan menggunakan tipe data SERIAL atau BIGSERIAL untuk primary key karena secara signifikan meningkatkan efisiensi sinkronisasi data.

  • Anda hanya dapat membuat satu indeks penyimpanan kolom untuk setiap tabel.

Aktifkan fitur IMCI

Metode untuk mengaktifkan IMCI bervariasi tergantung pada versi mesin minor kluster PolarDB for PostgreSQL Anda:

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

Untuk kluster PolarDB for PostgreSQL dengan versi tersebut, tersedia dua metode. Tabel berikut menjelaskan perbedaannya.

Item perbandingan

[Direkomendasikan] Tambahkan node read-only IMCI

Langsung gunakan ekstensi indeks penyimpanan kolom pra-instal

Metode

Anda dapat menambahkan node read-only IMCI secara manual di konsol.

Tidak diperlukan tindakan apa pun. Anda dapat langsung menggunakan ekstensi tersebut.

Alokasi resource

Mesin penyimpanan kolom secara eksklusif menggunakan resource node, termasuk seluruh memori yang tersedia.

Mesin penyimpanan kolom dibatasi hingga 25% dari memori node. Sisa memori dialokasikan ke mesin penyimpanan baris.

Dampak bisnis

Workload pemrosesan transaksional (TP) dan pemrosesan analitis (AP) diisolasi pada node yang berbeda dan tidak saling memengaruhi.

Workload TP dan AP berjalan pada node yang sama dan dapat saling memengaruhi.

Biaya

Node read-only IMCI dikenai biaya tambahan dan ditagih dengan tarif yang sama seperti node komputasi reguler.

Tidak ada biaya tambahan.

Tambahkan node read-only IMCI

Ada dua cara untuk menambahkan node read-only IMCI:

Catatan

Kluster harus berisi minimal satu node read-only. Anda tidak dapat menambahkan node read-only IMCI ke kluster single-node.

Konsol

  1. Login ke Konsol PolarDB dan pilih wilayah kluster. Anda dapat membuka wizard Add/Remove Node dengan salah satu cara berikut:

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

    • Pada halaman Basic Information kluster target, klik Add/Remove Node di bagian Database Nodes.

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

  3. Pada halaman upgrade/downgrade kluster, tambahkan node read-only IMCI dan selesaikan pembayaran.

    1. Klik Add a Read-only IMCI Node dan pilih spesifikasi node.

    2. Pilih waktu switchover.

    3. (Opsional) Tinjau Ketentuan Layanan Produk dan Perjanjian Tingkat Layanan.

    4. Klik Buy Now.

  4. Setelah pembayaran selesai, kembali ke halaman detail kluster dan tunggu hingga node read-only IMCI ditambahkan. Node siap digunakan ketika statusnya berubah menjadi Running.

Saat pembelian

Pada halaman pembelian PolarDB, di bagian Nodes, tentukan jumlah IMCI Read-Only Nodes.

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 kluster PolarDB for PostgreSQL dengan versi tersebut, fitur IMCI disediakan sebagai ekstensi polar_csi. Untuk menggunakan IMCI, Anda harus terlebih dahulu membuat ekstensi tersebut di database yang diinginkan.

Catatan
  • Ekstensi polar_csi bersifat scoped pada level database. Untuk menggunakan IMCI di beberapa database dalam satu kluster, Anda harus membuat ekstensi polar_csi untuk setiap database.

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

Ada dua cara untuk menginstal ekstensi polar_csi:

Konsol

  1. Login ke Konsol PolarDB. Di panel navigasi sebelah kiri, klik Clusters. Pilih wilayah tempat kluster Anda berada, lalu klik ID kluster untuk membuka halaman detail kluster.

  2. Di panel navigasi sebelah kiri, pilih Settings and Management > Extension Management. Pada tab Extension Management, pilih Uninstalled Extensions.

  3. Di pojok kanan atas halaman, pilih database target. Pada baris ekstensi polar_csi, klik Install di kolom Actions. Di kotak dialog Install Extension, pilih Database Account target dan klik OK untuk menginstal ekstensi di database target.

CLI

Sambungkan ke kluster database dan jalankan pernyataan berikut di database tempat Anda memiliki izin yang cukup untuk membuat ekstensi polar_csi.

CREATE EXTENSION polar_csi;

Buat indeks penyimpanan kolom

1. Buat indeks penyimpanan kolom

Sintaks

-- Buat indeks untuk kolom tertentu
CREATE INDEX [ CONCURRENTLY ] csi_index_name ON table_name USING CSI(column1,column2,...);
-- Buat indeks untuk semua kolom
CREATE INDEX [ CONCURRENTLY ] csi_index_name ON table_name USING CSI;

Parameter

Parameter

Deskripsi

CONCURRENTLY

Opsi. Membuat indeks secara konkuren, yang menghindari pemblokiran operasi tulis pada tabel sumber. Metode ini ideal untuk membuat indeks pada tabel yang sedang aktif.

Catatan
  • Parameter ini hanya didukung untuk kluster yang menjalankan PostgreSQL 14 dengan versi mesin minor 2.0.14.13.27.0 atau lebih baru. Jika persyaratan versi mesin minor tidak terpenuhi, tingkatkan versi mesin minor.

  • CONCURRENTLY bergantung pada fitur logical replication slot, yang diaktifkan secara default di kluster dengan versi mesin minor 2.0.14.13.27.0 atau lebih baru. Jika Anda menggunakan versi yang lebih lama, Anda harus menginstal ulang ekstensi polar_csi atau hubungi kami untuk bantuan.

  • Saat Anda membuat indeks menggunakan CONCURRENTLY, sebuah logical replication slot sementara dibuat untuk mendukung operasi konkuren. Setelah sinkronisasi data selesai, slot tersebut dilepas secara otomatis.

csi_index_name

Nama kustom untuk indeks penyimpanan kolom.

table_name

Nama tabel tempat indeks penyimpanan kolom akan dibuat.

column1,column2,...

Kolom-kolom yang akan disertakan dalam indeks penyimpanan kolom. Jika tidak ada kolom yang ditentukan, indeks dibuat untuk semua kolom tabel.

Contoh

  1. Buat tabel contoh bernama sales.

    CREATE TABLE sales (sale_id int primary key, name CHAR(10), amount int);
  2. Karena satu tabel hanya dapat memiliki satu indeks penyimpanan kolom, jalankan salah satu pernyataan berikut.

    Kolom tertentu

    CREATE INDEX idx_csi_sales ON sales USING CSI(sale_id, amount);

    Semua kolom

    CREATE INDEX idx_csi_sales ON sales USING CSI;

    Mode Konkuren

    Membuat indeks secara konkuren tidak memblokir operasi tulis pada tabel sumber. Metode ini ideal untuk membuat indeks pada tabel yang sedang aktif.

    CREATE INDEX CONCURRENTLY idx_csi_sales ON sales USING CSI(sale_id, amount);

    Setelah indeks dibuat, Anda dapat menjalankan pernyataan berikut untuk melihat informasi indeks:

    SELECT * FROM pg_indexes WHERE tablename = 'sales';

2. Lihat progres pembuatan indeks

Membuat indeks penyimpanan kolom pada tabel besar bisa memakan waktu lama. Anda dapat memantau progresnya dengan kueri berikut. Anda juga dapat menyesuaikan parameter terkait untuk meningkatkan kecepatan pembuatan indeks.

SELECT * FROM pg_stat_progress_create_index;

3. (Opsional) Batalkan pembuatan indeks

Jika pembuatan indeks memakan waktu lama dan proses tersebut memengaruhi layanan Anda, Anda dapat menggunakan pg_cancel_backend atau pg_terminate_backend untuk membatalkan pembuatan indeks. Dapatkan pid yang diperlukan seperti yang dijelaskan dalam Langkah 2. Lihat progres pembuatan indeks.

SELECT pg_cancel_backend(pid);
SELECT pg_terminate_backend(pid);

4. Lihat ukuran indeks

Gunakan fungsi pg_relation_size untuk melihat ukuran indeks. Anda dapat menggabungkannya dengan fungsi pg_size_pretty untuk menampilkan ukuran dalam format yang lebih mudah dibaca.

SELECT * FROM pg_size_pretty(pg_relation_size('csi_index_name'));

Sebagai contoh, lihat storage space yang digunakan oleh indeks penyimpanan kolom yang sebelumnya dibuat.

SELECT * FROM pg_size_pretty(pg_relation_size('idx_csi_sales'));

5. (Opsional) Sinkronisasi data real-time

Kluster PolarDB for PostgreSQL tidak hanya mendukung pembuatan indeks penyimpanan kolom pada data historis tetapi juga secara otomatis menyinkronkan data baru dari tabel penyimpanan baris ke indeks penyimpanan kolom. Setelah Anda menggunakan pernyataan CREATE INDEX untuk membuat indeks penyimpanan kolom pada suatu tabel, data baru ditulis ke indeks penyimpanan kolom secara real-time, dan tidak diperlukan operasi tambahan.

IMCI menggunakan mekanisme replikasi logis PolarDB for PostgreSQL untuk menyinkronkan data dengan mendekode log WAL dan menerapkan perubahan ke mesin penyimpanan kolom. Dengan konfigurasi default, mekanisme ini dapat menangani throughput tulis sekitar 200.000 QPS (berdasarkan pengujian standar Sysbench oltp_insert).

  • Periksa latensi sinkronisasi data saat ini

    SELECT active_pid, database, slot_name, pg_size_pretty(pg_current_wal_lsn() - confirmed_flush_lsn) AS size FROM pg_replication_slots WHERE slot_name LIKE 'csi_sync_%';

    Jika size tetap di bawah 50 MB, data penyimpanan kolom biasanya diperbarui dalam hitungan detik.

  • Tingkatkan efisiensi sinkronisasi data

    Untuk memenuhi persyaratan real-time antara data penyimpanan baris dan penyimpanan kolom dalam skenario bisnis tertentu, Anda dapat menyesuaikan parameter polar_csi.update_interval dan polar_csi.update_batch_count untuk meningkatkan performa real-time indeks penyimpanan kolom.

Gunakan IMCI

1. Konfigurasikan parameter

Setelah membuat indeks penyimpanan kolom, Anda dapat menggunakan parameter berikut untuk mengontrol apakah kueri SQL menggunakan indeks penyimpanan kolom.

Parameter

Deskripsi

polar_csi.enable_query

Menentukan apakah kueri diizinkan menggunakan IMCI. Nilai yang valid:

  • off (default): Kueri tidak diizinkan menggunakan IMCI.

  • on: Kueri diizinkan menggunakan IMCI.

SET polar_csi.enable_query = on;

polar_csi.cost_threshold

Jika perkiraan biaya kueri melebihi ambang batas ini, pengoptimal memilih mesin penyimpanan kolom; jika tidak, mesin penyimpanan baris yang digunakan.

SET polar_csi.cost_threshold = 0;
Catatan

Jika Anda mengatur parameter ini ke 0, semua kueri akan memprioritaskan penggunaan indeks penyimpanan kolom. Hindari mengatur nilai ini ke 0 di lingkungan produksi. Sesuaikan nilai ini secara dinamis berdasarkan beban pada mesin penyimpanan baris dan penyimpanan kolom.

2. Konfigurasikan cakupan parameter

Cakupan global

Anda dapat menggunakan konsol untuk mengatur parameter polar_csi.enable_query ke on. Hal ini memungkinkan kueri di semua database mencoba menggunakan indeks penyimpanan kolom.

Cakupan session

Semua kueri dalam session mencoba menggunakan indeks penyimpanan kolom.

SET polar_csi.enable_query = ON;

Cakupan pernyataan

Satu kueri SQL dalam session dapat menggunakan indeks penyimpanan kolom dengan petunjuk.

Catatan

Karena fitur ini bergantung pada ekstensi pg_hint_plan, Anda harus menjalankan CREATE EXTENSION pg_hint_plan; di database target untuk menginstalnya.

  • Hanya atur polar_csi.enable_query.

    -- Izinkan kueri menggunakan indeks penyimpanan kolom
    /*+ SET (polar_csi.enable_query on) */ SELECT COUNT(*) FROM sales;
  • Atur polar_csi.enable_query dan polar_csi.cost_threshold.

    -- Izinkan kueri menggunakan indeks penyimpanan kolom dan atur ambang batas biaya kueri ke 0
    /*+SET (polar_csi.enable_query on) SET(polar_csi.cost_threshold 0)*/  SELECT COUNT(*) FROM sales;

3. Periksa penggunaan indeks

Anda dapat menggunakan EXPLAIN atau EXPLAIN ANALYZE untuk melihat rencana kueri. Jika rencana tersebut mencakup kata kunci CSI Executor, berarti kueri tersebut menggunakan indeks penyimpanan kolom.

EXPLAIN SELECT COUNT(*) FROM sales;

Hasil berikut dikembalikan:

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

4. (Opsional) Konfigurasikan konsistensi kueri IMCI

PolarDB for PostgreSQL menawarkan dua tingkat konsistensi kueri untuk memenuhi kebutuhan bisnis yang berbeda.

  • Konsistensi akhir (default): Cocok untuk workload intensif tulis dengan persyaratan data real-time yang rendah.

  • Konsistensi kuat: Memastikan hasil kueri dikembalikan hanya setelah data di penyimpanan kolom sepenuhnya konsisten dengan data di penyimpanan baris.

PolarDB for PostgreSQL biasanya memiliki latensi dalam orde detik. Namun, latensi data meningkat di bawah beban tulis yang tinggi. Tingkat konsistensi default adalah konsistensi akhir. Oleh karena itu, jika beban tulis tinggi dan kueri SQL menggunakan indeks penyimpanan kolom, kueri tersebut mungkin tidak mengambil data terbaru.

Untuk skenario bisnis yang memerlukan konsistensi kuat antara data penyimpanan baris dan penyimpanan kolom, Anda dapat mengatur parameter polar_csi.forward_replay_wait ke on. Hal ini mengaktifkan pembacaan konsistensi kuat. Saat kueri dijalankan, kueri tersebut menunggu hingga data indeks penyimpanan kolom konsisten dengan data penyimpanan baris sebelum dieksekusi.

Hapus dan bangun ulang indeks penyimpanan kolom

PolarDB for PostgreSQL tidak mendukung modifikasi indeks penyimpanan kolom. Untuk menambahkan kolom ke indeks, Anda harus menghapus dan membuatnya kembali.

Hapus indeks

Sintaks

DROP INDEX csi_index_name;

Parameter

Parameter

Deskripsi

csi_index_name

Nama indeks penyimpanan kolom yang akan dihapus.

Contoh

Hapus indeks penyimpanan kolom yang sebelumnya dibuat.

DROP INDEX idx_csi_sales; 

Bangun ulang indeks

Sintaks

REINDEX INDEX csi_index_name;

Parameter

Parameter

Deskripsi

csi_index_name

Nama indeks penyimpanan kolom yang akan dibangun ulang.

Contoh

Bangun ulang indeks penyimpanan kolom yang sebelumnya dibuat.

REINDEX INDEX idx_csi_sales; 

Tuning parameter IMCI

Tingkatkan kecepatan pembuatan indeks

Kecepatan pembuatan indeks bergantung pada parameter berikut:

Parameter

Rentang nilai

Default

Deskripsi

polar_csi.memory_limit

1–1048576

4096

Ukuran memori yang dapat digunakan oleh IMCI. Satuan: MB.

Ambang batas memori yang lebih besar memungkinkan pembuatan indeks lebih cepat. Sesuaikan nilai berdasarkan spesifikasi kluster. Kami menyarankan agar Anda tidak mengatur nilai lebih dari 25% dari memori kluster. Jika tidak, kesalahan kehabisan memori (OOM) dapat terjadi.

Catatan
  • PostgreSQL 14: Pada versi mesin minor 2.0.14.19.40.0 dan lebih baru, nilai default parameter ini diubah menjadi 4096. Pada versi sebelumnya, nilai default adalah 1024.

  • PostgreSQL 16: Pada versi mesin minor 2.0.16.10.12.0 dan lebih baru, nilai default parameter ini diubah menjadi 4096. Pada versi sebelumnya, nilai default adalah 1024.

polar_csi.flush_count

2048–20480000

204800

Jumlah baris yang akan dikomit dalam setiap batch saat indeks dibuat.

Menambah jumlah baris dapat meningkatkan efisiensi pembuatan, tetapi juga memerlukan lebih banyak memori.

Tingkatkan performa real-time

Dengan menyesuaikan parameter berikut, Anda dapat meningkatkan kecepatan transformasi baris-ke-kolom dan meningkatkan performa real-time data indeks penyimpanan kolom.

Parameter

Rentang nilai

Default

Deskripsi

polar_csi.update_interval

0–3600

1

Interval pembaruan berkala untuk performa real-time data baris-kolom. Satuan: detik.

Menambah interval pembaruan dapat menggabungkan transaksi kecil dengan jenis yang sama, sehingga meningkatkan efisiensi pembaruan data saat terdapat banyak transaksi.

Catatan
  • PostgreSQL 14: Pada versi mesin minor 2.0.14.13.28.0 dan lebih baru, parameter ini ditambahkan untuk meningkatkan performa real-time IMCI.

  • PostgreSQL 16: Pada versi mesin minor 2.0.16.10.12.0 dan lebih baru, parameter ini ditambahkan untuk meningkatkan performa real-time IMCI.

polar_csi.update_batch_count

1024–4294967295

100000

Ambang batas jumlah baris untuk diperbarui dalam satu batch.

Jumlah maksimum baris dalam satu transaksi pembaruan. Meningkatkan ambang batas ini meningkatkan efisiensi pembaruan data.

Catatan
  • PostgreSQL 14: Pada versi mesin minor 2.0.14.13.28.0 dan lebih baru, parameter ini ditambahkan untuk meningkatkan performa real-time IMCI.

  • PostgreSQL 16: Pada versi mesin minor 2.0.16.10.12.0 dan lebih baru, parameter ini ditambahkan untuk meningkatkan performa real-time IMCI.

Tingkatkan kecepatan kueri

Performa kueri terutama bergantung pada parameter berikut. Anda dapat menyesuaikan nilainya untuk meningkatkan performa kueri:

Parameter

Rentang nilai

Default

Deskripsi

polar_csi.max_parallel_workers

1–512

2

Tingkat paralelisme IMCI, yaitu resource CPU yang dapat digunakan oleh satu pernyataan SQL. Secara umum, tingkat paralelisme yang lebih tinggi memberikan performa yang lebih baik.

Nilai aktual bergantung pada spesifikasi resource kluster Anda. Sesuaikan nilai berdasarkan spesifikasi kluster. Kami menyarankan agar Anda tidak mengatur nilai lebih dari jumlah core CPU pada node komputasi.

Catatan

Parameter polar_csi.max_parallel_workers sebelumnya bernama polar_csi.exec_parallel pada versi kernel sebelumnya. Untuk versi kernel yang tidak mendukung polar_csi.max_parallel_workers, gunakan polar_csi.exec_parallel sebagai gantinya.

  • PostgreSQL 14:

    • Gunakan polar_csi.exec_parallel pada versi 2.0.14.20.42.0 dan sebelumnya.

    • Gunakan polar_csi.max_parallel_workers pada versi 2.0.14.20.43.0 dan lebih baru.

  • PostgreSQL 16:

    • Gunakan polar_csi.exec_parallel pada versi 2.0.16.11.15.0 dan sebelumnya.

    • Gunakan polar_csi.max_parallel_workers pada versi 2.0.16.13.16.0 dan lebih baru.

polar_csi.memory_limit

1–1048576

4096

Ukuran memori yang dapat digunakan oleh IMCI. Satuan: MB.

Ambang batas memori yang lebih besar memungkinkan pembuatan indeks lebih cepat. Sesuaikan nilai berdasarkan spesifikasi kluster. Kami menyarankan agar Anda tidak mengatur nilai lebih dari 25% dari memori kluster. Jika tidak, kesalahan kehabisan memori (OOM) dapat terjadi.

Catatan
  • PostgreSQL 14: Pada versi mesin minor 2.0.14.19.40.0 dan lebih baru, nilai default parameter ini diubah menjadi 4096. Pada versi sebelumnya, nilai default adalah 1024.

  • PostgreSQL 16: Pada versi mesin minor 2.0.16.10.12.0 dan lebih baru, nilai default parameter ini diubah menjadi 4096. Pada versi sebelumnya, nilai default adalah 1024.

polar_csi.cost_threshold

1–1000000000

50000

Saat biaya kueri kurang dari ambang batas ini, pernyataan kueri tidak menggunakan IMCI untuk akselerasi. Sesuaikan nilai aktual berdasarkan workload bisnis Anda.

  • Jika nilai terlalu besar, pernyataan SQL yang memakan waktu lama tidak dapat menggunakan IMCI, sehingga kueri menjadi lebih lambat.

  • Jika nilai terlalu kecil, pernyataan SQL sederhana menggunakan IMCI, yang mengurangi konkurensi sistem.

Catatan
  • Anda dapat menggunakan EXPLAIN atau EXPLAIN ANALYZE untuk mengkueri dan menganalisis biaya pernyataan SQL.

  • PostgreSQL 14: Pada versi mesin minor 2.0.14.13.28.0 dan lebih baru, nilai default parameter ini diubah menjadi 50000. Pada versi sebelumnya, nilai default adalah 1000.

  • PostgreSQL 16: Pada versi mesin minor 2.0.16.10.12.0 dan lebih baru, nilai default parameter ini diubah menjadi 50000. Pada versi sebelumnya, nilai default adalah 1000.

polar_csi.forward_replay_wait

on|off

off

Tingkat konsistensi kueri data IMCI dan IMCI. Nilai yang valid:

  • off: konsistensi akhir. Data IMCI mungkin tertinggal dari data penyimpanan baris.

  • on: konsistensi kuat. Kueri menunggu hingga data penyimpanan kolom diputar ulang ke data terbaru sebelum dieksekusi. Saat tekanan tulis tinggi, mengaktifkan parameter ini dapat menyebabkan waktu tunggu yang lama.