全部产品
Search
文档中心

PolarDB:Petunjuk

更新时间:Jul 06, 2025

Indeks Kolom Dalam Memori (IMCI) menyediakan solusi sederhana untuk mempercepat pernyataan SQL yang kompleks dan memakan waktu dalam bisnis Anda. Lihat Memulai Cepat untuk mengonfigurasi kemampuan pemrosesan beban HTAP kluster Anda. Selain itu, lihat Penggunaan Lanjutan untuk menyesuaikan IMCI agar memenuhi kebutuhan bisnis spesifik.

Memulai Cepat

1. Tambahkan node IMCI hanya-baca

Masuk ke Konsol PolarDB, pilih wilayah tempat kluster Anda berada, dan temukan kluster target di daftar Clusters. Di kolom Actions, pilih Add/Remove Node untuk menambahkan node IMCI hanya-baca.image

Catatan
  • Jika Anda sudah menambahkan node IMCI hanya-baca saat membeli kluster, lewati langkah ini.

  • Kluster Anda harus memenuhi persyaratan versi untuk IMCI. Untuk informasi lebih lanjut, lihat Tambahkan Node IMCI Hanya-Baca.

2. Konfigurasikan distribusi permintaan antara node penyimpanan baris dan node IMCI

Anda dapat memilih distribusi permintaan otomatis atau manual untuk menggunakan IMCI.

  • Distribusi Permintaan Otomatis antara Node Penyimpanan Baris dan Node IMCI: Jika aplikasi Anda mengirim permintaan untuk mengakses layanan OLAP dan OLTP, Anda dapat mengonfigurasi distribusi otomatis permintaan baca berdasarkan biaya eksekusi yang diperkirakan (jumlah baris yang dipindai oleh permintaan) untuk merutekannya ke node IMCI hanya-baca atau node penyimpanan baris hanya-baca.

  • Distribusi Permintaan Manual antara Node Penyimpanan Baris dan Node IMCI: Jika aplikasi yang berbeda digunakan untuk mengirim permintaan untuk layanan OLAP dan OLTP, Anda dapat mengonfigurasi titik akhir kluster yang berbeda untuk aplikasi tersebut, lalu mengaitkan node penyimpanan baris dan node IMCI dengan titik akhir kluster yang berbeda untuk mendistribusikan permintaan.

Distribusi permintaan otomatis antara node penyimpanan baris dan node IMCI

Buka halaman detail kluster, di bagian Database Connections, atur Pemisahan Pemrosesan Transaksional/Analitik dari Cluster Endpoint menjadi On.image

Catatan

Distribusi permintaan manual antara node penyimpanan baris dan node IMCI

Buka halaman detail kluster, di bagian Database Connections, buat titik akhir kustom. Kluster hanya dapat berisi Read-only IMCI Nodes sebagai service nodes.image

3. Tambahkan IMCI

Anda dapat menggunakan metode manual atau otomatis untuk menambahkan IMCI ke tabel bisnis Anda.

Penting

Semua kolom yang terlibat dalam pernyataan SQL harus dicakup oleh IMCI untuk mempercepat kueri.

Tambahkan IMCI secara manual

IMCI menyediakan pernyataan DDL komprehensif untuk mendukung penambahan atau penghapusan IMCI untuk tabel bisnis Anda:

Sintaks DDL

Contoh

Buat IMCI saat membuat tabel

-- Tambahkan IMCI untuk kolom tertentu
CREATE TABLE <table_name>(
  <column_name_1> INT COMMENT 'COLUMNAR=1',
  <column_name_2> VARCHAR(100)
) ENGINE InnoDB;

-- Tambahkan IMCI untuk seluruh tabel
CREATE TABLE <table_name>(
  <column_name_1> INT,
  <column_name_2> VARCHAR(100)
) ENGINE InnoDB COMMENT 'COLUMNAR=1';

Jalankan pernyataan DDL untuk membuat dan menghapus IMCI secara dinamis

-- Tambahkan IMCI untuk kolom tertentu
ALTER TABLE <table_name> MODIFY COLUMN <column_name_1> INT COMMENT 'COLUMNAR=1';
               
-- Tambahkan IMCI untuk seluruh tabel
ALTER TABLE <table_name> COMMENT 'COLUMNAR=1';

