AnalyticDB for MySQL menyediakan modul manajemen beban kerja. Anda dapat menggunakan perintah Workload Management (WLM) untuk mengonfigurasi aturan yang memberikan kontrol detail halus terhadap berbagai beban kerja dan meningkatkan status keseluruhan kluster. Topik ini menjelaskan cara menggunakan perintah WLM untuk membuat, memodifikasi, mengaktifkan, menonaktifkan, dan menghapus aturan manajemen beban kerja.
Prasyarat
Versi kernel kluster AnalyticDB for MySQL Anda harus 3.1.6.3 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
Catatan penggunaan
Anda hanya dapat menggunakan perintah WLM untuk memodifikasi aturan pada kluster dengan versi kernel 3.1.10.0 atau lebih baru.
AnalyticDB for MySQL menerapkan kebijakan penghapusan lunak untuk aturan manajemen beban kerja. Artinya, nama aturan yang telah dihapus tidak dapat digunakan kembali untuk aturan baru.
Membuat aturan
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>]Jangan tambahkan spasi di sekitar tanda sama dengan (=).
Parameter
Parameter | Wajib | Deskripsi |
name | Ya | Nama aturan. Catatan Nama aturan harus unik di antara aturan yang ada dan aturan yang telah dihapus. |
type | Ya | Jenis aturan. Tetapkan nilainya ke query. |
action | Ya | Aksi yang dilakukan ketika suatu kueri memenuhi kondisi aturan. Untuk informasi selengkapnya tentang aksi, lihat Aksi. |
predicate | Ya | Kondisi predikat. Sintaks predicate:
|
attrs | Tidak | Parameter attrs diperlukan ketika action diatur ke RESUBMIT_RESOURCE_GROUP, ADD_PROPERTIES, atau BLOCK_WITH_PROB. Untuk informasi tentang cara menentukan attrs, lihat metode konfigurasi di Aksi. Catatan Anda harus membungkus nilai parameter ini dalam tanda kutip tunggal ('). |
resource_group | Tidak | Nama kelompok sumber daya. Nilai default-nya adalah user_default. Catatan Anda dapat masuk ke Konsol AnalyticDB for MySQL, klik ID kluster, lalu buka halaman Resource Group Management untuk melihat kelompok sumber daya kluster tersebut. |
description | Tidak | Deskripsi. Catatan Anda harus membungkus nilai parameter ini dalam tanda kutip tunggal ('). |
compatible_group | Tidak | Kelompok kompatibel. Secara default, aturan dicocokkan dalam urutan prioritas menurun. Ketika sebuah aturan cocok, proses pencocokan berhenti. Anda juga dapat menetapkan kelompok kompatibel untuk aturan yang perlu dicocokkan secara bersamaan. Saat aturan dicocokkan, aturan dengan prioritas tertinggi dicocokkan terlebih dahulu. Jika aturan yang cocok memiliki kelompok kompatibel, aturan tersisa dalam kelompok kompatibel tersebut akan dicocokkan secara bersamaan jika memungkinkan. |
enabled | Tidak | Menentukan apakah aturan diaktifkan. Nilai yang valid:
|
priority | Tidak | Prioritas aturan. Nilai default-nya adalah 0. Setiap kali aturan dicocokkan, hanya aturan dengan prioritas tertinggi yang dicocokkan. Jika beberapa aturan memiliki prioritas yang sama, aturan yang dibuat paling awal akan dicocokkan terlebih dahulu. |
Contoh
Contoh 1: Buat aturan bernama testRule1 yang menghentikan kueri jika nama pengguna adalah test dan persentil ke-50 dari waktu eksekusi historis untuk pola kueri melebihi 60.000 ms.
wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';Hasil berikut dikembalikan:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule1' success | +---------------------------------+Contoh 2: Buat aturan bernama testRule2. Untuk kueri dengan nama pengguna test dan alamat IP pengguna 10.10.10.10, 192.168.0.1, atau 192.0.2.1, aturan ini menambahkan petunjuk
query_priority=lowuntuk mengatur prioritas kueri menjadi rendah.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 berikut dikembalikan:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule2' success | +---------------------------------+Contoh 3: Buat aturan bernama testRule3 untuk kelompok sumber daya testResourceGroup dengan prioritas 5. Aturan ini menghentikan semua kueri SELECT dengan nama pengguna test.
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 berikut dikembalikan:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule3' success | +---------------------------------+
Memodifikasi aturan
Anda hanya dapat menggunakan perintah WLM untuk memodifikasi aturan pada kluster dengan versi kernel 3.1.10.0 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
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>]Jangan tambahkan spasi di sekitar tanda sama dengan (=).
Parameter
Parameter | Wajib | Deskripsi |
id | Tidak | ID aturan. ID aturan bersifat unik, digunakan untuk mencocokkan aturan yang sesuai, dan tidak dapat dimodifikasi. 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 Aturan yang dimodifikasi tidak boleh memiliki nama yang sama dengan aturan yang telah dibuat. Jika tidak, aturan yang dibuat dengan nama yang sama akan ditimpa. |
type | Tidak | Jenis aturan. Tetapkan nilainya ke query. |
action | Tidak | Aksi yang dilakukan ketika suatu kueri memenuhi kondisi aturan. Untuk informasi selengkapnya tentang aksi, lihat Aksi. |
predicate | Tidak | Kondisi predikat. Sintaks predicate:
|
attrs | Tidak | Parameter attrs diperlukan ketika action diatur ke RESUBMIT_RESOURCE_GROUP, ADD_PROPERTIES, atau BLOCK_WITH_PROB. Untuk informasi tentang cara menentukan attrs, lihat metode konfigurasi di Aksi. Anda harus membungkus nilai parameter ini dalam tanda kutip tunggal ('). |
resource_group | Tidak | Nama kelompok sumber daya. Nilai default-nya adalah user_default. Catatan Anda dapat masuk ke Konsol AnalyticDB for MySQL, klik ID kluster, lalu buka halaman Resource Group Management untuk melihat kelompok sumber daya kluster tersebut. |
description | Tidak | Deskripsi. Catatan Anda harus membungkus nilai parameter ini dalam tanda kutip tunggal ('). |
compatible_group | Tidak | Kelompok kompatibel. Secara default, aturan dicocokkan dalam urutan prioritas menurun. Ketika sebuah aturan cocok, proses pencocokan berhenti. Anda juga dapat menetapkan kelompok kompatibel untuk aturan yang perlu dicocokkan secara bersamaan. Saat aturan dicocokkan, aturan dengan prioritas tertinggi dicocokkan terlebih dahulu. Jika aturan yang cocok memiliki kelompok kompatibel, aturan tersisa dalam kelompok kompatibel tersebut akan dicocokkan secara bersamaan jika memungkinkan. |
enabled | Tidak | Menentukan apakah aturan diaktifkan. Nilai yang valid:
|
priority | Tidak | Prioritas aturan. Nilai default-nya adalah 0. Setiap kali aturan dicocokkan, hanya aturan dengan prioritas tertinggi yang dicocokkan. Jika beberapa aturan memiliki prioritas yang sama, aturan yang dibuat paling awal akan dicocokkan terlebih dahulu. |
Contoh
Contoh 1: Ubah nama aturan dengan ID 2 menjadi Rule.
wlm update_rule id=2 name=Rule;Hasil berikut dikembalikan:
+-----------------+ | result | +-----------------+ | update rule 2 | +-----------------+Contoh 2: Modifikasi kondisi aturan testRule1. Aturan ini sekarang menghentikan kueri jika nama pengguna adalah test dan persentil ke-50 dari waktu eksekusi historis untuk pola kueri melebihi 80.000 ms.
wlm update_rule name=testRule1 predicate='user=test && PATTERN_RT_P50>80000';Atau, Anda dapat menggunakan ID aturan testRule1 untuk memodifikasi aturan:
wlm update_rule id=1 predicate='user=test && PATTERN_RT_P50>80000';Hasil berikut dikembalikan:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+Contoh 3: Mengirimkan kueri yang memenuhi kondisi aturan testRule1 ke kelompok sumber daya testgroup untuk dieksekusi.
Sebelum modifikasi, aturan testRule1 menghentikan kueri yang memenuhi kondisi:
wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';Modifikasi aturan testRule1 untuk mengirimkan semua kueri dari kelompok sumber daya saat ini ke kelompok sumber daya testgroup untuk dieksekusi:
wlm update_rule name=testRule1 action=RESUBMIT_RESOURCE_GROUP attrs='{ "resubmit":{ "resource_group": "testgroup" } }'CatatanUntuk informasi tentang cara menentukan attrs, lihat metode konfigurasi di Aksi.
Hasil berikut dikembalikan:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+
Menanyakan aturan
Sintaks
wlm list_rule
[id=<ruleID>]
[name='<ruleName>'\G]Parameter
Parameter | Wajib | Deskripsi |
id | Tidak | ID aturan. Catatan Jika Anda tidak menentukan ID dan nama, semua aturan yang belum dihapus akan ditanyakan, termasuk ID aturannya. |
name | Tidak | Nama aturan. Catatan
|
\G | Tidak | Mencetak hasil kueri berdasarkan kolom. Setiap bidang dicetak pada baris terpisah. |
Contoh
Contoh 1: Menanyakan aturan dengan ID testID1.
wlm list_rule id=1 \G;Hasil berikut dikembalikan:
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: Menanyakan aturan dengan ID testID1 dan nama testRule4.
mysql> wlm list_rule id=1 name='testRule4' \G;Hasil berikut dikembalikan:
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)
Menonaktifkan aturan
Sintaks
wlm disable_rule id=<ruleID>Parameter
Parameter | Wajib | Deskripsi |
id | Ya | ID aturan. Catatan Anda dapat menjalankan perintah |
Contoh
Contoh 1: Menonaktifkan aturan dengan ID testID1.
wlm disable_rule id=1;Hasil berikut dikembalikan:
+------------------+ | result | +------------------+ | disable rule 1 | +------------------+Contoh 2: Menanyakan aturan dengan ID testID1.
wlm list_rule id=1\G;Hasil berikut dikembalikan:
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"}}
Mengaktifkan aturan
Sintaks
wlm enable_rule id=<ruleID>Parameter
Parameter | Wajib | Deskripsi |
id | Ya | ID aturan. Catatan Anda dapat menjalankan perintah |
Contoh
Contoh 1: Mengaktifkan aturan dengan ID testID1.
wlm enable_rule id=1;Hasil berikut dikembalikan:
+----------------+ | result | +----------------+ | enable rule 1 | +----------------+Contoh 2: Menanyakan aturan dengan ID testID1.
wlm list_rule id=1\G;Hasil berikut dikembalikan:
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"}}
Menghapus aturan
Sintaks
wlm delete_rule id=<ruleID>Parameter
Parameter | Wajib | Deskripsi |
id | Ya | ID aturan. Catatan Anda dapat menjalankan perintah |
Contoh
Contoh 1: Menghapus aturan dengan ID testID1.
wlm delete_rule id=1;Hasil berikut dikembalikan:
+----------------+ | result | +----------------+ | delete rule 1 | +----------------+Contoh 2: Menanyakan aturan dengan ID testID1.
wlm list_rule id=1\G;Hasil berikut dikembalikan:
Empty set
Menghitung pattern_hash
Sintaks
wlm calc_pattern_hash <SQL>Parameter
Parameter | Wajib | Deskripsi |
SQL | Ya | Pernyataan SELECT atau pernyataan tulis yang berisi SELECT. |
Contoh
Menghitung pattern_hash untuk pernyataan kueri.
wlm calc_pattern_hash select * from t where a=1 and b=2;Hasil berikut dikembalikan:
+-----------------------------------+----------------------+
| raw_sql | pattern_hash |
+-----------------------------------+----------------------+
| select * from t where a=1 and b=2 | -4759960226441980963 |
+-----------------------------------+----------------------+Mencetak informasi bantuan WLM
Jika Anda menjalankan perintah wlm tanpa parameter apa pun, informasi bantuan akan ditampilkan.
wlm;Hasil berikut dikembalikan:
+---------------------------+-------------------------------------+
| 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 | Bidang | Tipe data | Deskripsi |
Properti kueri | user | String | Pengguna yang mengirim kueri. |
source_ip | String | Alamat IP tempat kueri dikirim. | |
query_task_type | Numerik | Jenis kueri. Nilai yang valid:
| |
query_table_list | Daftar string | Tabel yang dipindai oleh kueri. | |
query_db_list | Daftar string | Database yang dipindai oleh kueri. | |
pattern_hash | Numerik | Nilai hash dari pola kueri, yang digunakan untuk mengidentifikasi kueri dengan pola yang sama. | |
sql | String | Pernyataan SQL asli dari kueri. Penting Properti ini hanya didukung untuk kluster dengan versi kernel 3.1.8.3 atau lebih baru. | |
Metrik waktu proses kueri Catatan Metrik waktu proses kueri digunakan untuk mengontrol kueri setelah masuk ke antrian. | QUERY_PROCESS_TIME | Numerik | Total waktu yang dikonsumsi oleh semua tugas dalam proses kueri. Metrik ini dapat digunakan untuk mengukur secara kasar beban komputasi suatu kueri. Satuan: ms. |
QUERY_EXECUTION_TIME | Numerik | Waktu eksekusi kueri, tidak termasuk waktu antrian dan waktu yang dikonsumsi untuk menghasilkan rencana eksekusi. Satuan: ms. Penting Fungsi | |
QUERY_SUBMITTED_TIME | Numerik | Timestamp saat kueri dibuat. | |
QUERY_TOTAL_TASK | Numerik | Jumlah total tugas dalam rencana eksekusi fisik kueri. | |
QUERY_INPUT_DATA_SIZE | Numerik | Jumlah data yang dibaca oleh kueri. Satuan: MB. | |
QUERY_SHUFFLE_DATA_SIZE | Numerik | Jumlah data yang di-shuffle untuk kueri. Satuan: MB. | |
QUERY_OUTPUT_DATA_SIZE | Numerik | Jumlah data keluaran untuk kueri. Satuan: MB. | |
QUERY_PEAK_MEMORY | Numerik | Memori puncak kueri. Satuan: MB. | |
QUERY_TOTAL_STAGES | Numerik | Jumlah total tahapan dalam rencana eksekusi kueri. | |
Properti pola kueri Catatan Properti pola kueri mencerminkan eksekusi historis kueri. | PATTERN_RT_P50 | Numerik | Persentil ke-50 dari waktu eksekusi historis untuk kueri dengan pola yang sama. Satuan: ms. |
PATTERN_RT_P90 | Numerik | Persentil ke-90 dari waktu eksekusi historis untuk kueri dengan pola yang sama. Satuan: ms. | |
PATTERN_EXECUTION_TIME_P50 | Numerik | Persentil ke-50 dari waktu eksekusi historis (tidak termasuk waktu antrian) untuk kueri dengan pola yang sama. Satuan: ms. | |
PATTERN_EXECUTION_TIME_P90 | Numerik | Persentil ke-90 dari waktu eksekusi historis (tidak termasuk waktu antrian) untuk kueri dengan pola yang sama. Satuan: ms. | |
PATTERN_WALL_TIME_P50 | Numerik | Persentil ke-50 dari waktu dinding historis untuk kueri dengan pola yang sama. Satuan: ms. | |
PATTERN_WALL_TIME_P90 | Numerik | Persentil ke-90 dari waktu dinding historis untuk kueri dengan pola yang sama. Satuan: ms. | |
PATTERN_SHUFFLE_SIZE_AVG | Numerik | Rata-rata jumlah data historis yang di-shuffle untuk kueri dengan pola yang sama. Satuan: byte. | |
PATTERN_PEAK_MEMORY_AVG | Numerik | Rata-rata memori puncak historis untuk kueri dengan pola yang sama. Satuan: byte. | |
PATTERN_INPUT_POSITION_AVG | Numerik | Rata-rata jumlah catatan input historis untuk kueri dengan pola yang sama. Satuan: baris. | |
PATTERN_OUTPUT_POSITION_AVG | Numerik | Rata-rata jumlah catatan keluaran historis untuk kueri dengan pola yang sama. Satuan: baris. |
Lampiran 2: Operator
Operator | Tipe data yang berlaku | Deskripsi |
> | Numerik | Tidak ada |
< | Numerik | Tidak ada |
= | Numerik, string | Tidak ada |
>= | Numerik | Tidak ada |
<= | Numerik | Tidak ada |
!= | Numerik, string | Tidak ada |
in | Daftar string | Memeriksa apakah daftar string memiliki irisan. |
contains | String | Memeriksa apakah suatu string berisi string tertentu. Ini terutama digunakan untuk menanyakan pernyataan SQL asli. Penting Operator ini hanya didukung untuk kluster dengan versi kernel 3.1.8.3 atau lebih baru. |
Lampiran 3: Aksi
Langkah Pengendalian | Deskripsi | Metode konfigurasi attrs |
KILL | Menghentikan kueri. | Tidak ada |
RESUBMIT_RESOURCE_GROUP | Menghentikan kueri yang memenuhi kondisi di kelompok sumber daya saat ini dan mengirimkannya ke kelompok sumber daya lain untuk dieksekusi. | { "resubmit": {"resource_group":"<resource_group_name>"}} resource_group_name: nama kelompok sumber daya. Catatan Anda dapat masuk ke Konsol AnalyticDB for MySQL, klik ID kluster, lalu buka halaman Resource Group Management untuk melihat kelompok sumber daya kluster tersebut. |
ADD_PROPERTIES | Memodifikasi properti kueri. Ini biasanya digunakan untuk memodifikasi prioritas kueri. Anda juga dapat memodifikasi properti kueri lain yang dikonfigurasi oleh petunjuk. | { "add_prop": {"query_priority": "<Tingkat Prioritas>", "force":"false"}}
|
BLOCK_WITH_PROB | Menghentikan kueri dengan probabilitas tertentu sebelum kueri masuk ke antrian. Ini biasanya digunakan untuk pembatasan laju. | { "block_prob": {"prob":<prob_value>}} prob_value: probabilitas menghentikan kueri. Nilainya berkisar antara 0 hingga 1. |