AnalyticDB for MySQL menyediakan mekanisme manajemen beban kerja untuk mengonfigurasi aturan manajemen beban kerja, menerapkan manajemen kluster yang lebih halus, dan meningkatkan kinerja kluster. Topik ini menjelaskan cara mengonfigurasi aturan tersebut.
Prasyarat
Sebelum mengonfigurasi aturan manajemen beban kerja di AnalyticDB for MySQL, pastikan persyaratan berikut terpenuhi:
Kluster Data Warehouse Edition AnalyticDB for MySQL telah dibuat.
Versi minor kluster adalah 3.1.6.3 atau lebih baru.
Catatan
Catatan Penggunaan
Sintaks WLM dapat digunakan untuk memodifikasi aturan manajemen beban kerja hanya pada kluster AnalyticDB for MySQL versi V3.1.10.0 atau lebih baru.
AnalyticDB for MySQL menggunakan kebijakan penghapusan lunak untuk aturan manajemen beban kerja. Nama aturan baru tidak boleh sama dengan aturan yang telah dihapus.
Buat aturan manajemen beban kerja
Sintaks
wlm add_rule
name=<ruleName>
type=query
action=<ruleAtion>
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<ruleAttrs>']
[resource_group=<ruleResource_group>]
[description='<ruleDescription>']
[compatible_group=<compatible_group_name>]
[enabled=<ruleEnabled>]
[priority=<rulePriority>]Tidak diperbolehkan ada spasi di setiap sisi tanda sama dengan (=).
Parameter
Parameter | Diperlukan | Deskripsi |
name | Ya | Nama aturan. Catatan Nama aturan harus unik di antara aturan yang ada dan aturan yang telah dihapus. |
type | Ya | Jenis aturan. Setel parameter ini ke query. |
action | Ya | Tindakan yang dilakukan ketika kueri memenuhi kondisi aturan. Untuk informasi lebih lanjut tentang tindakan, lihat bagian "Lampiran 3: Tindakan" dari topik ini. |
predicate | Ya | Kondisi predikat dari aturan. Sintaks:
Catatan
|
attrs | Tidak | Atribut aturan. Anda harus menentukan parameter ini ketika nilai parameter action adalah RESUBMIT_RESOURCE_GROUP, ADD_PROPERTIES, atau BLOCK_WITH_PROB. Untuk informasi tentang cara menentukan parameter attrs, lihat bagian "Lampiran 3: Tindakan" dari topik ini. Catatan Kurungilah nilai parameter ini dengan tanda kutip tunggal ('). |
resource_group | Tidak | Nama grup sumber daya. Nilai default adalah user_default. Catatan Untuk mendapatkan nama grup sumber daya kluster, masuk ke konsol AnalyticDB for MySQL, klik ID kluster, lalu buka halaman Resource Groups. |
description | Tidak | Deskripsi aturan. Catatan Kurungilah nilai parameter ini dengan tanda kutip tunggal ('). |
compatible_group | Tidak | Grup kompatibilitas. Sistem mencocokkan kueri terhadap aturan manajemen beban kerja satu per satu dalam urutan prioritas aturan menurun. Ketika sebuah aturan cocok, sistem berhenti mencocokkan dan melakukan tindakan yang ditentukan dalam aturan. Jika Anda ingin beberapa aturan cocok, Anda dapat menambahkan aturan tersebut ke grup kompatibilitas. Ketika sebuah aturan cocok, sistem juga memeriksa aturan lain dalam grup kompatibilitas yang sama dan mengambil tindakan yang ditentukan dalam aturan lain yang cocok tanpa memandang prioritas mereka. |
enabled | Tidak | Menentukan apakah akan mengaktifkan aturan. Nilai valid:
|
priority | Tidak | Prioritas aturan. Nilai default: 0. Sistem mencocokkan kueri terhadap aturan manajemen beban kerja satu per satu dalam urutan prioritas aturan menurun. Ketika sebuah aturan cocok, sistem berhenti mencocokkan dan melakukan tindakan yang ditentukan dalam aturan. Jika beberapa aturan dengan prioritas yang sama cocok, yang dibuat paling awal berlaku. |
Contoh
Contoh 1: Buat aturan bernama testRule1. Jika nama pengguna adalah test dan persentil ke-50 dari durasi eksekusi historis pola SQL lebih dari 60.000 ms, kueri diakhiri.
wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';Hasil contoh:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule1' success | +---------------------------------+Contoh 2: Buat aturan bernama testRule2. Jika nama pengguna adalah test dan alamat IP pengguna adalah 10.10.10.10, 192.168.0.1, atau 192.0.2.1, petunjuk
query_priority=lowditambahkan ke kueri.wlm add_rule name=testRule2 type=query action=ADD_PROPERTIES attrs='{"add_prop":{"query_priority":"low"}}' predicate='user=test && source_ip in 10.10.10.10,192.168.0.1,192.0.2.1';Hasil contoh:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule2' success | +---------------------------------+Contoh 3: Buat aturan bernama testRule3 dengan prioritas 5 untuk grup sumber daya testResourceGroup. Jika nama pengguna adalah test dan tipe kueri adalah SELECT, kueri diakhiri.
wlm add_rule name=testRule3 type=query resource_group=testResourceGroup description='just a test' priority=5 action=kill predicate='user=test && query_task_type=1';Hasil contoh:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule3' success | +---------------------------------+
Modifikasi aturan manajemen beban kerja
Sintaks WLM dapat digunakan untuk memodifikasi aturan manajemen beban kerja hanya pada kluster AnalyticDB for MySQL versi V3.1.10.0 atau lebih baru.
Sintaks
wlm update_rule
id=<ruleId>
name=<ruleName>
type=query
action=<ruleAtion>
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<ruleAttrs>']
[resource_group=<ruleResource_group>]
[description='<ruleDescription>']
[compatible_group=<compatible_group_name>]
[enabled=<ruleEnabled>]
[priority=<rulePriority>]Tidak diperbolehkan ada spasi di setiap sisi tanda sama dengan (=).
Parameter
Parameter | Diperlukan | Deskripsi |
id | Tidak | ID aturan. ID aturan bersifat unik dan digunakan untuk mencocokkan aturan yang sesuai. ID aturan tidak dapat diubah. Catatan Anda dapat menjalankan pernyataan |
name | Tidak | Nama aturan. Saat Anda mengubah nama aturan, Anda harus menggunakan ID aturan untuk mencocokkan aturan yang sesuai. Catatan Nama aturan baru tidak boleh sama dengan nama aturan yang ada. Jika tidak, aturan yang ada akan tertimpa. |
type | Tidak | Jenis aturan. Setel parameter ini ke query. |
action | Tidak | Tindakan yang dilakukan ketika kueri memenuhi kondisi aturan. Untuk informasi lebih lanjut tentang tindakan, lihat bagian "Lampiran 3: Tindakan" dari topik ini. |
predicate | Tidak | Kondisi predikat dari aturan. Sintaks:
Catatan
|
attrs | Tidak | Atribut aturan. Anda harus menentukan parameter ini ketika nilai parameter action adalah RESUBMIT_RESOURCE_GROUP, ADD_PROPERTIES, atau BLOCK_WITH_PROB. Untuk informasi tentang cara menentukan parameter attrs, lihat bagian "Lampiran 3: Tindakan" dari topik ini. Kurungilah nilai parameter ini dengan tanda kutip tunggal ('). |
resource_group | Tidak | Nama grup sumber daya. Nilai default adalah user_default. Catatan Untuk mendapatkan nama grup sumber daya kluster, masuk ke konsol AnalyticDB for MySQL, klik ID kluster, lalu buka halaman Resource Groups. |
description | Tidak | Deskripsi aturan. Catatan Kurungilah nilai parameter ini dengan tanda kutip tunggal ('). |
compatible_group | Tidak | Grup kompatibilitas. Sistem mencocokkan kueri terhadap aturan manajemen beban kerja satu per satu dalam urutan prioritas aturan menurun. Ketika sebuah aturan cocok, sistem berhenti mencocokkan dan melakukan tindakan yang ditentukan dalam aturan. Jika Anda ingin beberapa aturan cocok, Anda dapat menambahkan aturan tersebut ke grup kompatibilitas. Ketika sebuah aturan cocok, sistem juga memeriksa aturan lain dalam grup kompatibilitas yang sama dan mengambil tindakan yang ditentukan dalam aturan lain yang cocok tanpa memandang prioritas mereka. |
enabled | Tidak | Menentukan apakah akan mengaktifkan aturan. Nilai valid:
|
priority | Tidak | Prioritas aturan. Nilai default: 0. Sistem mencocokkan kueri terhadap aturan manajemen beban kerja satu per satu dalam urutan prioritas aturan menurun. Ketika sebuah aturan cocok, sistem berhenti mencocokkan dan melakukan tindakan yang ditentukan dalam aturan. Jika beberapa aturan dengan prioritas yang sama cocok, yang dibuat paling awal berlaku. |
Contoh
Contoh 1: Ubah nama aturan dengan ID 2 menjadi Rule.
wlm update_rule id=2 name=Rule;Hasil contoh:
+-----------------+ | result | +-----------------+ | update rule 2 | +-----------------+Contoh 2: Modifikasi kondisi aturan testRule1. Jika nama pengguna adalah test dan persentil ke-50 dari durasi eksekusi historis pola SQL lebih dari 80.000 ms, kueri diakhiri.
wlm update_rule name=testRule1 predicate='user=test && PATTERN_RT_P50>80000';Atau, gunakan ID aturan yang sesuai untuk memodifikasi aturan testRule1.
wlm update_rule id=1 predicate='user=test && PATTERN_RT_P50>80000';Hasil contoh:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+Contoh 3: Kirim ulang semua kueri yang memenuhi persyaratan aturan testRule1 ke grup sumber daya testgroup untuk dieksekusi.
Buat aturan bernama testRule1 dengan tindakan diatur ke KILL.
wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';Modifikasi aturan testRule1 untuk mengirim ulang kueri dari grup sumber daya saat ini ke grup sumber daya testgroup untuk dieksekusi.
wlm update_rule name=testRule1 action=RESUBMIT_RESOURCE_GROUP attrs='{ "resubmit":{ "resource_group": "testgroup" } }'CatatanUntuk informasi tentang cara menentukan parameter attrs, lihat bagian "Lampiran 3: Tindakan" dari topik ini.
Hasil contoh:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+
Kueri informasi tentang aturan manajemen beban kerja
Sintaks
wlm list_rule
[id=<ruleID>]
[name='<ruleName>'\G]Parameter
Parameter | Diperlukan | Deskripsi |
id | Tidak | ID aturan. Catatan Jika Anda tidak menentukan parameter id dan name, informasi tentang semua aturan yang ada, termasuk ID aturan mereka, akan dikembalikan. |
name | Tidak | Nama aturan. Catatan
|
\G | Tidak | Menampilkan setiap parameter yang dikembalikan dalam baris terpisah. |
Contoh
Contoh 1: Kueri informasi tentang aturan dengan ID testID1.
wlm list_rule id=1 \G;Hasil contoh:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 1 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}} 1 row in set (0.11 sec)Contoh 2: Kueri informasi tentang aturan dengan ID testID1 dan nama testRule4.
mysql> wlm list_rule id=1 name='testRule4' \G;Hasil contoh:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 1 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}} 1 row in set (0.09 sec)
Nonaktifkan aturan manajemen beban kerja
Sintaks
wlm disable_rule id=<ruleID>Parameter
Parameter | Diperlukan | Deskripsi |
id | Ya | ID aturan. Catatan Anda dapat menjalankan pernyataan |
Contoh
Contoh 1: Nonaktifkan aturan dengan ID testID1.
wlm disable_rule id=1;Hasil contoh:
+------------------+ | result | +------------------+ | disable rule 1 | +------------------+Contoh 2: Kueri informasi tentang aturan dengan ID testID1.
wlm list_rule id=1\G;Hasil contoh:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 0 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}}
Aktifkan aturan manajemen beban kerja
Sintaks
wlm enable_rule id=<ruleID>Parameter
Parameter | Diperlukan | Deskripsi |
id | Ya | ID aturan. Catatan Anda dapat menjalankan pernyataan |
Contoh
Contoh 1: Aktifkan aturan dengan ID testID1.
wlm enable_rule id=1;Hasil contoh:
+----------------+ | result | +----------------+ | enable rule 1 | +----------------+Contoh 2: Kueri informasi tentang aturan dengan ID testID1.
wlm list_rule id=1\G;Hasil contoh:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 1 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}}
Hapus aturan manajemen beban kerja
Sintaks
wlm delete_rule id=<ruleID>Parameter
Parameter | Diperlukan | Deskripsi |
id | Ya | ID aturan. Catatan Anda dapat menjalankan pernyataan |
Contoh
Contoh 1: Hapus aturan dengan ID testID1.
wlm delete_rule id=1;Hasil contoh:
+----------------+ | result | +----------------+ | delete rule 1 | +----------------+Contoh 2: Kueri informasi tentang aturan dengan ID testID1.
wlm list_rule id=1\G;Hasil contoh:
Empty set
Dapatkan nilai hash pola kueri
Sintaks
wlm calc_pattern_hash <SQL>Parameter
Parameter | Diperlukan | Deskripsi |
SQL | Ya | Kueri SELECT atau kueri tulis yang berisi pernyataan SELECT. |
Contoh
Dapatkan nilai hash pola kueri.
wlm calc_pattern_hash select * from t where a=1 and b=2;Hasil contoh:
+-----------------------------------+----------------------+
| raw_sql | pattern_hash |
+-----------------------------------+----------------------+
| select * from t where a=1 and b=2 | -4759960226441980963 |
+-----------------------------------+----------------------+Kueri daftar pernyataan WLM
Jalankan pernyataan WLM tanpa parameter.
wlm;Hasil contoh:
+---------------------------+-------------------------------------+
| command | description |
+---------------------------+-------------------------------------+
| calc_pattern_hash | calculate pattern_hash of query |
| add_rule | add a new rule |
| list_rule id=[x]|name=[x] | list all rules OR filter by id/name |
| disable_rule id=[x] | disable a rule by id |
| enable_rule id=[x] | enable a rule by id |
| delete_rule id=[x] | delete a rule by id |
| update_rule id=[x] | update a rule by id |
+---------------------------+-------------------------------------+Lampiran
Lampiran 1: Properti
Kategori | Properti | Tipe data | Deskripsi |
Kueri | user | String | Pengguna yang mengirimkan kueri. |
source_ip | String | Alamat IP dari mana kueri dikirim. | |
query_task_type | Numeric | Tipe kueri. Nilai valid:
| |
query_table_list | Daftar string | Tabel yang terlibat dalam kueri. | |
query_db_list | Daftar string | Database yang terlibat dalam kueri. | |
pattern_hash | Numeric | Nilai hash pola SQL tempat kueri milik. | |
sql | String | Pernyataan SQL asli dari kueri. Penting Properti ini didukung hanya untuk kluster AnalyticDB for MySQL versi V3.1.8.3 atau lebih baru. | |
Runtime Catatan Properti kategori ini digunakan untuk mengidentifikasi kueri berdasarkan statistik eksekusi mereka. | QUERY_PROCESS_TIME | Numeric | Jumlah total waktu CPU yang dikonsumsi oleh semua tugas kueri. Nilai tersebut dapat menunjukkan jumlah sumber daya komputasi yang diperlukan oleh kueri secara perkiraan. Unit: milidetik. |
QUERY_EXECUTION_TIME | Numeric | Durasi eksekusi kueri, tidak termasuk waktu antrian. Unit: milidetik. | |
QUERY_SUBMITTED_TIME | Numeric | Waktu ketika kueri dikirimkan. | |
QUERY_TOTAL_TASK | Numeric | Jumlah total tugas dalam rencana eksekusi fisik. | |
QUERY_INPUT_DATA_SIZE | Numeric | Jumlah data yang dibaca oleh kueri. Unit: MB. | |
QUERY_SHUFFLE_DATA_SIZE | Numeric | Jumlah data yang di-shuffle untuk kueri. Unit: MB. | |
QUERY_OUTPUT_DATA_SIZE | Numeric | Jumlah data keluaran untuk kueri. Unit: MB. | |
QUERY_PEAK_MEMORY | Numeric | Penggunaan memori puncak kueri. Unit: MB. | |
QUERY_TOTAL_STAGES | Numeric | Jumlah total tahap dalam rencana eksekusi. | |
Pola Catatan Properti kategori ini digunakan untuk mengidentifikasi kueri berdasarkan histori eksekusi mereka. | PATTERN_RT_P50 | Numeric | Persentil ke-50 dari durasi eksekusi historis untuk kueri pola SQL. Unit: milidetik. |
PATTERN_RT_P90 | Numeric | Persentil ke-90 dari durasi eksekusi historis untuk kueri pola SQL. Unit: milidetik. | |
PATTERN_EXECUTION_TIME_P50 | Numeric | Persentil ke-50 dari durasi eksekusi historis untuk kueri pola SQL, tidak termasuk waktu antrian. Unit: milidetik. | |
PATTERN_EXECUTION_TIME_P90 | Numeric | Persentil ke-90 dari durasi eksekusi historis untuk kueri pola SQL, tidak termasuk waktu antrian. Unit: milidetik. | |
PATTERN_WALL_TIME_P50 | Numeric | Persentil ke-50 dari waktu dinding untuk kueri pola SQL. Unit: milidetik. | |
PATTERN_WALL_TIME_P90 | Numeric | Persentil ke-90 dari waktu dinding untuk kueri pola SQL. Unit: milidetik. | |
PATTERN_SHUFFLE_SIZE_AVG | Numeric | Rata-rata jumlah data yang di-shuffle untuk kueri pola SQL. Unit: byte. | |
PATTERN_PEAK_MEMORY_AVG | Numeric | Rata-rata penggunaan memori puncak untuk kueri pola SQL. Unit: byte. | |
PATTERN_INPUT_POSITION_AVG | Numeric | Rata-rata jumlah baris data masukan untuk kueri pola SQL. | |
PATTERN_OUTPUT_POSITION_AVG | Numeric | Rata-rata jumlah baris data keluaran untuk kueri pola SQL. |
Lampiran 2: Operator
Operator | Tipe data | Deskripsi |
> | Numeric | Tidak tersedia |
< | Numeric | Tidak tersedia |
= | Numeric dan string | Tidak tersedia |
>= | Numeric | Tidak tersedia |
<= | Numeric | Tidak tersedia |
!= | Numeric dan string | Tidak tersedia |
in | Daftar string | Menentukan apakah dua daftar string berpotongan. |
contains | String | Menentukan apakah sebuah string mengandung string lain. Operator ini digunakan untuk menanyakan pernyataan SQL asli. Penting Operator ini didukung hanya untuk kluster AnalyticDB for MySQL versi V3.1.8.3 atau lebih baru. |
Lampiran 3: Tindakan
Tindakan | Deskripsi | Metode konfigurasi parameter attrs |
KILL | Mengakhiri kueri. | Tidak tersedia |
RESUBMIT_RESOURCE_GROUP | Menghentikan eksekusi kueri yang memenuhi persyaratan dalam grup sumber daya saat ini dan mengirim ulang kueri ke grup sumber daya lain untuk dieksekusi. | { "resubmit": {"resource_group":"<resource_group_name>"}} resource_group_name: nama grup sumber daya tujuan. Catatan Untuk mendapatkan nama grup sumber daya kluster, masuk ke konsol AnalyticDB for MySQL, klik ID kluster, lalu buka halaman Resource Groups. |
ADD_PROPERTIES | Memodifikasi properti kueri. Dapat digunakan untuk mengubah prioritas kueri atau memodifikasi properti kueri lainnya dari petunjuk. | { "add_prop": {"query_priority": "<Tingkat prioritas>", "force":"false"}}
|
BLOCK_WITH_PROB | Mengakhiri kueri pada probabilitas tertentu sebelum kueri masuk ke antrian. Dapat digunakan untuk pembatasan laju. | { "block_prob": {"prob":<prob_value>}} prob_value: probabilitas. Nilai valid: 0 hingga 1. |