Kelola IMCI tingkat tabel menggunakan pernyataan DDL

-- Tambahkan IMCI untuk seluruh tabel
CREATE COLUMNAR INDEX ON <db_name>.<table_name>;

-- Tambahkan IMCI untuk seluruh database
CREATE COLUMNAR INDEX FOR TABLES IN <db_name>;
Catatan
  • Saat menambahkan IMCI, Anda dapat mempertahankan komentar asli. Contohnya: ALTER TABLE <table_name> COMMENT 'COLUMNAR=1 <komentar asli>';.

  • Secara default, saat IMCI ditambahkan secara massal di tingkat database/tabel, komentar tabel dimodifikasi menjadi 'COLUMNAR=1 <komentar asli>'.

Tambahkan IMCI secara otomatis

Fitur Akselerasi Otomatis (AutoIndex) yang disediakan oleh IMCI dapat secara otomatis membuat IMCI berdasarkan pernyataan SQL lambat Anda, secara signifikan meningkatkan kecepatan eksekusi pernyataan SQL lambat tanpa memerlukan Anda untuk memahami secara mendalam setiap pernyataan SQL lambat untuk optimasi. Saat beban kerja aplikasi berubah, fitur akselerasi IMCI otomatis terus memantau dan menyesuaikan strategi IMCI untuk memastikan bahwa kluster PolarDB mempertahankan performa optimal.

Anda hanya perlu Enable fitur percepatan kueri berbasis IMCI otomatis di halaman detail kluster PolarDB:

image

(Opsional) 4. Periksa kemajuan pembuatan IMCI

Setelah menambahkan IMCI secara manual, Anda perlu melihat kecepatan eksekusi DDL dan kemajuan pembuatan IMCI. Setelah pembuatan IMCI selesai, kueri dapat dipercepat.

SELECT * FROM INFORMATION_SCHEMA.IMCI_ASYNC_DDL_STATS;

Sebagai contoh, Anda dapat memastikan apakah IMCI telah dibuat dengan memeriksa apakah STATUS adalah Safe to read.

+-------------+------------+---------------------+---------------------+---------------------+--------------+------------------+-----------------+-------------+-------------+-------------+------------+--------------+-----------+-------------------+-----------------+
| SCHEMA_NAME | TABLE_NAME | CREATED_AT          | STARTED_AT          | FINISHED_AT         | STATUS       | APPROXIMATE_ROWS | SCANNED_ROWS    | SCAN_SECOND | SORT_ROUNDS | SORT_SECOND | BUILD_ROWS | BUILD_SECOND | AVG_SPEED | SPEED_LAST_SECOND | ESTIMATE_SECOND |
+-------------+------------+---------------------+---------------------+---------------------+--------------+------------------+-----------------+-------------+-------------+-------------+------------+--------------+-----------+-------------------+-----------------+
| tpch        | lineitem   | 2024-10-21 13:44:02 | 2024-10-21 13:44:02 | 2024-10-21 13:50:11 | Safe to read | 590446240        | 600037902(100%) | 369         | 0           | 0           | 0(0%)      | 0            | 1625058   | 0                 | 0               |
+-------------+------------+---------------------+---------------------+---------------------+--------------+------------------+-----------------+-------------+-------------+-------------+------------+--------------+-----------+-------------------+-----------------+
1 row in set, 1 warning (0.00 sec)

(Opsional) 5. Periksa apakah pernyataan SQL menggunakan IMCI

Rencana eksekusi IMCI ditampilkan dalam format pohon horizontal, yang sangat berbeda dari format output rencana eksekusi penyimpanan baris. Anda dapat menggunakan pernyataan EXPLAIN untuk menentukan apakah akan menggunakan IMCI untuk mempercepat kueri SQL. Lihat contoh berikut:

Rencana eksekusi IMCI (format pohon horizontal)

