Kontrol alur pemisahan membatasi jumlah pemindaian split konkuren yang berjalan dalam satu task atau pada satu node. Tanpa batasan ini, konkurensi pemindaian yang tinggi dapat menyebabkan masalah berikut:
-
Untuk tabel internal, pemindaian split konkuren bersaing untuk sumber daya I/O pada storage node, meningkatkan utilisasi CPU dan penggunaan memori, serta menyebabkan storage node menjadi tidak stabil.
-
Untuk tabel eksternal, efisiensi pemindaian bervariasi tergantung pada sumber data. Jika jumlah pemindaian split konkuren melebihi kuota, pemindaian split baru akan mengonsumsi sumber daya compute node dan memengaruhi kueri lain alih-alih mempercepat pemindaian secara keseluruhan.
Kontrol alur pemisahan diaktifkan secara default.
Topik ini menjelaskan cara mengaktifkan atau menonaktifkan kontrol alur pemisahan serta cara mengonfigurasi kuota pemindaian split konkuren baik di tingkat task maupun node.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster AnalyticDB for MySQL yang menjalankan versi V3.1.10.0 atau lebih baru
Untuk memeriksa versi minor kluster, lihat How do I query the version of an AnalyticDB for MySQL cluster?. Untuk melakukan upgrade versi minor, hubungi dukungan teknis.
Cara kerja
Saat AnalyticDB for MySQL mengeksekusi kueri, kueri tersebut dibagi menjadi stages. Setiap stage dijalankan sebagai beberapa tasks di berbagai node. Untuk memindai tabel, tabel tersebut dibagi menjadi splits. Setiap split ditugaskan ke satu task, dan satu task dapat memproses beberapa split secara konkuren.
Kontrol alur pemisahan beroperasi pada dua tingkat:
-
Tingkat task: Setiap task memiliki kuota untuk pemindaian split konkuren. Saat jumlah pemindaian split yang sedang berjalan dalam satu task mencapai kuota, pemindaian split baru akan menunggu hingga pemindaian yang sedang berjalan selesai.
-
Tingkat node: Setiap node memiliki kuota keseluruhan. Kuota per-task disesuaikan secara dinamis berdasarkan kuota node—meningkat saat node memiliki kapasitas cadangan dan menurun saat node mengalami beban tinggi.
Pilih pendekatan manajemen kuota
Sebelum mengonfigurasi kuota, tentukan apakah Anda ingin sistem menyesuaikan kuota per-task secara otomatis atau menetapkannya ke nilai tetap.
| Pendekatan | Cara kerja | Kapan digunakan |
|---|---|---|
| Penyesuaian dinamis (direkomendasikan) | Sistem menaikkan atau menurunkan kuota setiap task berdasarkan beban saat ini pada node | Beban kerja campuran di mana ketersediaan resource berfluktuasi |
| Kuota tetap | Kuota per-task dikunci pada nilai TARGET_RUNNING_SPLITS_LIMIT_PER_TASK |
Beban kerja yang dapat diprediksi di mana Anda memerlukan kontrol konkurensi yang tepat |
Penyesuaian dinamis memerlukan kontrol alur pemisahan agar diaktifkan.
Mengaktifkan atau menonaktifkan kontrol alur pemisahan
Kontrol alur pemisahan diaktifkan secara default. Untuk menonaktifkan atau mengaktifkannya kembali, jalankan salah satu pernyataan berikut.
Untuk kluster:
SET ADB_CONFIG SPLIT_FLOW_CONTROL_ENABLED=true|false;
Untuk satu kueri (menggunakan hint):
/*+ SPLIT_FLOW_CONTROL_ENABLED=true|false*/ SELECT * FROM table;
Untuk memverifikasi apakah kontrol alur pemisahan saat ini diaktifkan:
SHOW ADB_CONFIG KEY=SPLIT_FLOW_CONTROL_ENABLED;
Mengonfigurasi kuota per-task
Mengaktifkan atau menonaktifkan penyesuaian dinamis
Saat penyesuaian dinamis diaktifkan, kuota setiap task meningkat saat node memiliki kapasitas cadangan dan menurun saat kuota node berada di bawah tekanan. Kuota per-task tetap berada dalam batas yang ditetapkan oleh MIN_RUNNING_SPLITS_LIMIT_PER_TASK dan MAX_RUNNING_SPLITS_LIMIT_PER_TASK.
Saat penyesuaian dinamis dinonaktifkan, kuota per-task ditetapkan pada nilai TARGET_RUNNING_SPLITS_LIMIT_PER_TASK (default: 32).
Aktifkan kontrol alur pemisahan sebelum mengaktifkan penyesuaian dinamis. Jalankan SHOW ADB_CONFIG KEY=SPLIT_FLOW_CONTROL_ENABLED; untuk mengonfirmasi.
Untuk mengaktifkan atau menonaktifkan penyesuaian dinamis:
SET ADB_CONFIG NODE_LEVEL_SPLIT_FLOW_CONTROL_ENABLED=true|false;
Parameter kuota
Parameter berikut mengontrol kuota pemindaian split konkuren per-task.
| Parameter | Default | Rentang valid | Deskripsi |
|---|---|---|---|
MIN_RUNNING_SPLITS_LIMIT_PER_TASK |
1 | 1 hingga nilai TARGET |
Kuota minimum per-task. Di bawah beban node tinggi, kuota dinamis menurun hingga tidak kurang dari nilai ini. |
TARGET_RUNNING_SPLITS_LIMIT_PER_TASK |
32 | MIN hingga nilai MAX |
Kuota dasar per-task. Saat jumlah target kuota semua task pada satu node sesuai dengan kuota node, kuota setiap task meningkat secara dinamis. Jika tidak, kuota tersebut menurun. Nilai ini juga menetapkan kuota tetap saat penyesuaian dinamis dinonaktifkan. |
MAX_RUNNING_SPLITS_LIMIT_PER_TASK |
64 | Lebih besar dari nilai TARGET |
Kuota maksimum per-task. Saat node memiliki kapasitas cadangan, kuota dinamis meningkat hingga tidak lebih dari nilai ini. |
Terapkan pengaturan kuota untuk kluster atau kueri
Terapkan pengaturan kuota di tingkat kluster menggunakan SET ADB_CONFIG, atau di tingkat kueri menggunakan hint.
Tingkat kluster:
SET ADB_CONFIG <parameter>=<value>;
Tingkat kueri:
/*+ <parameter>=<value>*/ SELECT * FROM orders;
Contoh
Tetapkan kuota minimum pemindaian split konkuren menjadi 24 untuk semua task dalam kluster:
SET ADB_CONFIG MIN_RUNNING_SPLITS_LIMIT_PER_TASK=24;
Tetapkan kuota minimum menjadi 10 untuk kueri tertentu:
/*+ MIN_RUNNING_SPLITS_LIMIT_PER_TASK=10*/ SELECT * FROM orders;
Tetapkan kuota maksimum menjadi 128 untuk semua task dalam kluster:
SET ADB_CONFIG MAX_RUNNING_SPLITS_LIMIT_PER_TASK=128;
Tetapkan kuota maksimum menjadi 100 untuk kueri tertentu:
/*+ MAX_RUNNING_SPLITS_LIMIT_PER_TASK=100*/ SELECT * FROM adb_test;
Panduan penyetelan
Menurunkan kuota task berarti lebih banyak split menunggu dalam antrian, yang meningkatkan latensi pemindaian untuk kueri tersebut tetapi membebaskan sumber daya untuk kueri lain. Meningkatkan kuota memiliki efek sebaliknya.
| Skenario | Karakteristik kueri | Pendekatan yang direkomendasikan |
|---|---|---|
| Kueri titik atau kueri dengan latensi pendek | Split sedikit, volume data kecil, penyelesaian cepat diharapkan | Tetapkan MIN, TARGET, dan MAX ke nilai yang lebih besar, atau nonaktifkan kontrol alur pemisahan untuk kueri tersebut |
| Pemindaian full-table besar dengan prioritas rendah | Banyak split, berjalan lama, tidak sensitif terhadap latensi | Tetapkan TARGET ke nilai yang lebih kecil untuk melindungi kueri prioritas tinggi; kuota akan meningkat otomatis saat sumber daya menganggur |
| Kueri tabel eksternal | Efisiensi pemindaian bergantung pada throughput sumber data | Tetapkan kuota berdasarkan batas transmisi sumber data untuk menghindari overload pada sumber |
Mengonfigurasi kuota tingkat node
Setiap node memiliki kuota keseluruhan untuk pemindaian split konkuren. Nilai default-nya adalah 256 baik untuk storage node maupun compute node.
Jangan ubah nilai default. Kuota yang terlalu tinggi atau terlalu rendah akan menurunkan performa kluster.
Storage Node (pemindaian tabel internal):
SET ADB_CONFIG WORKER_MAX_RUNNING_SOURCE_SPLITS_PER_NODE=256;
Compute node (pemindaian tabel eksternal):
SET ADB_CONFIG EXECUTOR_MAX_RUNNING_SOURCE_SPLITS_PER_NODE=256;
Untuk menanyakan kuota tingkat node saat ini:
SHOW ADB_CONFIG;
Untuk informasi selengkapnya, lihat SHOW ADB_CONFIG.
Catatan penggunaan
-
Perubahan kuota node hanya berlaku untuk split yang tertunda. Penurunan kuota node hanya berlaku setelah pemindaian split yang sedang berjalan selesai.
-
Kuota minimum per-task dapat menyebabkan kuota node terlampaui. Jika jumlah
MIN_RUNNING_SPLITS_LIMIT_PER_TASKdari semua task pada satu node melebihi kuota node, jumlah aktual pemindaian split konkuren pada node tersebut dapat melebihi kuota node yang dikonfigurasi.