Di PolarDB for MySQL, baik Pembaruan penuh maupun eksekusi awal Pembaruan bertahap untuk Tampilan yang di-materialisasi mendukung dua mode penulisan paralel: ETL dan ePQ. Mode optimal untuk meningkatkan efisiensi pembaruan bergantung pada karakteristik workload, seperti apakah tabel bersifat lebar atau sempit, jenis seri kluster (Edisi Kluster atau Kluster Multi-primary), serta kebutuhan offloading komputasi.
Ikhtisar
Untuk meningkatkan efisiensi eksekusi, PolarDB for MySQL menyediakan dua mode penulisan paralel berikut untuk Pembaruan penuh atau Pembaruan bertahap awal dari Tampilan yang di-materialisasi:
Mode | Aktivasi | Arsitektur | Kasus penggunaan |
ETL Parallel Write (Default) | Mode default (diaktifkan secara otomatis ketika tingkat paralelisme > 1). | Mode ini melakukan offload kueri ke node remote, tempat beberapa worker mengonsumsi dan menulis hasil secara paralel. | Tabel lebar, volume data besar, dan skenario yang memerlukan offloading kueri. |
ePQ Parallel Write | Harus diaktifkan secara manual. | Kerangka kerja PQ membagi pernyataan | Tabel sempit dan skenario yang memerlukan paralelisme end-to-end. |
Kedua mode memerlukan parameter materialized_view_refresh_parallelism diatur ke nilai lebih dari 1.
Kompatibilitas
Versi | Mode pembaruan paralel | Catatan |
PolarDB for MySQL 8.0.1 dengan versi kernel minor 8.0.1.1.54 atau lebih baru | Mode ETL | Hanya mode ETL. |
PolarDB for MySQL 8.0.2 dengan versi kernel minor 8.0.2.2.34 dan 8.0.2.2.35 | Mode ePQ |
|
Proses pembaruan
Pembaruan penuh Tampilan yang di-materialisasi terdiri dari tiga tahap:
Buat tabel kontainer: Tabel kontainer baru dibuat berdasarkan definisi Tampilan yang di-materialisasi. Jika
materialized_view_implicit_partition_num > 1, partisi hash ditambahkan secara otomatis untuk mencegah kontensi lock selama penulisan paralel.CatatanMySQL 8.0.1 tidak mendukung parameter
materialized_view_implicit_partition_num.Tulis data secara paralel: Sistem menulis data secara paralel sesuai dengan mode yang dipilih.
Buat indeks kolom (Opsional): Jika
materialized_view_add_columnar_index_after_insert = ON, sistem terlebih dahulu menyelesaikan pembaruan lalu membuat indeks kolom (IMCI) untuk tabel kontainer.
Mode penulisan paralel ETL
Cara kerja
PolarDB memilih node remote (node read-only indeks column-store atau node read-only row-store) berdasarkan kebijakan offload dan membuat koneksi.
Node primary (RW) mengirim kueri definisi Tampilan yang di-materialisasi ke node remote untuk dieksekusi.
Node remote mengalirkan set hasil kembali. Transmisi data terkompresi didukung.
Node primary (RW) membuat beberapa thread pekerja. Setiap thread pekerja mengambil baris secara paralel dan menulisnya ke partisi berbeda dari tabel kontainer.
Fitur
Komputasi kueri dijalankan di node remote dan tidak mengonsumsi resource CPU di node primary (RW).
Operasi penulisan dijalankan secara lokal di node primary (RW) untuk memastikan konsistensi transaksional.
Dalam skenario tabel lebar, efisiensi paralel tidak terpengaruh oleh panjang baris.
Mendukung kluster multi-primary (Limitless).
Penggunaan
Metode untuk mengubah parameter kluster PolarDB berbeda antara Konsol dan sesi database. Perbedaannya sebagai berikut:
Kompatibilitas: Untuk kompatibilitas dengan file konfigurasi MySQL, beberapa parameter kluster di Konsol PolarDB memiliki awalan loose_.
Prosedur: Temukan dan ubah parameter yang memiliki awalan
loose_.
Di sesi database (menggunakan command line atau client)
Prosedur: Saat menggunakan perintah
SETuntuk mengubah parameter dalam sesi database, hapus awalanloose_dan gunakan nama parameter aslinya.
Parameter | Contoh nilai | Dapat dimodifikasi per sesi | Deskripsi |
| 16 | Tidak | Mengatur tingkat paralelisme. Nilai lebih dari 1 mengaktifkan pembaruan paralel. |
| FORCE_IMCI | Ya | Mengatur kebijakan offload untuk pembaruan manual berdasarkan sesi. |
Setelah mengonfigurasi parameter, jalankan perintah berikut untuk memperbarui Tampilan yang di-materialisasi:
-- Refresh the materialized view
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;Mode penulisan paralel ePQ
Cara kerja (offloading MPP ke node read-only indeks column-store remote ketika kebijakan offload adalah FORCE_IMCI)
Sistem menjadwalkan PQ Worker ke node read-only indeks column-store remote untuk melakukan pemindaian SELECT.
PQ Worker mengirim hasil pemindaian kembali ke node primary (RW) melalui jaringan internal, yang mendukung kompresi.
Beberapa PQ Worker memindai data tabel sumber secara paralel di node primary (RW).
PQ Worker menulis hasil pemindaian secara paralel ke partisi tabel kontainer.
Akhirnya, node primary (RW) menyelesaikan penulisan data secara lokal.
Fitur
Paralelisme end-to-end: Satu rencana eksekusi paralel menangani pemindaian dan penulisan.
Skalabilitas hampir linear untuk tabel sempit.
Menghindari batasan transfer jaringan single-port pada ETL.
Saat ini tidak didukung di kluster Limitless. Operasi secara otomatis kembali ke eksekusi serial.
Kompresi jaringan (skenario offload MPP)
Prasyarat
Parameter | Contoh nilai | Dapat diatur di tingkat sesi | Deskripsi |
| ZSTD | Ya | Menentukan algoritma kompresi untuk data yang ditransfer dari node replika selama pembaruan Tampilan yang di-materialisasi. Harus diatur ke ZSTD untuk mengaktifkan kompresi.
|
| 3 | Ya | Menentukan tingkat kompresi. Jika parameter ini diatur ke 0 (default) atau nilai tidak valid, sistem menggunakan level 3 untuk algoritma ZSTD.
|
Dampak
Mengurangi jumlah data yang ditransfer antar node sebesar 60%–80%.
Kompresi dan dekompresi menambah beban CPU. Pertimbangkan trade-off ini dalam skenario yang terikat CPU.
Rekomendasi
Transfer terkompresi direkomendasikan hanya untuk tabel lebar. Untuk tabel sempit, overhead CPU akibat kompresi dapat mengimbangi manfaat jaringan, sehingga disarankan menggunakan pengaturan UNCOMPRESSED. Jika Tampilan yang di-materialisasi Anda adalah tabel lebar dan memerlukan offloading eksekusi, pertimbangkan langsung menggunakan mode ETL alih-alih mode ePQ dengan offload MPP. Mode ETL secara inheren sangat cocok untuk tabel lebar.
Prosedur
Skenario A: Offload MPP ke node remote
Parameter | Contoh nilai | Dapat diatur di tingkat sesi | Deskripsi |
| 16 | Tidak | Mengatur tingkat paralelisme. Nilai lebih dari 1 mengaktifkan pembaruan paralel. |
| 16 | Ya | Mengatur jumlah partisi implisit. Catatan Parameter |
| FORCE_IMCI | Ya | Untuk pembaruan manual, Anda dapat menentukan kebijakan offload berbeda untuk setiap sesi. |
| ON | Tidak | Mengizinkan penjadwalan offload ke node read-only indeks column-store. |
| ZSTD | Ya | Mengaktifkan transfer terkompresi (direkomendasikan untuk tabel lebar; dapat dilewati untuk tabel sempit). |
| 3 | Ya | Mengatur tingkat kompresi untuk transfer terkompresi. |
Setelah mengonfigurasi parameter tersebut, lakukan pembaruan:
-- Perform the refresh
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;Skenario B: Offload ePQ ke node tertentu
Jika kluster Anda memiliki beberapa node read-only indeks column-store, Anda dapat menggunakan pq_mpp_allow_dispatch_to_imci_node untuk mengontrol node mana yang dapat menerima permintaan penjadwalan ePQ MPP. Parameter ini harus diatur ke ON baik di node primary (RW) maupun di node read-only indeks column-store target. Sistem tidak akan menjadwalkan ke node read-only indeks column-store jika parameter ini tidak diaktifkan di node tersebut.
-- 1. Di node primary (RW), nonaktifkan kemampuannya untuk bertindak sebagai resource PQ Worker.
-- Di Konsol, atur pq_mpp_allow_imci_node = OFF;
-- 2. Di node primary (RW), izinkan penjadwalan ke node IMCI.
-- Di Konsol, atur pq_mpp_allow_dispatch_to_imci_node = ON;
-- 3. Hubungkan ke node IMCI yang harus menangani kueri offloaded, dan aktifkan titik masuk penjadwalan hanya di node tersebut.
-- Di Konsol, atur pq_mpp_allow_dispatch_to_imci_node = ON;
-- 4. Kembali ke node primary (RW) dan lakukan refresh dengan kebijakan offload IMCI.
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;Setelah mengaktifkan fitur ini, gunakan information_schema.cluster_group_resource_view untuk memeriksa status node target. Node read-only indeks column-store target harus menampilkan allow_to_dispatch, dan kolom EXTRA-nya harus berisi Allow to dispatch to IMCI node. Dalam mode ini, node read-only indeks column-store hanya menerima permintaan penjadwalan dan tidak bertindak sebagai PQ Worker. Untuk membuat semua node read-only indeks column-store bertindak sebagai resource ePQ Worker, atur pq_mpp_allow_imci_node = ON.
Pemilihan node target offload
Ketika kebijakan offload bukan MASTER, sistem memilih node remote untuk mengeksekusi kueri SELECT.
Kebijakan menentukan jenis node
| Jenis node kandidat | Deskripsi |
| Node read-only IMCI | Kembali ke eksekusi lokal di node master (RW) dan mencatat peringatan. |
| Node read-only IMCI | Gagal dengan error. |
| Node read-only row-store | Kembali ke eksekusi lokal di node master (RW) dan mencatat peringatan. |
| Node read-only row-store | Gagal dengan error. |
| Node read-only IMCI atau node read-only row-store (berdasarkan biaya) | Memilih jenis node yang tersedia jika hanya satu jenis yang tersedia. Jika keduanya tidak tersedia, kembali ke node master (RW). |
Logika keputusan untuk kebijakan COST
Ketika materialized_view_complete_refresh_offload_policy = COST, sistem menentukan node target dengan membandingkan biaya pengoptimal kueri terhadap ambang batas:
Jika biaya kueri ≥
cost_threshold_for_imci: Lakukan offload ke node read-only IMCI. IMCI cocok untuk kueri pemindaian dan agregasi berbiaya tinggi.Jika biaya kueri <
cost_threshold_for_imci: Lakukan offload ke node read-only row-store. Node read-only row-store cukup untuk kueri ringan.
-- Set the cost threshold (default is 0, which means all queries tend to be offloaded to IMCI).
SET SESSION cost_threshold_for_imci = 100000;
-- Use the COST policy.
SET SESSION materialized_view_complete_refresh_offload_policy = COST;Penyeimbangan beban multi-node
Jika tersedia beberapa node dengan jenis yang sama, sistem menggunakan pendekatan Round-Robin untuk memilih node:
Setiap tugas pembaruan memilih node berikutnya berdasarkan penghitung global.
Jika koneksi ke node yang dipilih gagal, sistem secara otomatis mencoba node berikutnya dalam daftar hingga semua node telah dicoba.
Sistem mendistribusikan tugas pembaruan untuk Tampilan yang di-materialisasi berbeda secara merata di seluruh node.
Untuk melakukan offload tugas ePQ + MPP ke node IMCI, gunakan salah satu dari dua metode berikut:
Aktifkan
pq_mpp_allow_imci_nodeuntuk mendukung offloading ke semua node read-only IMCI.Pertama, atur
pq_mpp_allow_imci_node = OFF, lalu gunakanpq_mpp_allow_dispatch_to_imci_nodeuntuk mempersempit kandidat node read-only IMCI:Di node master (RW), atur
pq_mpp_allow_dispatch_to_imci_node = ONuntuk mengizinkan node master (RW) menerima status titik masuk dispatch dari node read-only IMCI remote.Di setiap node read-only IMCI yang ingin menangani kueri offloaded, atur
pq_mpp_allow_dispatch_to_imci_node = ON.Di setiap node read-only IMCI yang tidak ingin menangani kueri offloaded, pertahankan
pq_mpp_allow_dispatch_to_imci_node = OFF.
Kebijakan yang direkomendasikan
Di lingkungan produksi, gunakan FORCE_IMCI atau FORCE_TPRO. Hindari kebijakan PREFER_*.
Alasan: Jika node target tidak tersedia, kebijakan PREFER_* diam-diam kembali ke eksekusi lokal di node master (RW). Fallback ini menyebabkan pernyataan INSERT SELECT melakukan pemindaian penuh dan penulisan di node master (RW). Hal ini menciptakan transaksi besar dan dapat memengaruhi performa workload online di node master (RW).
Contoh konfigurasi
-- Recommended: Force the use of an IMCI node. If unavailable, the operation fails instead of falling back.
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;
-- Use only row-store read-only nodes. If unavailable, the operation fails.
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_TPRO;
-- Automatically choose between IMCI and TPRO based on query cost.
SET SESSION materialized_view_complete_refresh_offload_policy = COST;
SET SESSION cost_threshold_for_imci = 50000;Ruang lingkup dan pengaturan parameter
Aturan dasar
Parameter
GLOBAL: hanya diatur di Konsol dan berlaku untuk semua sesi serta thread pembaruan otomatis.Parameter
SESSION: Anda dapat mengaturnya untuk sesi saat ini menggunakanSET SESSION. Anda juga dapat mengubah nilai default-nya di Konsol. Thread pembaruan otomatis menggunakan nilai defaultGLOBAL.
Ruang lingkup parameter untuk mode penulisan paralel ETL
Parameter | Ruang lingkup | Dapat diatur per sesi | Deskripsi |
| GLOBAL | Tidak, harus GLOBAL | Semua tugas pembaruan berbagi tingkat paralelisme yang sama. |
| SESSION | Ya | Untuk pembaruan manual, Anda dapat menentukan kebijakan offload berbeda untuk setiap sesi. |
| SESSION | Ya | Mengizinkan Anda menonaktifkan optimasi auto-increment atomik. |
| SESSION | Ya | Mengaktifkan caching set hasil. |
Ruang lingkup parameter untuk mode penulisan paralel ePQ
Parameter | Ruang lingkup | Dapat diatur per sesi | Deskripsi |
| GLOBAL | Tidak, harus GLOBAL | Semua tugas pembaruan berbagi tingkat paralelisme yang sama. |
| GLOBAL | Tidak, harus GLOBAL | Mengontrol apakah tugas MPP dapat dijadwalkan ke node IMCI. |
| GLOBAL | Tidak, harus GLOBAL | Mengizinkan penggunaan titik masuk penjadwalan IMCI. Parameter ini harus diaktifkan baik di node primary (RW) maupun di node read-only target yang berisi indeks kolom. |
| SESSION | Ya | Untuk pembaruan manual, Anda dapat menentukan kebijakan offload berbeda untuk setiap sesi. |
| SESSION | Ya | Mengizinkan setiap Tampilan yang di-materialisasi menggunakan jumlah partisi berbeda. |
| SESSION | Ya | Menentukan algoritma kompresi transport untuk offload MPP. Sistem secara otomatis menyebarkan pengaturan ini ke PQ worker. |
| SESSION | Ya | Menentukan tingkat kompresi. Sistem secara otomatis menyebarkan pengaturan ini ke PQ worker. |
Catatan
Jika Anda hanya menggunakan pembaruan manual, Anda dapat menyesuaikan parameter
SESSIONuntuk setiap sesi.Jika Anda mengandalkan pembaruan otomatis, Anda harus mengatur nilai default yang sesuai untuk semua parameter
SESSIONdi Konsol.Parameter
GLOBALharus diatur di Konsol, terlepas dari metode pembaruan. Perubahan berlaku segera untuk semua tugas berikutnya.Pengaturan
SET SESSIONtidak bertahan setelah restart kluster. Sebaliknya, parameterGLOBALyang diubah di Konsol bersifat persisten.
Referensi parameter
Parameter inti
Parameter | Ruang lingkup | Nilai | Default | Deskripsi |
| GLOBAL | 1–1024 | 1 | Jumlah worker paralel. Nilai lebih dari 1 mengaktifkan pembaruan paralel. |
| SESSION | 0 hingga tak terbatas | 1 | Jumlah partisi HASH implisit untuk tabel kontainer. Nilai lebih dari 1 mengaktifkan partisi HASH implisit. Catatan MySQL 8.0.1 tidak mendukung parameter |
| SESSION | ON/OFF | ON | Meningkatkan performa dengan menggunakan nilai auto-increment atomik untuk kolom partisi implisit. |
Parameter offloading komputasi
Parameter | Ruang lingkup | Nilai | Default | Deskripsi |
| SESSION |
| Menentukan kebijakan untuk offloading komputasi kueri. | |
| GLOBAL | ON/OFF | OFF | Mengizinkan PQ worker dijadwalkan di node read-only IMCI (diperlukan untuk mode ePQ). |
| GLOBAL | ON/OFF | OFF | Mengizinkan penggunaan titik masuk dispatch IMCI. Parameter ini harus diaktifkan baik di node primary (RW) maupun di node read-only IMCI target. |
Parameter kompresi jaringan
Parameter | Ruang lingkup | Nilai | Default | Deskripsi |
| SESSION |
| UNCOMPRESSED | Menentukan algoritma kompresi untuk saluran PQ internal. Pengaturan ini hanya berlaku dalam mode offload MPP ePQ. |
| SESSION | 0–22 | 0 | Menentukan tingkat kompresi ZSTD untuk saluran PQ. Jika diatur ke 0, sistem menggunakan level default ZSTD (3). |
| SESSION | ON/OFF | OFF | Menentukan apakah akan menyimpan cache seluruh set hasil di memori. Pengaturan ini hanya efektif dalam mode ETL. |
Cara kerja kompresi:
Mode | Lokasi kompresi | Kondisi efektif |
ePQ (offload MPP) | Saluran PQ internal antara node primary (RW) dan node remote. |
|
ePQ (hanya lokal) | Tidak ada transfer jaringan. | Tidak berlaku. |
Parameter materialized_view_etl_compression_level hanya berlaku ketika materialized_view_etl_compression_algorithm = ZSTD. Jika diatur ke 0, sistem menggunakan level default ZSTD yaitu 3. Jika diatur ke nilai 1 hingga 22, sistem menggunakan level yang ditentukan. Level yang lebih tinggi memberikan rasio kompresi lebih baik tetapi meningkatkan overhead CPU.
Kebijakan offload (parameter materialized_view_complete_refresh_offload_policy)
Nilai | Deskripsi |
| Node primary (RW) mengeksekusi semua operasi secara lokal. |
| Memprioritaskan offloading ke node TPRO read-only. Kembali ke node primary (RW) jika tidak tersedia. |
| Memprioritaskan offloading ke node IMCI read-only. Kembali ke node primary (RW) jika tidak tersedia. |
| Memaksa offloading komputasi ke node TPRO read-only. Jika tidak ada node tersebut, operasi gagal. |
| Memaksa offloading komputasi ke node IMCI read-only. Jika tidak ada node tersebut, operasi gagal. |
| Menggunakan model berbasis biaya untuk secara otomatis memilih antara node IMCI read-only atau node TPRO read-only untuk offloading. |
Rekomendasi pemilihan mode
Skenario | Mode yang direkomendasikan | Konfigurasi utama |
Tabel sempit tanpa node remote | ePQ lokal saja |
|
Tabel sempit dengan node read-only berindeks column-store atau node read-only row-store | ETL/ePQ dengan offload MPP |
|
Tabel lebar atau tabel yang berisi field besar | ETL |
|
ETL | Gunakan mode ETL. Mode ePQ tidak tersedia untuk kluster multi-master. |
Pertimbangan
Tidak berpengaruh ketika tingkat paralelisme adalah 1: Kedua mode paralel turun menjadi operasi INSERT SELECT serial.
Ketersediaan node remote: Baik mode ETL maupun offloading MPP ePQ bergantung pada node remote. Jika node remote tidak tersedia, kebijakan
FORCE_*mengembalikan error, sedangkan kebijakanPREFER_*kembali ke eksekusi lokal di node primary (RW).Batasan lingkungan multi-primary: Di kluster multi-primary (Limitless), mode ePQ secara otomatis dinonaktifkan dan kembali ke eksekusi serial. Gunakan mode ETL untuk pembaruan paralel.
Cakupan kolom IMCI: Saat menggunakan offloading MPP ePQ ke node read-only dengan indeks kolom, indeks kolom harus mencakup semua kolom yang dibaca oleh kueri Tampilan yang di-materialisasi. Jika tidak, sistem mengembalikan error. Mode ETL tidak memiliki batasan ini.
Jumlah partisi implisit: Kami merekomendasikan mengatur nilai ini menjadi 0,5 hingga 2 kali tingkat paralelisme. Terlalu sedikit partisi dapat menyebabkan kontensi penulisan, sedangkan terlalu banyak dapat meningkatkan overhead manajemen file.
Lokasi penulisan: Di kedua mode, penulisan data selalu diselesaikan secara lokal di node primary (RW). Offloading hanya memengaruhi lokasi eksekusi kueri SELECT.
Persistensi parameter: Pengaturan yang dikonfigurasi dengan
SET SESSIONtidak bertahan setelah restart kluster, sedangkan perubahan parameter GLOBAL yang dilakukan di Konsol bersifat persisten.Trade-off kompresi vs CPU: Untuk offloading MPP ePQ, kami merekomendasikan mengatur
materialized_view_etl_compression_algorithm=ZSTD. Untuk tabel sempit, overhead CPU akibat kompresi dapat mengimbangi manfaat jaringan.