+----+----------------------------+----------+--------+--------+-----------------------------------------------------------------------------+
| ID | Operator                   | Name     | E-Rows | E-Cost | Extra Info                                                                  |
+----+----------------------------+----------+--------+--------+-----------------------------------------------------------------------------+
|  1 | Select Statement           |          |        |        | IMCI Execution Plan (max_dop = 4, max_query_mem = 858993459)                |
|  2 | └─Sort                     |          |        |        | Sort Key: revenue DESC,o_orderdate ASC                                      |
|  3 |   └─Hash Groupby           |          |        |        | Group Key: (lineitem.L_ORDERKEY, orders.O_ORDERDATE, orders.O_SHIPPRIORITY) |
|  4 |     └─Hash Join            |          |        |        | Join Cond: orders.O_ORDERKEY = lineitem.L_ORDERKEY                          |
|  5 |       ├─Hash Join          |          |        |        | Join Cond: customer.C_CUSTKEY = orders.O_CUSTKEY                            |
|  6 |       │ ├─Table Scan       | customer |        |        | Cond: (C_MKTSEGMENT = "BUILDING")                                           |
|  7 |       │ └─Table Scan       | orders   |        |        | Cond: (O_ORDERDATE < 03/24/1995)                                            |
|  8 |       └─Table Scan         | lineitem |        |        | Cond: (L_SHIPDATE > 03/24/1995)                                             |
+----+----------------------------+----------+--------+--------+-----------------------------------------------------------------------------+
8 rows in set (0.01 sec)

Rencana eksekusi penyimpanan baris

+----+-------------+----------+------------+------+--------------------+------------+---------+-----------------------------+--------+----------+----------------------------------------------+
| id | select_type | table    | partitions | type | possible_keys      | key        | key_len | ref                         | rows   | filtered | Extra                                        |
+----+-------------+----------+------------+------+--------------------+------------+---------+-----------------------------+--------+----------+----------------------------------------------+
|  1 | SIMPLE      | customer | NULL       | ALL  | PRIMARY            | NULL       | NULL    | NULL                        | 147630 |    10.00 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | orders   | NULL       | ref  | PRIMARY,ORDERS_FK1 | ORDERS_FK1 | 4       | tpch100g.customer.C_CUSTKEY |     14 |    33.33 | Using where                                  |
|  1 | SIMPLE      | lineitem | NULL       | ref  | PRIMARY            | PRIMARY    | 4       | tpch100g.orders.O_ORDERKEY  |      4 |    33.33 | Using where                                  |
+----+-------------+----------+------------+------+--------------------+------------+---------+-----------------------------+--------+----------+----------------------------------------------+
3 rows in set, 1 warning (0.00 sec)

Alat bantu

Saat menggunakan IMCI untuk menanyakan pernyataan SQL yang kompleks, Anda perlu memeriksa apakah semua kolom dalam pernyataan SQL dicakup oleh IMCI. Jika Anda menemukan kolom yang tidak dicakup oleh IMCI, Anda dapat mendapatkan pernyataan DDL yang digunakan untuk membuat IMCI, atau mendapatkan pernyataan DDL secara massal yang digunakan untuk membuat IMCI. Setelah menjalankan pernyataan DDL yang diperoleh, pastikan semua kolom dalam pernyataan SQL dicakup oleh IMCI untuk akselerasi kueri.

Prosedur tersimpan bawaan dalam kluster PolarDB adalah sebagai berikut:

FAQ

Mengapa kueri SQL tidak menggunakan IMCI untuk akselerasi?

