Jika aplikasi Anda mengirimkan permintaan untuk mengakses layanan OLAP dan OLTP, serta ingin mendistribusikan permintaan secara otomatis berdasarkan biaya eksekusi, konfigurasikan mode baca/tulis titik akhir kluster dan aktifkan fitur distribusi permintaan otomatis. Saat fitur ini diaktifkan, proksi database mendistribusikan permintaan berdasarkan jumlah baris yang dipindai untuk mempercepat pemrosesan. Jika jumlah baris yang diperkirakan dipindai oleh permintaan SQL melebihi ambang batas, permintaan tersebut didistribusikan ke node penyimpanan kolom. Jika tidak, permintaan akan dikirim ke node penyimpanan baris atau node utama.
Solusi distribusi otomatis
Proksi database dari PolarDB for MySQL menentukan apakah permintaan SQL akan didistribusikan ke node penyimpanan kolom berdasarkan apakah estimated number of rows scanned melebihi ambang batas tertentu. Ini memaksimalkan performa node penyimpanan baris dan kolom.
Aturan Distribusi Permintaan:
Layanan OLTP mencakup permintaan baca dan tulis dalam sebagian besar kasus. Semua permintaan tulis diproses oleh node utama, sementara permintaan baca diproses oleh node penyimpanan baris hanya-baca atau node utama.
Layanan OLAP mencakup hanya permintaan baca dalam sebagian besar kasus. Semua permintaan baca diproses oleh node penyimpanan kolom hanya-baca.
Solusi Distribusi Permintaan Otomatis:
Distribusi permintaan antara node utama dan node penyimpanan kolom hanya-baca: Node utama dapat memproses permintaan baca OLTP karena juga beroperasi dalam mode penyimpanan baris. Dalam solusi ini, permintaan tulis dan permintaan baca OLTP didistribusikan ke node utama, sementara permintaan baca OLAP didistribusikan ke node penyimpanan kolom hanya-baca.
Distribusi permintaan antara node penyimpanan baris hanya-baca dan node penyimpanan kolom hanya-baca: Dalam solusi ini, permintaan tulis didistribusikan ke node utama, permintaan baca OLTP didistribusikan ke node penyimpanan baris hanya-baca atau node utama, dan permintaan baca OLAP didistribusikan ke node penyimpanan kolom hanya-baca.

Batasan
Kluster Anda harus memiliki setidaknya satu node penyimpanan kolom hanya-baca dan satu node penyimpanan baris.
Langkah 1: Aktifkan distribusi permintaan otomatis di antara node penyimpanan kolom dan baris
Masuk ke PolarDB console. Di pojok kiri atas, pilih region tempat kluster berada. Klik Clusters di panel navigasi kiri, temukan kluster, dan klik ID-nya.
Di bagian PolarProxy halaman Basic Information, temukan titik akhir kluster dan klik Modify di sisi kanan titik akhir kluster.
Pilih mode Read/Write yang sesuai.
Mode baca/tulis titik akhir kluster disetel ke Read/Write (Automatic Read/Write Splitting).
Mode baca/tulis titik akhir kluster diatur ke Read-only, dengan kebijakan penyeimbangan beban disetel ke Active requests-based load balancing.
Di bagian Node Settings, pilih node utama, node penyimpanan baris, dan node penyimpanan kolom hanya-baca yang digunakan untuk memproses permintaan. Di bagian HTAP Optimization, aktifkan Transactional/Analytical Processing Splitting. Klik OK.
CatatanAnda harus memilih setidaknya satu node penyimpanan kolom read-only di Node Settings.
Setelah mengaktifkan distribusi permintaan otomatis di antara node penyimpanan kolom dan baris, tambahkan IMCI untuk mengimplementasikan fitur tersebut.
Contoh 1: Pada gambar berikut, satu node utama, satu node penyimpanan baris hanya-baca, dan dua node penyimpanan kolom hanya-baca dipilih. Sistem mendistribusikan kueri berdasarkan kebijakan berikut:
Permintaan tulis didistribusikan ke node utama.
Permintaan baca OLAP didistribusikan ke node penyimpanan kolom hanya-baca.
Permintaan baca OLTP didistribusikan ke node penyimpanan baris hanya-baca. Ketika Node Utama Menerima Permintaan Baca di bagian Pengaturan SLB disetel ke Ya, permintaan baca OLTP mungkin juga didistribusikan ke node utama.

