Topik ini menjelaskan cara membuat dan menggunakan antrian sumber daya di AnalyticDB for PostgreSQL. Anda dapat menggunakan antrian sumber daya untuk mengelola dan mengisolasi sumber daya sistem.
Ikhtisar
Sumber daya CPU dan memori pada instance database terbatas. Sumber daya tersebut memengaruhi kinerja query database. Jika beban kerja mencapai ambang batas, semua query akan bersaing untuk mendapatkan sumber daya, yang berpotensi menurunkan kinerja query secara keseluruhan dan memengaruhi operasi bisnis yang sensitif terhadap latensi.
AnalyticDB for PostgreSQL menyediakan antrian sumber daya untuk membantu Anda mengelola beban kerja sistem. Berdasarkan kebutuhan bisnis, Anda dapat menentukan jumlah query konkuren yang dapat diproses oleh database, ukuran memori yang tersedia untuk setiap query, serta jumlah sumber daya CPU yang dialokasikan untuk setiap query. Dengan konfigurasi ini, sistem dapat mengalokasikan sumber daya sesuai harapan dan memberikan kinerja query yang optimal.
Izin yang diperlukan
Untuk membuat dan menggunakan antrian sumber daya, Anda harus menggunakan akun awal atau akun istimewa dengan izin RDS_SUPERUSER.
Buat antrian sumber daya
Sintaks:
CREATE RESOURCE QUEUE nama WITH (queue_attribute=nilai [, ... ])
Parameter queue_attribute menentukan atribut dari antrian sumber daya. Nilai yang valid:
ACTIVE_STATEMENTS=integer
[ MAX_COST=float [COST_OVERCOMMIT={TRUE|FALSE}] ]
[ MIN_COST=float ]
[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
[ MEMORY_LIMIT='memory_units' ]
MAX_COST=float [ COST_OVERCOMMIT={TRUE|FALSE} ]
[ ACTIVE_STATEMENTS=integer ]
[ MIN_COST=float ]
[ PRIORITY={MIN|LOW|MEDIUM|HIGH|MAX} ]
[ MEMORY_LIMIT='memory_units' ]Parameter | Deskripsi |
ACTIVE_STATEMENTS | Jumlah maksimum query aktif dalam antrian sumber daya pada satu waktu. Query aktif merujuk pada query yang sedang dieksekusi. |
MEMORY_LIMIT | Ukuran memori maksimum yang dapat digunakan oleh semua query dalam antrian sumber daya pada satu node komputasi.
|
MAX_COST | Biaya maksimum dari sebuah query dalam antrian sumber daya. Nilai default: -1, yang menentukan biaya tidak terbatas. Catatan Biaya query dari antrian sumber daya diestimasi oleh query optimizer dari AnalyticDB for PostgreSQL. |
COST_OVERCOMMIT | Parameter ini didukung hanya jika Anda menentukan parameter MAX_COST.
|
MIN_COST | Biaya minimum dari sebuah query dalam antrian sumber daya. Query dengan biaya kurang dari nilai parameter MIN_COST akan langsung dieksekusi tanpa dimasukkan ke dalam antrian. |
PRIORITY | Prioritas dari antrian sumber daya. Query dalam antrian sumber daya dengan prioritas lebih tinggi dialokasikan lebih banyak sumber daya CPU untuk eksekusi. Nilai yang valid:
|
Saat membuat antrian sumber daya, Anda harus menentukan salah satu parameter ACTIVE_STATEMENTS atau MAX_COST. Jika tidak, pembuatan antrian akan gagal.
CREATE RESOURCE QUEUE adhoc2 WITH (MEMORY_LIMIT='2000MB');
ERROR: setidaknya satu ambang batas ("ACTIVE_STATEMENTS", "MAX_COST") harus ditentukanKonfigurasikan jumlah maksimum query aktif.
Saat membuat antrian sumber daya, jalankan pernyataan berikut untuk menetapkan jumlah maksimum query aktif dalam antrian:
CREATE RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=3);Contohnya, antrian sumber daya bernama
adhocdibuat dengan maksimum tiga query aktif yang diizinkan pada waktu tertentu. Jika tiga query aktif sedang berjalan, query baru akan dimasukkan ke dalam antrian hingga salah satu dari query tersebut selesai dieksekusi.Konfigurasikan batas memori atas.
Saat membuat antrian sumber daya, jalankan pernyataan berikut untuk menetapkan ukuran memori maksimum yang dapat digunakan oleh semua query dalam antrian:
CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=20, MEMORY_LIMIT='2000MB');Contohnya, antrian sumber daya bernama myqueue dibuat dengan maksimum 20 query aktif yang diizinkan pada waktu tertentu, dan semua query dalam antrian dapat menggunakan maksimum 2.000 MB memori. Saat mengeksekusi query, memori yang tersedia untuk parameter
MEMORY_LIMITatauACTIVE_STATEMENTSdapat dikonsumsi pada node komputasi. Dalam hal ini, setiap query dalam antrianmyqueuedapat menggunakan maksimum 100 MB memori. Jika query memerlukan memori tambahan, Anda dapat menggunakan parameterstatement_memuntuk menyetel ukuran memori untuk query tersebut. Nilai parameter ini harus lebih kecil dari nilai parameterMEMORY_LIMITdanmax_statement_mem. Contoh:SET statement_mem='1GB'; SELECT * FROM test_adbpg WHERE col='adb4pg' ORDER BY id; RESET statement_mem;Konfigurasikan prioritas antrian sumber daya.
Anda dapat menetapkan prioritas untuk antrian sumber daya yang berbeda guna mengontrol penggunaan sumber daya CPU oleh query dalam antrian. Misalnya, jika AnalyticDB for PostgreSQL menerima banyak query konkuren, sistem akan mengalokasikan lebih banyak sumber daya ke query dalam antrian dengan prioritas lebih tinggi dibandingkan dengan antrian dengan prioritas lebih rendah. Hal ini memastikan bahwa antrian dengan prioritas lebih tinggi memiliki cukup sumber daya CPU untuk mengeksekusi query.
Saat membuat antrian sumber daya, Anda dapat menetapkan prioritas untuk antrian tersebut. Contoh:
CREATE RESOURCE QUEUE executive WITH (ACTIVE_STATEMENTS=3, PRIORITY=MAX);Anda juga dapat memodifikasi prioritas antrian setelah pembuatan. Untuk informasi lebih lanjut, lihat bagian "Modifikasi Konfigurasi Antrian Sumber Daya" dalam topik ini.
CatatanPengaturan PRIORITY untuk antrian sumber daya berbeda dari pengaturan ACTIVE_STATEMENTS dan MEMORY_LIMIT.
Nilai parameter ACTIVE_STATEMENTS dan MEMORY_LIMIT menentukan apakah query diterima ke dalam antrian dan akhirnya dieksekusi.
Pengaturan PRIORITY memastikan bahwa setelah sistem mulai mengeksekusi query, sumber daya CPU yang tersedia dialokasikan secara dinamis berdasarkan status sistem dan prioritas antrian tempat query tersebut berada.
Sebagai contoh, ketika AnalyticDB for PostgreSQL sedang mengeksekusi query dalam antrian dengan prioritas lebih rendah, query dalam antrian dengan prioritas lebih tinggi diterima dan siap untuk dieksekusi. AnalyticDB for PostgreSQL mengalokasikan lebih banyak sumber daya CPU ke query dari antrian dengan prioritas lebih tinggi dan mengurangi sumber daya CPU untuk query dalam antrian dengan prioritas lebih rendah. Aturan alokasi sumber daya CPU adalah sebagai berikut:
Sistem mengalokasikan jumlah sumber daya CPU yang sama untuk query dalam antrian dengan prioritas yang sama.
Jika sistem menerima query dalam antrian dengan prioritas tinggi, sedang, dan rendah, ia mengalokasikan 90% sumber daya CPU untuk query dalam antrian dengan prioritas tinggi. Dari sisa 10% sumber daya CPU, sistem mengalokasikan 90% untuk query dalam antrian dengan prioritas sedang dan 10% untuk query dalam antrian dengan prioritas rendah.
Setelah membuat antrian sumber daya, Anda dapat memeriksa status dan batas antrian dari tabel pg_resqueue.
SELECT * FROM pg_resqueue WHERE rsqname='adhoc';Anda tidak dapat membuat antrian sumber daya dalam blok transaksi. Contoh:
BEGIN
CREATE RESOURCE QUEUE test_q WITH (ACTIVE_STATEMENTS=3, PRIORITY=MAX);
ERROR: CREATE RESOURCE QUEUE tidak dapat dijalankan di dalam blok transaksiTidak semua pernyataan SQL dibatasi oleh antrian sumber daya.
Jika parameter
resource_select_onlydisetel ke on, pernyataanSELECT,SELECT INTO,CREATE TABLE AS SELECT, danDECLARE CURSORdibatasi oleh antrian sumber daya.Jika parameter resource_select_only disetel ke off, pernyataan INSERT, UPDATE, dan DELETE juga dibatasi oleh antrian sumber daya selain
SELECT,SELECT INTO,CREATE TABLE AS SELECT, danDECLARE CURSOR.Di AnalyticDB for PostgreSQL, parameter
resource_select_onlydisetel ke off secara default.
Tetapkan pengguna ke antrian sumber daya
Setelah membuat antrian sumber daya, Anda harus menetapkan satu atau lebih pengguna ke antrian tersebut agar AnalyticDB for PostgreSQL dapat mengelola sumber daya untuk query pengguna dalam antrian.
Jika pengguna tidak ditetapkan ke antrian sumber daya, AnalyticDB for PostgreSQL akan menetapkan pengguna tersebut ke antrian sumber daya pg_default.
Antrian pg_default memungkinkan eksekusi hingga 500 query aktif secara konkuren tanpa batasan biaya. Prioritas antrian ini adalah MEDIUM.
Jalankan salah satu pernyataan berikut untuk menetapkan pengguna ke antrian sumber daya:
ALTER ROLE nama RESOURCE QUEUE nama_antrian;
CREATE ROLE nama WITH LOGIN RESOURCE QUEUE nama_antrian;Anda dapat menetapkan antrian sumber daya saat pengguna dibuat atau mengubah antrian yang telah ditetapkan setelah pengguna dibuat.
Pengguna hanya dapat termasuk dalam satu antrian sumber daya.
Hapus pengguna dari antrian sumber daya
Jalankan pernyataan berikut untuk menghapus pengguna dari antrian sumber daya:
ALTER ROLE nama_role RESOURCE QUEUE none;Modifikasi konfigurasi antrian sumber daya
Anda dapat menggunakan pernyataan berikut untuk memodifikasi konfigurasi antrian sumber daya.
Memodifikasi jumlah query aktif.
ALTER RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=5);Memodifikasi ukuran memori maksimum yang dapat digunakan oleh semua query dan biaya maksimum dari sebuah query.
ALTER RESOURCE QUEUE adhoc WITH (MAX_COST=-1.0, MEMORY_LIMIT='2GB');Memodifikasi prioritas.
ALTER RESOURCE QUEUE adhoc WITH (PRIORITY=LOW); ALTER RESOURCE QUEUE reporting WITH (PRIORITY=HIGH);
Hapus antrian sumber daya
Jalankan pernyataan berikut untuk menghapus antrian sumber daya:
DROP RESOURCE QUEUE nama;Anda tidak diizinkan menghapus antrian sumber daya yang berisi item berikut:
Pengguna yang ditetapkan.
Query dalam keadaan menunggu.
Kesalahan umum dan pemecahan masalah
ERROR: must be superuser to alter resource queues
Penyebab: Akun database Anda tidak memiliki izin yang cukup. Untuk membuat dan mengelola antrian sumber daya, Anda harus menggunakan akun awal atau akun istimewa dengan izin RDS_SUPERUSER.
Solusi: Gunakan akun awal atau akun istimewa dengan izin RDS_SUPERUSER. Anda juga dapat memberikan peran RDS_SUPERUSER ke akun database Anda menggunakan akun awal atau akun istimewa.
ALTER ROLE nama_role WITH RDS_SUPERUSER;