Aturan Workload Management (WLM) mengontrol perilaku kueri di kluster AnalyticDB for MySQL Data Warehouse Edition. Anda dapat menentukan aturan berdasarkan properti kueri—seperti user, IP sumber, jenis kueri, atau pola eksekusi historis—dan menetapkan aksi seperti mengakhiri kueri, menyesuaikan prioritas, atau mengalihkan kueri ke kelompok sumber daya yang berbeda.
Prasyarat
Pastikan Anda memiliki:
-
Kluster AnalyticDB for MySQL Data Warehouse Edition
-
Versi minor kluster 3.1.6.3 atau lebih baru
Untuk memeriksa atau memperbarui versi minor Anda, lihat Update the minor version of a cluster.
Catatan penggunaan
-
Memodifikasi aturan dengan sintaks WLM memerlukan versi kluster V3.1.10.0 atau lebih baru.
-
AnalyticDB for MySQL menggunakan kebijakan soft delete untuk aturan. Nama aturan yang sebelumnya telah dihapus tidak dapat digunakan kembali untuk aturan baru.
Buat aturan
Sintaks
wlm add_rule
name=<rule_name>
type=query
action=<action>
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<rule_attrs>']
[resource_group=<resource_group>]
[description='<description>']
[compatible_group=<compatible_group_name>]
[enabled=<true|false>]
[priority=<priority>]
Tidak diperbolehkan ada spasi di kedua sisi tanda sama dengan (=).
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
|
Ya |
Nama aturan. Harus unik di antara semua aturan yang ada maupun yang telah dihapus. |
|
|
Ya |
Jenis aturan. Tetapkan ke |
|
|
Ya |
Aksi yang dilakukan saat kueri sesuai. Lihat Actions. |
|
|
Ya |
Kondisi pencocokan yang digabungkan dengan |
|
|
Tidak |
Atribut aksi. Diperlukan ketika |
|
|
Tidak |
Nama kelompok sumber daya. Default: |
|
|
Tidak |
Deskripsi aturan. Bungkus dalam tanda kutip tunggal. |
|
|
Tidak |
Nama grup kompatibilitas. Aturan dalam grup yang sama semuanya dievaluasi ketika salah satu aturan cocok, terlepas dari urutan prioritas. |
|
|
Tidak |
Apakah aturan aktif. Nilai: |
|
|
Tidak |
Prioritas aturan. Default: |
Dalam nilai predicate, tambahkan spasi hanya di kedua sisi operator in. Jangan tambahkan spasi di sekitar operator lainnya.
Contoh
Akhiri kueri berdasarkan user dan latensi pola
Akhiri kueri dari user test yang durasi eksekusi historis P50-nya melebihi 60.000 ms:
wlm add_rule
name=testRule1
type=query
action=kill
predicate='user=test && PATTERN_RT_P50>60000';+---------------------------------+
| result |
+---------------------------------+
| insert rule 'testRule1' success |
+---------------------------------+
Tambahkan petunjuk prioritas kueri berdasarkan user dan IP
Turunkan prioritas kueri dari user test yang berasal dari alamat IP tertentu:
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';+---------------------------------+
| result |
+---------------------------------+
| insert rule 'testRule2' success |
+---------------------------------+
Akhiri kueri SELECT untuk kelompok sumber daya tertentu
Buat aturan dengan prioritas 5 untuk testResourceGroup yang mengakhiri kueri SELECT dari user 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';+---------------------------------+
| result |
+---------------------------------+
| insert rule 'testRule3' success |
+---------------------------------+
Modifikasi aturan
Memodifikasi aturan memerlukan versi kluster V3.1.10.0 atau lebih baru. Untuk memeriksa versi Anda, lihat How do I view the minor version of a cluster?. Untuk memperbarui versi, hubungi dukungan teknis.
Sintaks
wlm update_rule
id=<rule_id>
name=<rule_name>
type=query
action=<action>
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<rule_attrs>']
[resource_group=<resource_group>]
[description='<description>']
[compatible_group=<compatible_group_name>]
[enabled=<true|false>]
[priority=<priority>]
Tidak diperbolehkan ada spasi di kedua sisi tanda sama dengan (=).
Parameter
Semua parameter bersifat opsional untuk update_rule. Tentukan id atau name untuk mengidentifikasi aturan target.
|
Parameter |
Deskripsi |
|
|
ID aturan (unik, tidak dapat diubah). Jalankan |
|
|
Nama aturan. Untuk mengganti nama aturan, tentukan aturan berdasarkan |
|
|
Jenis aturan. Tetapkan ke |
|
|
Aksi yang dilakukan. Lihat Actions. |
|
|
Kondisi pencocokan yang diperbarui. Lihat Properties dan Operators. |
|
|
Atribut aksi yang diperbarui. Diperlukan ketika |
|
|
Nama kelompok sumber daya. Default: |
|
|
Deskripsi aturan. |
|
|
Nama grup kompatibilitas. |
|
|
|
|
|
Prioritas aturan. Default: |
Contoh
Ganti nama aturan
wlm update_rule
id=2
name=Rule;+-----------------+
| result |
+-----------------+
| update rule 2 |
+-----------------+
Perbarui kondisi predikat
Ubah ambang batas latensi P50 testRule1 dari 60.000 ms menjadi 80.000 ms:
wlm update_rule
name=testRule1
predicate='user=test && PATTERN_RT_P50>80000';
Atau gunakan ID aturan:
wlm update_rule
id=1
predicate='user=test && PATTERN_RT_P50>80000';+-----------------+
| result |
+-----------------+
| update rule 1 |
+-----------------+
Ubah aksi KILL menjadi RESUBMIT_RESOURCE_GROUP
Alihkan kueri yang sesuai ke kelompok sumber daya berbeda alih-alih mengakhirinya:
wlm update_rule
name=testRule1
action=RESUBMIT_RESOURCE_GROUP
attrs='{
"resubmit":{
"resource_group": "testgroup"
}
}'
Untuk detail format attrs, lihat Actions.
+-----------------+
| result |
+-----------------+
| update rule 1 |
+-----------------+
Daftar aturan
Sintaks
wlm list_rule
[id=<rule_id>]
[name='<rule_name>'\G]
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
|
Tidak |
Filter berdasarkan ID aturan. Hilangkan |
|
|
Tidak |
Filter berdasarkan nama aturan. Bungkus dalam tanda kutip tunggal. |
|
|
Tidak |
Tampilkan setiap bidang pada baris terpisah. |
Contoh
Daftar aturan berdasarkan ID
wlm list_rule
id=1 \G;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)
Daftar aturan berdasarkan ID dan nama
wlm list_rule
id=1
name='testRule4' \G;
Nonaktifkan aturan
wlm disable_rule id=<rule_id>
Jalankan wlm list_rule untuk menemukan ID aturan.
Contoh
wlm disable_rule id=1;+------------------+
| result |
+------------------+
| disable rule 1 |
+------------------+
Verifikasi bahwa aturan dinonaktifkan (enabled: 0):
wlm list_rule id=1\G;
Aktifkan aturan
wlm enable_rule id=<rule_id>
Jalankan wlm list_rule untuk menemukan ID aturan.
Contoh
wlm enable_rule id=1;+----------------+
| result |
+----------------+
| enable rule 1 |
+----------------+
Verifikasi bahwa aturan diaktifkan (enabled: 1):
wlm list_rule id=1\G;
Hapus aturan
wlm delete_rule id=<rule_id>
Jalankan wlm list_rule untuk menemukan ID aturan. Nama aturan yang dihapus tidak dapat digunakan kembali.
Contoh
wlm delete_rule id=1;+----------------+
| result |
+----------------+
| delete rule 1 |
+----------------+
Verifikasi penghapusan:
wlm list_rule id=1\G;Empty set
Dapatkan hash pola kueri
Gunakan calc_pattern_hash untuk mendapatkan nilai hash dari pola SQL. Anda kemudian dapat menggunakan nilai ini dengan properti pattern_hash dalam predicate untuk menargetkan pola kueri tertentu.
Sintaks
wlm calc_pattern_hash <SQL>
Parameter <SQL> menerima kueri SELECT atau kueri write yang berisi pernyataan SELECT.
Contoh
wlm calc_pattern_hash select * from t where a=1 and b=2;+-----------------------------------+----------------------+
| raw_sql | pattern_hash |
+-----------------------------------+----------------------+
| select * from t where a=1 and b=2 | -4759960226441980963 |
+-----------------------------------+----------------------+
Daftar semua perintah WLM
wlm;+---------------------------+-------------------------------------+
| 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 |
+---------------------------+-------------------------------------+
Referensi
Properti
Properti menentukan aspek-aspek kueri yang akan dievaluasi dalam predicate aturan.
Properti kueri
|
Properti |
Tipe data |
Deskripsi |
|
|
String |
User yang mengirimkan kueri. |
|
|
String |
Alamat IP klien. |
|
|
Numerik |
Jenis kueri: |
|
|
Daftar string |
Tabel yang terlibat dalam kueri. |
|
|
Daftar string |
Database yang terlibat dalam kueri. |
|
|
Numerik |
Nilai hash dari pola SQL. |
|
|
String |
Pernyataan SQL asli. Memerlukan V3.1.8.3 atau lebih baru. |
Properti runtime
Properti runtime mengevaluasi kueri berdasarkan statistik eksekusi saat ini.
|
Properti |
Tipe data |
Unit |
Deskripsi |
|
|
Numerik |
ms |
Total waktu CPU yang dikonsumsi oleh semua tugas. |
|
|
Numerik |
ms |
Durasi eksekusi, tidak termasuk waktu antrian. |
|
|
Numerik |
- |
Timestamp pengiriman. |
|
|
Numerik |
- |
Total tugas dalam rencana eksekusi fisik. |
|
|
Numerik |
MB |
Data yang dibaca oleh kueri. |
|
|
Numerik |
MB |
Data yang di-shuffle selama eksekusi. |
|
|
Numerik |
MB |
Data yang dihasilkan oleh kueri. |
|
|
Numerik |
MB |
Penggunaan memori puncak. |
|
|
Numerik |
- |
Total tahapan dalam rencana eksekusi. |
Properti pola
Properti pola mengevaluasi kueri berdasarkan data eksekusi historis untuk pola SQL tertentu.
|
Properti |
Tipe data |
Unit |
Deskripsi |
|
|
Numerik |
ms |
Durasi eksekusi persentil ke-50. |
|
|
Numerik |
ms |
Durasi eksekusi persentil ke-90. |
|
|
Numerik |
ms |
Durasi eksekusi persentil ke-50, tidak termasuk waktu antrian. |
|
|
Numerik |
ms |
Durasi eksekusi persentil ke-90, tidak termasuk waktu antrian. |
|
|
Numerik |
ms |
Waktu dinding (wall time) persentil ke-50. |
|
|
Numerik |
ms |
Waktu dinding (wall time) persentil ke-90. |
|
|
Numerik |
bytes |
Ukuran rata-rata data shuffle. |
|
|
Numerik |
bytes |
Penggunaan memori puncak rata-rata. |
|
|
Numerik |
- |
Jumlah rata-rata baris input. |
|
|
Numerik |
- |
Jumlah rata-rata baris output. |
Operator
|
Operator |
Tipe yang didukung |
Deskripsi |
|
|
Numerik |
Lebih besar dari. |
|
|
Numerik |
Lebih kecil dari. |
|
|
Numerik, String |
Sama dengan. |
|
|
Numerik |
Lebih besar dari atau sama dengan. |
|
|
Numerik |
Lebih kecil dari atau sama dengan. |
|
|
Numerik, String |
Tidak sama dengan. |
|
|
Daftar string |
Memeriksa apakah dua daftar string saling berpotongan. Tambahkan spasi di kedua sisi operator ini. |
|
|
String |
Memeriksa apakah suatu string berisi string lain. Gunakan dengan properti |
Actions
|
Action |
Deskripsi |
|
|
|
Mengakhiri kueri. |
Tidak diperlukan. |
|
|
Menghentikan eksekusi di kelompok sumber daya saat ini dan mengirim ulang kueri ke kelompok sumber daya yang berbeda. |
|
|
|
Memodifikasi properti kueri seperti prioritas. |
|
|
|
Mengakhiri kueri dengan probabilitas tertentu sebelum masuk antrian. Gunakan untuk pembatasan kecepatan (throttling). |
|
Detail ADD_PROPERTIES:
-
query_priority: Tetapkan sebagai bilangan bulat (0–39, angka lebih tinggi berarti prioritas lebih tinggi) atau string. Untuk informasi lebih lanjut, lihat Priority queue and concurrency of interactive resource groups.Nilai string
Setara numerik
LOWEST5
LOW15
NORMAL25
HIGH35
-
force: Menentukan apakah properti kueri yang sudah ada akan ditimpa. Nilai:true(default untuk V3.1.9.4 dan lebih baru) ataufalse(default untuk versi sebelum V3.1.9.4). Lihat How do I view the minor version of a cluster?.
Detail BLOCK_WITH_PROB:
-
prob: Probabilitas mengakhiri kueri. Nilai valid: 0 hingga 1.