Resource group memberikan kontrol detail halus terhadap CPU, memori, dan konkurensi di tingkat akun database. Tetapkan akun berbeda ke resource group terpisah agar pekerjaan ETL, kueri pelaporan, dan workload interaktif tidak saling bersaing untuk resource yang sama.
Persyaratan versi
| Versi | Console Switching | Versi lama |
|---|---|---|
| V6.0 V6.6.1.0 atau lebih baru | Didukung melalui Konsol | — |
| V6.0 sebelum V6.6.1.0 | — | Kirim tiket |
Pernyataan SET, RESET, dan SHOW tidak tunduk pada pengaturan resource group.
Untuk memeriksa versi minor instans Anda, lihat Lihat versi minor suatu instans.
Cara kerja resource group
Setiap resource group menetapkan batas untuk CPU, memori, dan konkurensi. Anda menetapkan satu atau beberapa akun database ke resource group tersebut. Kueri yang dikirim oleh akun tersebut dikelola dalam batas grup tersebut.
Ketika resource group mencapai batas konkurensinya, kueri baru masuk antrian dalam urutan first-in first-out (FIFO) hingga tersedia slot. Resource CPU dibagi secara proporsional di antara grup aktif, dan satu grup aktif dapat menggunakan seluruh CPU yang tersedia.
Parameter resource group
Parameter berbeda antara instans V6.0 dan V7.0.
Parameter V6.0
| Parameter | Deskripsi | Wajib | Bawaan | Nilai valid |
|---|---|---|---|---|
CPU_RATE_LIMIT | Bagian CPU saat beberapa grup bersaing. | Ya | — | 0–100; jumlah seluruh grup ≤ 100 |
MEMORY_LIMIT | Persentase total memori yang dicadangkan untuk grup. | Tidak | 0 | 0–100; jumlah seluruh grup ≤ 100 |
CONCURRENCY | Transaksi konkuren maksimum. | Tidak | 50 | 1 hingga max_connections |
MEMORY_SHARED_QUOTA | Persentase memori grup yang dibagi (berlawanan dengan tetap per kueri). | Tidak | 80 | 0–100 |
MEMORY_SPILL_RATIO | Ambang batas memori untuk operator intensif memori yang dialihkan ke disk. | Tidak | 0 | 0–100 |
Parameter V7.0
| Parameter | Deskripsi | Wajib | Bawaan | Nilai valid |
|---|---|---|---|---|
CPU_MAX_PERCENT | Utilisasi CPU maksimum untuk grup (batas keras). | Ya | — | 0–100; jumlah seluruh grup dapat melebihi 100 |
CPU_WEIGHT | Bobot alokasi CPU relatif saat grup bersaing. | Tidak | 50 | 0–500 |
MEMORY_LIMIT | Memori maksimum per resource group, dalam MB. -1 menggunakan statement_mem. | Tidak | -1 | 0 hingga gp_vmem_protect_limit (eksklusif) |
CONCURRENCY | Transaksi konkuren maksimum. | Tidak | 50 | 1 hingga max_connections |
MIN_COST | Threshold biaya optimizer. Kueri di bawah threshold ini menggunakan resource global. | Tidak | 0 | 0–2147483647 |
Untuk detail tentang max_connections, statement_mem, dan gp_vmem_protect_limit, lihat Optimasi parameter performa.
Manajemen memori (V6.0)
V6.0 membagi memori menjadi tiga pool:
Memori tetap intra-grup: dialokasikan ke setiap slot kueri dalam grup.
Memori bersama intra-grup: dibagi di antara semua kueri dalam grup.
Memori bersama global: bagian yang tidak dialokasikan ketika jumlah nilai
MEMORY_LIMITseluruh grup kurang dari 100.
Saat kueri dijalankan, kueri tersebut mengambil dari memori tetap terlebih dahulu. Jika memori tetap tidak mencukupi, kueri tersebut meminta memori bersama, lalu memori bersama global. Jika ketiganya habis, kueri gagal dengan error kehabisan memori (OOM).


Parameter MEMORY_SHARED_QUOTA mengontrol pembagian antara memori tetap dan memori bersama dalam suatu grup:
MEMORY_SHARED_QUOTA = 100: seluruh memori grup bersifat bersama.MEMORY_SHARED_QUOTA < 100: memori dibagi secara proporsional menjadi bagian tetap dan bersama.