Kueri SQL menggunakan IMCI untuk akselerasi hanya jika kondisi berikut terpenuhi: Node IMCI hanya-baca ditambahkan ke kluster, IMCI dibuat pada tabel yang terlibat dalam kueri SQL, biaya eksekusi yang diperkirakan dari kueri SQL melebihi ambang batas yang ditentukan, dan kueri SQL dirutekan ke node IMCI hanya-baca. Jika kueri SQL tidak menggunakan IMCI, Anda dapat melakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Periksa apakah kueri SQL dirutekan ke node IMCI hanya-baca.

    • Periksa apakah node IMCI hanya-baca termasuk dalam selected nodes dari titik akhir kluster.

    • Periksa apakah kueri SQL dirutekan ke node IMCI hanya-baca dengan menggunakan fitur SQL Explorer. Untuk informasi lebih lanjut, lihat SQL Explorer.

    PolarProxy merutekan kueri SQL ke node IMCI hanya-baca hanya jika kondisi berikut terpenuhi: Kueri SQL mengakses kluster menggunakan cluster endpoint, Transactional/Analytical Processing Splitting diaktifkan untuk titik akhir kluster, dan biaya eksekusi yang diperkirakan dari kueri SQL melebihi ambang batas yang ditentukan oleh parameter loose_imci_ap_threshold atau loose_cost_threshold_for_imci. Anda dapat menambahkan petunjuk /*FORCE_IMCI_NODES*/ sebelum kata kunci SELECT dari pernyataan SQL untuk memaksa merutekan pernyataan SQL ke node IMCI hanya-baca. Untuk informasi lebih lanjut, lihat Tentukan Ambang Batas untuk Distribusi Permintaan Otomatis. Contoh:

    Parameter loose_imci_ap_threshold digunakan sebagai pengganti parameter loose_cost_threshold_for_imci di mesin database yang versi minor-nya 8.0.1.1.39 atau lebih baru, atau 8.0.2.2.23 atau lebih baru.
    /*FORCE_IMCI_NODES*/EXPLAIN SELECT COUNT(*) FROM t1 WHERE t1.a > 1;
    Anda dapat membuat titik akhir kustom dan mengaitkan titik akhir dengan node IMCI hanya-baca. Ini memastikan bahwa kueri SQL dirutekan ke node IMCI hanya-baca untuk dieksekusi. Untuk informasi lebih lanjut, lihat Distribusi Permintaan Berbasis HTAP antara Node Penyimpanan Baris dan Node IMCI.
  2. Periksa apakah biaya eksekusi yang diperkirakan dari kueri SQL lebih tinggi dari ambang batas yang ditentukan.

    Di node IMCI, optimizer memperkirakan biaya eksekusi dari kueri SQL. Jika biaya eksekusi yang diperkirakan dari kueri SQL lebih tinggi dari ambang batas yang ditentukan oleh parameter loose_imci_ap_threshold atau cost_threshold_for_imci, optimizer menggunakan IMCI dalam kueri. Sebaliknya, optimizer menggunakan indeks baris asli dalam kueri.

    Jika pernyataan EXPLAIN menunjukkan bahwa rencana eksekusi masih tidak menggunakan IMCI setelah kueri SQL dirutekan ke node IMCI hanya-baca, bandingkan biaya eksekusi yang diperkirakan dengan ambang batas yang ditentukan untuk menentukan apakah IMCI tidak digunakan karena biaya eksekusi yang diperkirakan terlalu kecil. Anda dapat menanyakan nilai Last_query_cost untuk mendapatkan biaya eksekusi yang diperkirakan dari pernyataan SQL sebelumnya. Contoh:

    -- Jalankan pernyataan EXPLAIN untuk melihat rencana eksekusi kueri SQL.
    EXPLAIN SELECT * FROM t1;
    -- Dapatkan biaya eksekusi yang diperkirakan dari kueri SQL sebelumnya.
    SHOW STATUS LIKE 'Last_query_cost';
    Jika Anda menggunakan titik akhir kluster untuk terhubung ke kluster, kami sarankan Anda menambahkan petunjuk /*ROUTE_TO_LAST_USED*/ sebelum pernyataan SHOW STATUS LIKE 'Last_query_cost' untuk memastikan bahwa biaya eksekusi yang diperkirakan dari pernyataan sebelumnya dapat ditemukan di node yang benar. Contoh: /*ROUTE_TO_LAST_USED*/SHOW STATUS LIKE 'Last_query_cost';

    Jika biaya eksekusi yang diperkirakan dari kueri SQL kurang dari ambang batas yang ditentukan, Anda dapat menyesuaikan nilai loose_imci_ap_threshold atau loose_cost_threshold_for_imci. Anda juga dapat menggunakan HINT untuk menyesuaikan ambang batas biaya eksekusi untuk satu kueri SQL. Contoh:

    /*FORCE_IMCI_NODES*/EXPLAIN SELECT /*+ SET_VAR(cost_threshold_for_imci=0) */ COUNT(*) FROM t1 WHERE t1.a > 1;
  3. Periksa apakah tabel atau kolom yang terlibat dalam kueri SQL sepenuhnya termasuk dalam IMCI.

    Anda dapat memanggil prosedur tersimpan bawaan dbms_imci.check_columnar_index('<query_string>') untuk memeriksa apakah IMCI dibuat untuk tabel atau kolom dalam pernyataan SQL. Untuk informasi lebih lanjut, lihat Periksa apakah IMCI dibuat untuk tabel dalam pernyataan SQL. Contoh:

    CALL dbms_imci.check_columnar_index('SELECT COUNT(*) FROM t1 WHERE t1.a > 1');

    Jika tabel atau kolom yang terlibat dalam kueri SQL tidak sepenuhnya termasuk dalam IMCI, prosedur tersimpan mengembalikan tabel dan kolom yang tidak termasuk dalam IMCI. Dalam hal ini, Anda harus membuat IMCI untuk tabel dan kolom yang dikembalikan. Jika tabel atau kolom yang terlibat dalam kueri SQL sepenuhnya termasuk dalam IMCI, prosedur tersimpan mengembalikan set hasil kosong.

  4. Periksa apakah kueri SQL mendukung IMCI.

    Lihat batasan penggunaan IMCI untuk menentukan apakah kueri SQL mendukung IMCI. Untuk informasi lebih lanjut, lihat Batasan Penggunaan IMCI.