Contoh 2: Pada gambar berikut, satu node utama dan satu node penyimpanan kolom hanya-baca dipilih. Saat fitur distribusi permintaan otomatis diaktifkan, permintaan tulis dan permintaan baca OLTP didistribusikan ke node utama, sementara permintaan baca OLAP didistribusikan ke node penyimpanan kolom hanya-baca.
CatatanDalam mode Read/Write (Automatic Read/Write Splitting), semua permintaan tulis hanya didistribusikan ke node utama, terlepas dari apakah node utama dipilih di bagian Pengaturan Node.
Langkah 2: Tentukan ambang batas untuk distribusi permintaan otomatis
Setelah mengaktifkan distribusi permintaan otomatis, tentukan ambang batas untuk the number of scanned rows for an SQL statement. Setelah ambang batas ditentukan, proksi database menentukan ke node mana permintaan didistribusikan berdasarkan ambang batas ini. Jika jumlah baris yang diperkirakan dipindai oleh permintaan SQL melebihi ambang batas, permintaan tersebut didistribusikan ke node penyimpanan kolom. Jika tidak, permintaan tersebut didistribusikan ke node penyimpanan baris atau node utama.
Parameter dalam tabel berikut menentukan ambang batas terkait dengan biaya eksekusi. Di halaman Parameters kluster, Anda dapat memodifikasi nilai parameter tersebut.
Parameter | Deskripsi |
loose_imci_ap_threshold | Ambang batas yang menentukan apakah pernyataan SQL didistribusikan ke node penyimpanan kolom. Nilai default: 50000. Catatan Sebagai contoh, ketika nilai default digunakan, jika jumlah baris yang dipindai oleh pernyataan SQL diperkirakan lebih besar dari 50.000, pernyataan tersebut didistribusikan ke node penyimpanan kolom. Penting Parameter |
loose_cost_threshold_for_imci | Ambang batas yang menentukan apakah pernyataan SQL dieksekusi menggunakan rencana eksekusi penyimpanan kolom di node penyimpanan kolom. Nilai default: 50000. Catatan Sebagai contoh, ketika nilai default digunakan, jika jumlah baris yang dipindai oleh pernyataan SQL diperkirakan lebih besar dari 50.000, pernyataan tersebut dieksekusi menggunakan rencana eksekusi penyimpanan kolom. Jika tidak, rencana eksekusi penyimpanan baris digunakan. |
Anda dapat menjalankan pernyataan SHOW STATUS LIKE 'Last_query_cost' untuk menanyakan biaya eksekusi yang diperkirakan dari pernyataan SQL terakhir dan menggunakan nilai yang dihasilkan untuk memodifikasi nilai parameter.
Jika Anda menggunakan titik akhir kluster untuk terhubung ke database, tambahkan petunjuk /* ROUTE_TO_LAST_USED*/ sebelum pernyataan SHOW STATUS LIKE 'Last_query_cost' untuk memastikan bahwa biaya eksekusi yang diperkirakan dari pernyataan SQL terakhir ditanyakan pada node yang diharapkan. Contoh:
/*ROUTE_TO_LAST_USED*/SHOW STATUS LIKE 'Last_query_cost';Contoh:
SHOW STATUS LIKE 'Last_query_cost';Hasil berikut dikembalikan:
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Last_query_cost | 2 |
+----------------------+-------+
1 row in set (0.01 sec)Hasil kueri menunjukkan bahwa biaya eksekusi pernyataan SQL adalah 2.
Untuk mendistribusikan pernyataan SQL ke node penyimpanan kolom dan mengeksekusinya menggunakan rencana eksekusi penyimpanan kolom, buat konfigurasi berikut:
PolarDB for MySQL 8.0.1.1.38 dan 8.0.2.2.22 atau lebih lama
Setel parameter loose_imci_ap_threshold dan loose_cost_threshold_for_imci menjadi 1.
PolarDB for MySQL versi 8.0.1.x yang sama dengan atau lebih baru dari 8.0.1.1.39 dan versi 8.0.2.x yang sama dengan atau lebih baru dari 8.0.2.2.23.
Setel parameter loose_cost_threshold_for_imci menjadi 1.
Gunakan hints untuk memaksa mengeksekusi permintaan menggunakan rencana eksekusi penyimpanan kolom atau rencana eksekusi penyimpanan baris
Jika hasil distribusi permintaan otomatis tidak sesuai dengan harapan, gunakan hints untuk memaksa mengeksekusi permintaan menggunakan rencana eksekusi penyimpanan kolom atau rencana eksekusi penyimpanan baris.
hinthanya berlaku untuk pernyataan SQL tempat ia berada. Petunjuk tidak berlaku untuk pernyataan lain dalam koneksi yang sama atau pernyataan dalam koneksi lain.Jika Anda menjalankan pernyataan bersama dengan
hintsmenggunakan MySQL 5.7.7 atau lebih lama, tambahkan opsi--commentssaat terhubung ke mesin database. Jalankan perintahmysql --versionuntuk memeriksa versi klien MySQL Anda.
Paksa Jalankan Pernyataan Menggunakan Rencana Eksekusi Penyimpanan Kolom
PolarDB for MySQL 8.0.1.1.38 dan 8.0.2.2.22 atau lebih lama
Jika Anda ingin mendistribusikan permintaan ke node penyimpanan kolom secara paksa tanpa mempertimbangkan nilai loose_imci_ap_threshold, Anda dapat menambahkan petunjuk
/* FORCE_IMCI_NODES */sebelum kata kunci SQL. Berikut adalah contoh pernyataan:/*FORCE_IMCI_NODES*/EXPLAIN SELECT COUNT(*) FROM t1 WHERE t1.a > 1;Untuk memaksa mengeksekusi pernyataan menggunakan rencana eksekusi penyimpanan kolom tanpa memedulikan nilai parameter loose_cost_threshold_for_imci, ubah nilai ambang batas menjadi 0 dengan menambahkan petunjuk /*+SET_VAR(cost_threshold_for_imci=0)*/ ke pernyataan.
Contoh pernyataan:/*FORCE_IMCI_NODES*/EXPLAIN SELECT /*+ SET_VAR(cost_threshold_for_imci=0) */ COUNT(*) FROM t1 WHERE t1.a > 1;PolarDB MySQL versi 8.0.1.x yang sama dengan atau lebih baru dari 8.0.1.1.39 dan versi 8.0.2.x yang sama dengan atau lebih baru dari 8.0.2.2.23.
Gunakan hints untuk menyetel parameter loose_cost_threshold_for_imci menjadi 0.
EXPLAIN SELECT /*+ SET_VAR(cost_threshold_for_imci=0) */ COUNT(*) FROM t1 WHERE t1.a > 1;
CatatanSaat menggunakan
/*+SET_VAR()*/untuk mengubah nilai ambang batas, hilangkan awalanloose_dari nama parameter. Jika tidak,hinttidak akan berlaku.Paksa Jalankan Pernyataan Menggunakan Rencana Eksekusi Penyimpanan Baris
Untuk memaksa mengeksekusi pernyataan menggunakan rencana eksekusi penyimpanan baris, tambahkan petunjuk /*+ SET_VAR(USE_IMCI_ENGINE=OFF) */ ke pernyataan.
Contoh pernyataan:EXPLAIN SELECT /*+ SET_VAR(USE_IMCI_ENGINE=OFF) */ COUNT(*) FROM t1 WHERE t1.a > 1;