Topik ini menjelaskan cara menggunakan antrian sumber daya di ApsaraDB for ClickHouse.
Informasi latar belakang
ClickHouse open source tidak mendukung antrian sumber daya. Untuk pembatasan pada kompleksitas kueri dalam kluster ApsaraDB for ClickHouse versi V20.8 atau lebih baru, lihat Pembatasan pada Kompleksitas Kueri.
Antrian sumber daya adalah fitur yang ditingkatkan dari ApsaraDB for ClickHouse, dan hanya didukung oleh kluster ApsaraDB for ClickHouse versi V20.3. ClickHouse open source menyediakan mekanisme isolasi memori tingkat pengguna. Secara default, fitur antrian sumber daya tidak diaktifkan saat Anda membeli kluster ApsaraDB for ClickHouse.
Sintaksis antrian sumber daya
Contoh sintaksis berikut menunjukkan cara mengelola antrian sumber daya:
-- Buat antrian sumber daya.
CREATE RESOURCE QUEUE [IF NOT EXISTS | OR REPLACE] nama [ON CLUSTER cluster]
* {[SET] MEMORY = {angka}
* [, CONCURRENCY = {angka}]
* [, PRIORITY = { LOWEST | LOW | NORMAL | HIGH | HIGHEST }]
* [, ISOLATE = {angka}]
* }
* [TO {peran [,...] | ALL | ALL EXCEPT peran [,...]}]
-- Ubah antrian sumber daya tertentu.
ALTER RESOURCE QUEUE [IF NOT EXISTS | OR REPLACE] nama [ON CLUSTER cluster]
* {[SET] MEMORY = {angka}
* [, CONCURRENCY = {angka}]
* [, PRIORITY = { LOWEST | LOW | NORMAL | HIGH | HIGHEST }]
* [, ISOLATE = {angka}]
* }
* [TO {peran [,...] | ALL | ALL EXCEPT peran [,...]}]
-- Periksa antrian sumber daya tertentu.
SHOW CREATE resource queue nama
-- Periksa antrian sumber daya yang sedang digunakan.
SHOW CREATE resource queue current
-- Hapus antrian sumber daya tertentu.
DROP resource queue if exists nama- MEMORY: ukuran kolam memori yang ingin dialokasikan ke antrian sumber daya yang akan dibuat. Jika semua memori node telah dialokasikan ke antrian sumber daya yang ada, antrian sumber daya gagal dibuat.
- CONCURRENCY: jumlah maksimum kueri konkuren yang didukung oleh antrian sumber daya yang akan dibuat. Nilai default: 20. Jika jumlah kueri konkuren dalam antrian sumber daya melebihi batas ini, kueri tambahan akan diblokir. Subkueri yang diinisiasi oleh sistem dihitung sebagai kueri konkuren. Subkueri ini tidak diblokir. Jika parameter CONCURRENCY dari antrian sumber daya diatur ke 20 dan jumlah subkueri konkuren yang diinisiasi sistem dalam antrian sumber daya adalah 25, semua kueri yang diinisiasi pengguna akan diblokir. Setelah jumlah subkueri konkuren yang diinisiasi sistem menjadi kurang dari 20, kueri yang diinisiasi pengguna diproses.
- PRIORITY: prioritas antrian sumber daya yang akan dibuat. Parameter ini menentukan prioritas penjadwalan CPU dan perebutan memori.
- ISOLATE: tingkat isolasi memori antrian sumber daya yang akan dibuat.
- Nilai defaultnya adalah 0, yang menentukan bahwa tidak ada isolasi memori yang dilakukan untuk antrian sumber daya yang akan dibuat. Jika penggunaan memori antrian sumber daya rendah, antrian sumber daya dengan prioritas lebih tinggi dapat sementara merebut memori yang tersedia dari antrian sumber daya tersebut jika diperlukan.
- Jika Anda mengatur parameter ini ke 1, isolasi lunak dilakukan untuk antrian sumber daya yang akan dibuat. Dalam hal ini, antrian sumber daya dengan prioritas lebih tinggi tidak dapat merebut memori yang tersedia dari antrian sumber daya yang akan dibuat.
- Jika Anda mengatur parameter ini ke 2, isolasi absolut dilakukan untuk antrian sumber daya yang akan dibuat. Dalam hal ini, antrian sumber daya dengan prioritas lebih tinggi tidak dapat merebut memori yang tersedia dari antrian sumber daya yang akan dibuat. Antrian sumber daya yang akan dibuat juga tidak dapat merebut memori yang tersedia dari antrian sumber daya dengan prioritas lebih rendah.
- role: pengguna yang terikat pada antrian sumber daya yang Anda buat. Tentukan parameter ini dalam format
To role [,...]. Kueri yang dikirim dari pengguna ini dirutekan ke antrian sumber daya yang Anda buat. Jika pengguna terikat ke beberapa antrian sumber daya, sistem merutekan kueri yang dikirim oleh pengguna ini ke antrian sumber daya dengan prioritas tertinggi.
- target_resource_queue: antrian sumber daya ke mana kueri yang dikirim oleh pengguna dirutekan. Anda juga dapat mengonfigurasi pemaksaan rute untuk kueri dalam file profil pengguna.
- resource_queue_max_wait_ms: periode timeout kueri yang diblokir dalam antrian sumber daya berdasarkan batas konkurensi. Nilai defaultnya adalah 10 detik.
Contoh kode berikut memberikan contoh tentang cara mengelola antrian sumber daya:
CREATE RESOURCE QUEUE IF NOT EXISTS test_queue ON CLUSTER cluster SET
MEMORY = 1073741824, CONCURRENCY = 20, ISOLATE = 0, PRIORITY = NORMAL
TO default;
CREATE RESOURCE QUEUE IF NOT EXISTS anonymous_queue ON CLUSTER cluster SET
MEMORY = 1073741824, CONCURRENCY = 20, ISOLATE = 1, PRIORITY = LOW;
SHOW CREATE resource queue test_queue;
SHOW CREATE resource queue current;
SELECT count (distinct intDiv(number, 10)) FROM numbers(100000) settings target_resource_queue='anonymous_queue';
DROP resource queue if exists test_queue;
DROP resource queue if exists anonymous_queue;Periksa informasi tentang antrian sumber daya
show resource queues;Tabel berikut menjelaskan parameter dalam hasil kueri.
| Parameter | Tipe data | Deskripsi |
| nama | String | Nama antrian sumber daya. |
| concurrency | UInt32 | Jumlah maksimum kueri konkuren yang didukung oleh antrian sumber daya. |
| memory | UInt64 | Ukuran kolam memori yang dialokasikan ke antrian sumber daya. Unit: byte. |
| isolate | UInt8 | Tingkat isolasi memori antrian sumber daya. |
| priority | ENUM8 | Prioritas antrian sumber daya. |
| roles | Array<String> | Pengguna yang terikat pada antrian sumber daya. |
show resource queue stat [CURRENT | ALL];Tabel berikut menjelaskan parameter dalam hasil kueri.
| Parameter | Tipe data | Deskripsi |
| nama | String | Nama antrian sumber daya. |
| running_query | UInt32 | Jumlah kueri yang sedang berjalan dalam antrian sumber daya. |
| waiting_query | UInt32 | Jumlah kueri yang menunggu untuk berjalan dalam antrian sumber daya. |
| grabbing_query | UInt32 | Jumlah kueri yang sementara merebut memori yang tersedia dari antrian sumber daya. Kueri ini tidak termasuk dalam antrian sumber daya. |
| allocated_memory | UInt64 | Ukuran memori yang digunakan oleh kueri yang termasuk dalam antrian sumber daya. Unit: byte. |
| grabbed_memory | UInt64 | Ukuran memori yang sementara direbut oleh kueri yang tidak termasuk dalam antrian sumber daya. Unit: byte. |
| free_memory | UInt64 | Ukuran memori yang tersedia dari antrian sumber daya. Unit: byte. |
Kesalahan yang mungkin terjadi saat kueri berjalan di antrian sumber daya
Kueri habis waktu karena jumlah kueri konkuren melebihi batas konkurensi
- Kode kesalahan: 13005
- Solusi: Kurangi jumlah kueri konkuren pada klien Anda.
Ukuran memori yang digunakan oleh kueri buruk melebihi ukuran kolam memori
- Kode kesalahan: 241
- Solusi: Optimalkan rencana kueri atau tingkatkan ukuran kolam memori yang dialokasikan ke antrian sumber daya.
Antrian sumber daya tertentu ke mana kueri dipaksa dirutekan tidak ada
- Kode kesalahan: 13006
- Solusi: Periksa apakah antrian sumber daya tertentu telah dibuat.
Kueri yang sementara merebut memori dari antrian sumber daya dengan prioritas lebih rendah dihentikan
- Kode kesalahan: 394
- Solusi: Kurangi jumlah kueri konkuren dalam antrian sumber daya yang Anda gunakan, dan ubah prioritas antrian sumber daya.