Jika kueri SQL masih tidak menggunakan IMCI, lihat Petunjuk atau hubungi kami untuk bantuan.

Untuk informasi lebih lanjut, lihat FAQ IMCI.

Penggunaan Lanjutan

Gunakan fitur berikut untuk mengoptimalkan penggunaan IMCI.

Fitur

Deskripsi

Konfigurasikan Kunci Sortir untuk IMCI

Satuan organisasi dasar data IMCI adalah grup baris. Di setiap grup baris, setiap kolom dikemas ke dalam blok data kolom. Blok data kolom dibangun secara paralel berdasarkan urutan kunci utama dari data baris mentah, yang menghasilkan keadaan keseluruhan tidak berurutan. Untuk meningkatkan performa kueri, Anda dapat mengonfigurasi kunci sortir untuk mengurutkan data blok data kolom.

Analisis Data JSON secara Efisien

IMCI mengintegrasikan serangkaian fitur terkait seperti Penyimpanan Berorientasi Kolom untuk Data Berformat JSON, Kolom Virtual, DDL Instan, dan Jumlah Maksimum Kolom dalam Tabel yang Diperluas untuk menangani skenario analisis data terstruktur dan semi-terstruktur dalam jumlah besar.

Gunakan IMCI untuk Mempercepat ETL

Fitur ETL (Extract Transform Load) memungkinkan Anda menggunakan IMCI pada node baca-tulis (RW). Permintaan SELECT dalam pernyataan SQL pada node baca-tulis (RW) dikirim ke node IMCI hanya-baca dan dipercepat menggunakan IMCI. Setelah membaca data, sistem mentransfer data kembali ke node baca-tulis (RW) melalui jaringan internal dan menuliskannya ke tabel target.

Aktifkan Fitur Serverless pada Node IMCI Hanya-Baca

Fitur Serverless secara otomatis menskalakan kluster berdasarkan beban kerja bisnis. Kluster secara otomatis ditingkatkan selama jam sibuk untuk menangani lonjakan lalu lintas. Selama jam sepi, kluster secara otomatis diturunkan untuk mengurangi biaya.

Gunakan Rencana Hibrida untuk Mempercepat Kueri Tabel Lebar

Rencana Hibrida mengacu pada metode kueri yang menggunakan indeks kolom dan indeks baris dalam pernyataan kueri yang sama. Rencana Hibrida secara signifikan meningkatkan kecepatan kueri tabel lebar. Dalam rencana eksekusi, pernyataan yang cocok untuk IMCI dieksekusi melalui IMCI untuk mendapatkan hasil perantara yang hanya berisi informasi kunci utama. Terakhir, informasi kolom yang diperlukan di-query dan di-output dengan menggabungkan kunci utama dengan indeks utama InnoDB.

Gunakan MPP Multi-Node untuk Mempercepat Analisis Data Massal

Untuk kueri kompleks pada data massal, satu node IMCI hanya-baca mungkin tidak lagi memenuhi persyaratan performa. Anda dapat menggunakan pemrosesan paralel multi-node untuk akselerasi kueri.

Informasi terkait

Jika Anda tertarik dengan cara kerja IMCI, Anda dapat merujuk dokumen berikut untuk pemahaman yang lebih mendalam: