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.
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.
After you turn on this feature, it takes effect on new connections. Reconnect to the cluster after you enable the feature.
DMS menggunakan primary endpoint secara default. Jika Anda menggunakan DMS untuk terhubung ke kluster, Anda harus mengubah metode koneksi menjadi menggunakan titik akhir kluster.
Biaya eksekusi yang diperkirakan (jumlah baris yang dipindai) untuk distribusi permintaan otomatis adalah 50.000. Anda dapat menyesuaikan parameter ini berdasarkan kebutuhan bisnis aktual Anda.
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.
3. Tambahkan IMCI
Anda dapat menggunakan metode manual atau otomatis untuk menambahkan IMCI ke tabel bisnis Anda.
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 |
| |
Jalankan pernyataan DDL untuk membuat dan menghapus IMCI secara dinamis | |
|
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:

(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:
Prosedur tersimpan untuk memeriksa apakah IMCI dibuat untuk tabel dalam pernyataan SQL:
dbms_imci.check_columnar_index('<query_string>');.Prosedur tersimpan untuk mendapatkan pernyataan DDL yang digunakan untuk membuat IMCI:
dbms_imci.columnar_advise('<query_string>');dandbms_imci.columnar_advise_by_columns('<query_string>');.Prosedur tersimpan untuk mendapatkan pernyataan DDL secara massal yang digunakan untuk membuat IMCI:
dbms_imci.columnar_advise_begin();,dbms_imci.columnar_advise_show();, dandbms_imci.columnar_advise_end();.
FAQ
Untuk informasi lebih lanjut, lihat FAQ IMCI.
Penggunaan Lanjutan
Gunakan fitur berikut untuk mengoptimalkan penggunaan IMCI.
Fitur | Deskripsi |
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. | |
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. | |
Fitur ETL (Extract Transform Load) memungkinkan Anda menggunakan IMCI pada node baca-tulis (RW). Permintaan | |
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. | |
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: