AnalyticDB for MySQL mencakup modul manajemen workload. Anda dapat menggunakan perintah Workload Manager untuk mengonfigurasi aturan guna menerapkan kontrol detail halus terhadap workload dan meningkatkan kesehatan kluster. Topik ini menjelaskan cara membuat, memodifikasi, mengaktifkan, menonaktifkan, dan menghapus aturan tersebut.
Prasyarat
Kluster AnalyticDB for MySQL Anda harus menjalankan kernel versi 3.1.6.3 atau yang lebih baru.
Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.
Catatan
-
Anda hanya dapat menggunakan sintaksis WLM untuk memodifikasi aturan pada kluster yang menjalankan kernel versi 3.1.10.0 atau yang lebih baru.
-
AnalyticDB for MySQL menerapkan kebijakan soft delete untuk aturan. Kebijakan ini mengharuskan setiap nama aturan bersifat unik, sehingga Anda tidak dapat menggunakan kembali nama aturan yang telah dihapus.
Buat aturan
Sintaksis
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 kedua sisi tanda sama dengan (=).
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
name |
Ya |
Nama aturan. Catatan
Nama aturan harus unik, dan nama aturan yang telah dihapus tidak dapat digunakan kembali. |
|
type |
Ya |
Jenis aturan. Harus berupa |
|
action |
Ya |
Aksi yang dilakukan ketika kondisi predikat terpenuhi. Untuk informasi selengkapnya tentang aksi, lihat Actions. |
|
predicate |
Ya |
Kondisi predikat. Sintaksis predikat:
Catatan
|
|
attrs |
Tidak |
Parameter ini wajib jika parameter Untuk detail konfigurasi, lihat Actions. Catatan
Nilai parameter harus diapit tanda petik tunggal ('). |
|
resource_group |
Tidak |
Nama kelompok sumber daya. Nilai default-nya adalah Catatan
Untuk melihat kelompok sumber daya suatu kluster, login ke AnalyticDB for MySQL console, klik ID kluster target, lalu buka halaman Resource Groups. |
|
description |
Tidak |
Deskripsi aturan. Catatan
Nilai parameter harus diapit tanda petik tunggal ('). |
|
compatible_group |
Tidak |
Kelompok kompatibilitas. Secara default, sistem mengevaluasi aturan dalam urutan prioritas menurun dan berhenti setelah kecocokan pertama ditemukan. Untuk mengevaluasi beberapa aturan terhadap satu kueri, tetapkan aturan-aturan tersebut ke dalam kelompok kompatibilitas yang sama. Ketika suatu kueri cocok dengan aturan dalam kelompok kompatibilitas, sistem akan melanjutkan evaluasi terhadap aturan lain dalam kelompok tersebut dan menerapkan semua aturan yang cocok. |
|
enabled |
Tidak |
Menentukan apakah aturan diaktifkan. Nilai yang valid:
|
|
priority |
Tidak |
Prioritas aturan. Nilai default-nya adalah 0. Sistem mengevaluasi aturan dalam urutan prioritas menurun. Secara default, hanya aturan pertama yang cocok dengan kueri yang diterapkan. Jika beberapa aturan yang cocok memiliki prioritas yang sama, aturan yang dibuat lebih awal akan diterapkan. |
Contoh
-
Contoh 1: Buat aturan bernama
testRule1. Aturan ini menghentikan kueri jika pengguna adalahtestdan persentil ke-50 dari waktu eksekusi historis 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. Aturan ini menambahkan petunjukquery_priority=lowuntuk mengatur prioritas kueri menjadi rendah bagi kueri yang diajukan oleh penggunatestdari alamat IP10.10.10.10,192.168.0.1, atau192.0.2.1.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
testRule3dengan prioritas 5 untuk kelompok sumber dayatestResourceGroup. Aturan ini menghentikan semua kueriSELECTdari penggunatest.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 | +---------------------------------+
Modifikasi aturan
Anda hanya dapat menggunakan perintah WLM untuk memodifikasi aturan pada kluster AnalyticDB for MySQL yang menjalankan kernel versi 3.1.10.0 atau yang lebih baru.
Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.
Sintaksis
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 kedua sisi tanda sama dengan (=).
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
id |
Tidak |
ID unik aturan. ID ini digunakan untuk mengidentifikasi aturan dan tidak dapat dimodifikasi. Catatan
Anda dapat menjalankan pernyataan |
|
name |
Tidak |
Nama aturan. Untuk memodifikasi nama, Anda harus mengidentifikasi aturan berdasarkan ID-nya. Catatan
Nama aturan baru tidak boleh sama dengan nama aturan yang sudah ada. Jika tidak, aturan yang sudah ada dengan nama tersebut akan ditimpa. |
|
type |
Tidak |
Jenis aturan. Harus berupa |
|
action |
Tidak |
Aksi yang dilakukan ketika kondisi predikat terpenuhi. Untuk informasi selengkapnya tentang aksi, lihat Actions. |
|
predicate |
Tidak |
Kondisi predikat. Sintaksis predikat:
Catatan
|
|
attrs |
Tidak |
Parameter ini wajib jika parameter Untuk detail konfigurasi, lihat Actions. Nilai parameter harus diapit tanda petik tunggal ('). |
|
resource_group |
Tidak |
Nama kelompok sumber daya. Nilai default-nya adalah Catatan
Untuk melihat kelompok sumber daya suatu kluster, login ke AnalyticDB for MySQL console, klik ID kluster target, lalu buka halaman Resource Groups. |
|
description |
Tidak |
Deskripsi aturan. Catatan
Nilai parameter harus diapit tanda petik tunggal ('). |
|
compatible_group |
Tidak |
Kelompok kompatibilitas. Secara default, sistem mengevaluasi aturan dalam urutan prioritas menurun dan berhenti setelah kecocokan pertama ditemukan. Untuk mengevaluasi beberapa aturan terhadap satu kueri, tetapkan aturan-aturan tersebut ke dalam kelompok kompatibilitas yang sama. Ketika suatu kueri cocok dengan aturan dalam kelompok kompatibilitas, sistem akan melanjutkan evaluasi terhadap aturan lain dalam kelompok tersebut dan menerapkan semua aturan yang cocok. |
|
enabled |
Tidak |
Menentukan apakah aturan diaktifkan. Nilai yang valid:
|
|
priority |
Tidak |
Prioritas aturan. Nilai default-nya adalah 0. Sistem mengevaluasi aturan dalam urutan prioritas menurun. Secara default, hanya aturan pertama yang cocok dengan kueri yang diterapkan. Jika beberapa aturan yang cocok memiliki prioritas yang sama, aturan yang dibuat lebih awal akan diterapkan. |
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 predikat aturan
testRule1. Perubahan ini menghentikan kueri jika pengguna adalahtestdan persentil ke-50 dari waktu eksekusi historis pola kueri melebihi 80.000 ms.wlm update_rule name=testRule1 predicate='user=test && PATTERN_RT_P50>80000';Atau, Anda dapat memodifikasi aturan dengan menggunakan ID-nya:
wlm update_rule id=1 predicate='user=test && PATTERN_RT_P50>80000';Hasil berikut dikembalikan:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+ -
Contoh 3: Kirim ulang kueri yang sesuai dengan aturan
testRule1ke kelompok sumber dayatestgroupuntuk dieksekusi.Sebelum dimodifikasi, aturan
testRule1menghentikan kueri yang sesuai dengan predikatnya:wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';Modifikasi aturan
testRule1agar mengirim ulang kueri yang sesuai ke kelompok sumber dayatestgroup:wlm update_rule name=testRule1 action=RESUBMIT_RESOURCE_GROUP attrs='{ "resubmit":{ "resource_group": "testgroup" } }'CatatanUntuk detail konfigurasi, lihat Actions.
Hasil berikut dikembalikan:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+
Query rules
Sintaksis
wlm list_rule
[id=<ruleID>]
[name='<ruleName>'\G]
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
id |
Tidak |
ID aturan. Catatan
Jika Anda tidak menentukan parameter |
|
name |
Tidak |
Nama aturan. Catatan
|
|
\G |
Tidak |
Menampilkan hasil kueri dalam format vertikal, dengan setiap bidang pada baris terpisah. |
Contoh
-
Contoh 1: Query aturan dengan ID 1.
wlm list_rule id=1 \G;Output:
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: Query aturan dengan ID 1 dan nama 'testRule4'.
mysql> wlm list_rule id=1 name='testRule4' \G;Output:
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 workload
Sintaksis
wlm disable_rule id=<ruleID>
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
id |
Ya |
Menentukan ID aturan. Catatan
Gunakan perintah |
Contoh
-
Contoh 1: Nonaktifkan aturan dengan ID 1.
wlm disable_rule id=1;Hasil contoh:
+------------------+ | result | +------------------+ | disable rule 1 | +------------------+ -
Contoh 2: Verifikasi bahwa aturan telah dinonaktifkan.
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
Sintaksis
wlm enable_rule id=<ruleID>
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
id |
Ya |
Menentukan ID aturan. Catatan
Gunakan perintah |
Contoh
-
Contoh 1: Aktifkan aturan 1.
wlm enable_rule id=1;Hasil contoh:
+----------------+ | result | +----------------+ | enable rule 1 | +----------------+ -
Contoh 2: Aturan Kueri 1.
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
Sintaksis
wlm delete_rule id=<ruleID>
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
id |
Ya |
Menentukan ID aturan. Catatan
Gunakan perintah |
Contoh
-
Contoh 1: Hapus aturan dengan ID 1.
wlm delete_rule id=1;Output contoh:
+----------------+ | result | +----------------+ | delete rule 1 | +----------------+ -
Contoh 2: Verifikasi bahwa aturan dengan ID 1 telah dihapus.
wlm list_rule id=1\G;Output contoh:
Empty set
Hitung pattern_hash
Sintaksis
wlm calc_pattern_hash <SQL>
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
SQL |
Ya |
Pernyataan SELECT, baik berdiri sendiri maupun di dalam kueri write. |
Contoh
Menghitung pattern_hash suatu 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 |
+-----------------------------------+----------------------+
Bantuan WLM
Jalankan perintah wlm tanpa parameter apa pun untuk menampilkan informasi bantuan.
wlm;
Perintah mengembalikan hasil berikut:
+---------------------------+-------------------------------------+
| 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: Properties
|
Kategori |
Parameter |
Tipe |
Deskripsi |
|
Properti kueri |
user |
string |
Pengguna yang mengajukan kueri. |
|
source_ip |
string |
Alamat IP sumber kueri. |
|
|
query_task_type |
numeric |
Jenis kueri. Nilai yang valid:
|
|
|
query_table_list |
string list |
Tabel yang dipindai oleh kueri. |
|
|
query_db_list |
string list |
Database yang dipindai oleh kueri. |
|
|
pattern_hash |
numeric |
Nilai hash dari pola SQL. Nilai ini mengidentifikasi kueri yang termasuk dalam pola yang sama. |
|
|
sql |
string |
Pernyataan SQL asli dari kueri. Penting
Hanya didukung pada kluster yang menjalankan versi minor 3.1.8.3 atau yang lebih baru. |
|
|
Metrik runtime kueri Catatan
Gunakan metrik runtime kueri untuk mengontrol kueri setelah dimasukkan ke antrian. |
QUERY_PROCESS_TIME |
numeric |
Total waktu yang dikonsumsi oleh semua tugas kueri. Metrik ini memberikan ukuran perkiraan beban kerja komputasi kueri. Satuan: ms. |
|
QUERY_EXECUTION_TIME |
numeric |
Waktu eksekusi kueri, tidak termasuk waktu antrian dan waktu untuk menghasilkan rencana eksekusi. Satuan: ms. Penting
Fungsi |
|
|
QUERY_SUBMITTED_TIME |
numeric |
Waktu saat kueri dibuat. |
|
|
QUERY_TOTAL_TASK |
numeric |
Jumlah total tugas dalam rencana eksekusi fisik. |
|
|
QUERY_INPUT_DATA_SIZE |
numeric |
Jumlah data yang dibaca oleh kueri. Satuan: MB. |
|
|
QUERY_SHUFFLE_DATA_SIZE |
numeric |
Jumlah data yang di-shuffle untuk kueri. Satuan: MB. |
|
|
QUERY_OUTPUT_DATA_SIZE |
numeric |
Jumlah data keluaran untuk kueri. Satuan: MB. |
|
|
QUERY_PEAK_MEMORY |
numeric |
Penggunaan memori puncak kueri. Satuan: MB. |
|
|
QUERY_TOTAL_STAGES |
numeric |
Jumlah total stage dalam rencana eksekusi. |
|
|
Properti pola SQL Catatan
Properti pola SQL menunjukkan performa eksekusi historis kueri. |
PATTERN_RT_P50 |
numeric |
Persentil ke-50 dari waktu eksekusi historis untuk kueri dengan pola ini. Satuan: ms. |
|
PATTERN_RT_P90 |
numeric |
Persentil ke-90 dari waktu eksekusi historis untuk kueri dengan pola ini. Satuan: ms. |
|
|
PATTERN_EXECUTION_TIME_P50 |
numeric |
Persentil ke-50 dari waktu eksekusi historis untuk kueri dengan pola ini, tidak termasuk waktu antrian. Satuan: ms. |
|
|
PATTERN_EXECUTION_TIME_P90 |
numeric |
Persentil ke-90 dari waktu eksekusi historis untuk kueri dengan pola ini, tidak termasuk waktu antrian. Satuan: ms. |
|
|
PATTERN_WALL_TIME_P50 |
numeric |
Persentil ke-50 dari wall time historis untuk kueri dengan pola ini. Satuan: ms. |
|
|
PATTERN_WALL_TIME_P90 |
numeric |
Persentil ke-90 dari wall time historis untuk kueri dengan pola ini. Satuan: ms. |
|
|
PATTERN_SHUFFLE_SIZE_AVG |
numeric |
Rata-rata jumlah data yang di-shuffle untuk kueri dengan pola ini. Satuan: byte. |
|
|
PATTERN_PEAK_MEMORY_AVG |
numeric |
Rata-rata penggunaan memori puncak untuk kueri dengan pola ini. Satuan: byte. |
|
|
PATTERN_INPUT_POSITION_AVG |
numeric |
Rata-rata jumlah baris input untuk kueri dengan pola ini. Satuan: baris. |
|
|
PATTERN_OUTPUT_POSITION_AVG |
numeric |
Rata-rata jumlah baris keluaran untuk kueri dengan pola ini. Satuan: baris. |
Lampiran 2: Operators
|
Operator |
Tipe |
Deskripsi |
|
> |
numeric |
N/A |
|
< |
numeric |
N/A |
|
= |
numeric, string |
N/A |
|
>= |
numeric |
N/A |
|
<= |
numeric |
N/A |
|
!= |
numeric, string |
N/A |
|
in |
string list |
Menentukan apakah daftar string saling berpotongan. |
|
contains |
string |
Menentukan apakah suatu string mengandung substring tertentu. Operator ini terutama digunakan untuk mengkueri pernyataan SQL asli. Penting
Hanya didukung pada kluster yang menjalankan versi minor 3.1.8.3 atau yang lebih baru. |
Lampiran 3: Actions
|
Action |
Deskripsi |
Konfigurasi |
|
KILL |
Menghentikan kueri. |
N/A |
|
RESUBMIT_RESOURCE_GROUP |
Menghentikan kueri yang sesuai dalam kelompok sumber daya saat ini dan mengirimkannya kembali ke kelompok sumber daya lain. |
{ "resubmit": {"resource_group":"<resource_group_name>"}} resource_group_name: nama kelompok sumber daya tujuan. Catatan
Anda dapat login ke AnalyticDB for MySQL console, klik ID kluster target, lalu buka halaman Resource Groups untuk melihat kelompok sumber daya kluster tersebut. |
|
ADD_PROPERTIES |
Memodifikasi properti kueri. Aksi ini biasanya mengubah prioritas kueri tetapi juga dapat memodifikasi properti kueri lain yang diatur dengan hint. |
{ "add_prop": {"query_priority": "<priority_level>", "force":"false"}}
|
|
BLOCK_WITH_PROB |
Menghentikan kueri dengan probabilitas tertentu sebelum dimasukkan ke antrian. Aksi ini biasanya digunakan untuk Pembatasan kecepatan. |
{ "block_prob": {"prob":<prob_value>}} prob_value: Probabilitas penghentian. Nilainya harus antara 0 dan 1. |