Untuk workload umum, ukur memori tetap intra-grup agar mampu menangani sebagian besar kueri, dan pertahankan memori bersama untuk kueri yang membutuhkan ruang tambahan.
Manajemen memori (V7.0)
V7.0 menggunakan tiga parameter untuk menentukan memori per kueri:
Jika
gp_resgroup_memory_query_fixed_mem > 0, setiap kueri dibatasi pada nilai tersebut.Jika
gp_resgroup_memory_query_fixed_mem = 0(bawaan):Jika
MEMORY_LIMIT = -1, batasnya adalahstatement_mem.Jika
MEMORY_LIMIT > -1, batasnya adalahMAX(MEMORY_LIMIT / CONCURRENCY, statement_mem).
Contoh: Resource group dengan MEMORY_LIMIT = 2048 MB dan CONCURRENCY = 5 mengalokasikan 400 MB per kueri secara bawaan.
| Skenario | gp_resgroup_memory_query_fixed_mem | statement_mem | Memori yang digunakan |
|---|---|---|---|
| etl1 | 800 MB | 900 MB | 800 MB (memori tetap didahulukan) |
| etl2 | Tidak diatur | 300 MB | 400 MB (bawaan, karena 300 MB < 400 MB) |
| etl3 | Tidak diatur | 700 MB | 700 MB (statement_mem > bawaan) |
Manajemen CPU (V6.0)
CPU_RATE_LIMIT mengontrol bagian time slice CPU yang diterima grup saat bersaing dengan grup lain. Grup dengan CPU_RATE_LIMIT = 40 mendapatkan dua kali lipat CPU dibandingkan grup dengan CPU_RATE_LIMIT = 20 saat keduanya aktif. Jika hanya satu grup yang menjalankan kueri, grup tersebut dapat menggunakan seluruh CPU yang tersedia.
Manajemen CPU (V7.0)
V7.0 menggunakan dua parameter komplementer:
CPU_MAX_PERCENT: batas maksimum utilisasi CPU per grup.CPU_WEIGHT: rasio alokasi relatif saat grup bersaing secara simultan.
Contoh: rg1 memiliki CPU_MAX_PERCENT = 30 dan CPU_WEIGHT = 100. rg2 memiliki CPU_MAX_PERCENT = 60 dan CPU_WEIGHT = 50.
Jika hanya rg1 yang aktif: rg1 dapat menggunakan hingga 30% CPU; rg2 dapat menggunakan hingga 60%.
Jika keduanya aktif: time slice CPU dialokasikan dengan rasio 100:50 hingga salah satu grup mencapai batas
CPU_MAX_PERCENT-nya. Setelah rg1 mencapai 30%, sisa CPU dialokasikan ke rg2.
Disk spilling (V6.0)
MEMORY_SPILL_RATIO menetapkan ambang batas memori di mana operator intensif memori (HashAgg, Join, Sort) mengalihkan hasil antara ke disk.
MEMORY_SPILL_RATIO > 0: spilling dimulai saat penggunaan memori untuk transaksi mencapai persentase ini.MEMORY_SPILL_RATIO = 0: ambang batas spill ditentukan olehstatement_mem.
Kurangi MEMORY_SPILL_RATIO untuk memulai spilling lebih awal dan mengurangi tekanan memori di bawah workload berat. Tingkatkan nilainya untuk menjaga lebih banyak komputasi di memori untuk workload kecil yang sensitif terhadap latensi.
Resource group bawaan
V6.0: Resource group
admin_groupmengelola workload sistem dan mencadangkan 10% CPU serta 10% memori. Untuk semua grup lain (termasukdefault_groupdan grup yang Anda buat), alokasi CPU gabungan tidak boleh melebihi 90% dan alokasi memori gabungan tidak boleh melebihi 90%. Grupadmin_groupdandefault_grouptidak dapat dihapus.V7.0: Terdapat tiga grup bawaan:
admin_groupdansystem_groupuntuk workload sistem, sertadefault_groupuntuk semua pengguna lainnya. Tidak satu pun dari grup ini dapat dihapus.
Aktifkan manajemen resource group
Mengaktifkan manajemen resource group akan me-restart instans, sehingga instans tidak tersedia selama sekitar 5 menit. Jadwalkan proses ini pada jam sepi.
Aktifkan melalui Konsol (V6.0 V6.6.1.0 atau lebih baru)
Login ke Konsol AnalyticDB untuk PostgreSQL.
Di pojok kiri atas, pilih wilayah Anda.
Klik ID instans.
Di panel navigasi kiri, klik Workload Management.
Klik Enable Resource Group Management, lalu klik OK.
Setelah diaktifkan, sistem secara otomatis membuat resource group default_group. Untuk melihat data pemantauan resource group, buka Monitoring and Alerts > Instance Monitoring dan klik tab Resource Group Monitoring.
Aktifkan melalui tiket (V6.0 sebelum V6.6.1.0; semua instans V7.0)
Kirim tiket untuk mengaktifkan atau menonaktifkan manajemen resource group.
Buat resource group
Anda memerlukan akun database dengan hak istimewa untuk membuat kelompok sumber daya.
Buat melalui Konsol
Di halaman Workload Management, klik Create Resource Group.
Di bagian Resource Group Settings, konfigurasikan parameter, lalu klik Save.
Buat melalui SQL
CREATE RESOURCE GROUP <group_name> WITH (group_attribute=value [, ... ]);Contoh V6.0:
CREATE RESOURCE GROUP etl_group WITH (
CPU_RATE_LIMIT = 30,
MEMORY_LIMIT = 20,
CONCURRENCY = 10,
MEMORY_SHARED_QUOTA = 70,
MEMORY_SPILL_RATIO = 20
);Contoh V7.0:
CREATE RESOURCE GROUP etl_group WITH (
CPU_MAX_PERCENT = 40,
CPU_WEIGHT = 100,
CONCURRENCY = 10,
MEMORY_LIMIT = 2048,
MIN_COST = 0
);Lihat pengaturan resource group
Lihat melalui Konsol
Di halaman Workload Management, bagian Resource Group Settings mencantumkan semua resource group beserta parameter saat ini.
Lihat melalui SQL
SELECT * FROM gp_toolkit.gp_resgroup_config;Ubah pengaturan resource group
Ubah melalui Konsol
Di halaman Workload Management, klik Edit.
Atur ulang pengaturan konkurensi, CPU, atau memori, lalu klik Save.
Ubah melalui SQL
Hanya akun istimewa yang dapat mengubah pengaturan resource group. admin_group tidak dapat diubah di V6.0; admin_group dan system_group tidak dapat diubah di V7.0.
V6.0:
ALTER RESOURCE GROUP <group_name>
SET CONCURRENCY | CPU_RATE_LIMIT | MEMORY_LIMIT | MEMORY_SHARED_QUOTA | MEMORY_SPILL_RATIO <value>;V7.0:
ALTER RESOURCE GROUP <group_name>
SET CPU_MAX_PERCENT | CPU_WEIGHT | CONCURRENCY | MEMORY_LIMIT | MIN_COST <value>;Contoh:
-- Atur konkurensi menjadi 20 untuk grup test
ALTER RESOURCE GROUP test SET CONCURRENCY 20;
-- Atur batas CPU menjadi 20% untuk test_pg1 (V6.0)
ALTER RESOURCE GROUP test_pg1 SET CPU_RATE_LIMIT 20;
-- Atur batas CPU menjadi 20% untuk test_pg1 (V7.0)
ALTER RESOURCE GROUP test_pg1 SET CPU_MAX_PERCENT 20;Tetapkan akun database ke resource group
Setiap resource group dapat dikaitkan dengan beberapa akun database, tetapi setiap akun hanya dapat menjadi anggota satu resource group. Akun yang tidak secara eksplisit ditetapkan akan kembali ke default_group. Akun istimewa secara bawaan termasuk dalam default_group.
Untuk detail tentang pembuatan akun database, lihat Buat akun database.
Tetapkan melalui Konsol
Di bagian Allocate Resource Groups pada halaman Workload Management, klik ikon edit pada kartu resource group target.
Pilih akun database dari daftar drop-down Role, lalu klik OK.
Tetapkan melalui SQL
Hanya akun istimewa yang dapat mengaitkan akun database dengan resource group.
-- Tetapkan akun yang sudah ada ke resource group
ALTER ROLE <user_name> RESOURCE GROUP <group_name>;
-- Tetapkan resource group saat membuat akun
CREATE ROLE <user_name> WITH LOGIN RESOURCE GROUP <group_name>;Hapus resource group
Hapus melalui Konsol
Di halaman Workload Management, temukan resource group yang ingin dihapus, klik Delete di kolom Actions, lalu klik OK.
Hapus melalui SQL
Hanya akun istimewa yang dapat menghapus resource group. Grup sistem bawaan tidak dapat dihapus.
| Versi | Grup | Dapat Dihapus |
|---|---|---|
| V6.0 | admin_group | Tidak |
| V6.0 | default_group | Tidak |
| V7.0 | admin_group | Tidak |
| V7.0 | default_group | Tidak |
| V7.0 | system_group | Tidak |
DROP RESOURCE GROUP <group_name>;Pantau resource group
Pantau resource group V6.0
SELECT * FROM gp_toolkit.gp_resgroup_status;| Field | Deskripsi |
|---|---|
rsgname | Nama resource group |
groupid | ID resource group |
num_running | Jumlah kueri yang sedang berjalan |
num_queueing | Jumlah kueri yang sedang menunggu |
num_queued | Total kueri yang pernah masuk antrian (historis) |
num_executed | Total kueri yang dieksekusi |
total_queue_duration | Total waktu tunggu kueri, dalam detik |
cpu_usage | Utilisasi CPU per node komputasi |
memory_used | Total memori yang digunakan, dalam MB |
memory_available | Total memori yang tersedia, dalam MB |
memory_quota_used | Memori tetap yang digunakan, dalam MB |
memory_quota_available | Memori tetap yang tersedia, dalam MB |
memory_quota_granted | Memori tetap yang dialokasikan, dalam MB |
memory_shared_used | Memori bersama yang digunakan, dalam MB |
memory_shared_available | Memori bersama yang tersedia, dalam MB |
memory_shared_granted | Memori bersama yang dialokasikan, dalam MB |
Pantau resource group V7.0
Status antrian kueri:
SELECT * FROM gp_toolkit.gp_resgroup_status;| Field | Deskripsi |
|---|---|
groupid | ID resource group |
groupname | Nama resource group |
num_running | Jumlah transaksi yang sedang berjalan |
num_queueing | Jumlah transaksi yang sedang mengantri |
num_queued | Jumlah transaksi yang pernah mengantri |
num_executed | Jumlah transaksi yang dieksekusi |
total_queue_duration | Total durasi antrian, dalam detik |
Penggunaan CPU dan memori per node komputasi:
SELECT * FROM gp_toolkit.gp_resgroup_status_per_host;| Field | Deskripsi |
|---|---|
groupid | ID resource group |
groupname | Nama resource group |
hostname | Hostname node komputasi |
cpu_usage | Utilisasi CPU, dalam % |
memory_usage | Memori yang digunakan pada node komputasi, dalam MB |
Identifikasi kueri yang mengantri
Untuk menemukan kueri yang menunggu karena batas konkurensi, kueri pg_stat_activity:
-- V7.0: kueri yang mengantri menunjukkan wait_event_type = 'ResourceGroup'
SELECT pid, usename, state, wait_event_type, query
FROM pg_stat_activity
WHERE wait_event_type = 'ResourceGroup';
-- V6.0: kueri yang mengantri menunjukkan waiting_reason = 'group'
SELECT pid, usename, state, waiting_reason, query
FROM pg_stat_activity
WHERE waiting_reason = 'group';Jika sejumlah besar kueri menunggu dalam resource group karena batas CONCURRENCY tercapai, tingkatkan kapasitas konkurensi resource group tersebut untuk memastikan performa kueri.
Nonaktifkan manajemen resource group
Menonaktifkan manajemen resource group akan mengalihkan instans kembali ke manajemen resource queue dan me-restart instans, menyebabkan downtime sekitar 5 menit. Jadwalkan proses ini pada jam sepi.
Login ke Konsol AnalyticDB untuk PostgreSQL.
Di pojok kiri atas, pilih wilayah Anda.
Klik ID instans.
Di panel navigasi kiri, klik Workload Management, lalu klik Disable Resource Group Management.