All Products
Search
Document Center

AnalyticDB:Mengelola workload menggunakan resource group

Last Updated:Mar 29, 2026

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.

Catatan Manajemen resource group dan manajemen resource queue saling eksklusif. Mengaktifkan resource group secara otomatis menonaktifkan resource queue. Untuk detail tentang resource queue, lihat Gunakan resource queue untuk melakukan manajemen workload.

Persyaratan versi

VersiConsole SwitchingVersi lama
V6.0 V6.6.1.0 atau lebih baruDidukung melalui Konsol
V6.0 sebelum V6.6.1.0Kirim tiket
Catatan Untuk instans V7.0, resource group hanya dapat dikelola melalui Pernyataan SQL—bukan melalui Konsol. Untuk mengaktifkan atau menonaktifkan manajemen resource group pada instans V7.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

ParameterDeskripsiWajibBawaanNilai valid
CPU_RATE_LIMITBagian CPU saat beberapa grup bersaing.Ya0–100; jumlah seluruh grup ≤ 100
MEMORY_LIMITPersentase total memori yang dicadangkan untuk grup.Tidak00–100; jumlah seluruh grup ≤ 100
CONCURRENCYTransaksi konkuren maksimum.Tidak501 hingga max_connections
MEMORY_SHARED_QUOTAPersentase memori grup yang dibagi (berlawanan dengan tetap per kueri).Tidak800–100
MEMORY_SPILL_RATIOAmbang batas memori untuk operator intensif memori yang dialihkan ke disk.Tidak00–100

Parameter V7.0

ParameterDeskripsiWajibBawaanNilai valid
CPU_MAX_PERCENTUtilisasi CPU maksimum untuk grup (batas keras).Ya0–100; jumlah seluruh grup dapat melebihi 100
CPU_WEIGHTBobot alokasi CPU relatif saat grup bersaing.Tidak500–500
MEMORY_LIMITMemori maksimum per resource group, dalam MB. -1 menggunakan statement_mem.Tidak-10 hingga gp_vmem_protect_limit (eksklusif)
CONCURRENCYTransaksi konkuren maksimum.Tidak501 hingga max_connections
MIN_COSTThreshold biaya optimizer. Kueri di bawah threshold ini menggunakan resource global.Tidak00–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:

  1. Memori tetap intra-grup: dialokasikan ke setiap slot kueri dalam grup.

  2. Memori bersama intra-grup: dibagi di antara semua kueri dalam grup.

  3. Memori bersama global: bagian yang tidak dialokasikan ketika jumlah nilai MEMORY_LIMIT seluruh 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).

imageimage

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.

image

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:

  1. Jika gp_resgroup_memory_query_fixed_mem > 0, setiap kueri dibatasi pada nilai tersebut.

  2. Jika gp_resgroup_memory_query_fixed_mem = 0 (bawaan):

    • Jika MEMORY_LIMIT = -1, batasnya adalah statement_mem.

    • Jika MEMORY_LIMIT > -1, batasnya adalah MAX(MEMORY_LIMIT / CONCURRENCY, statement_mem).

Contoh: Resource group dengan MEMORY_LIMIT = 2048 MB dan CONCURRENCY = 5 mengalokasikan 400 MB per kueri secara bawaan.

Skenariogp_resgroup_memory_query_fixed_memstatement_memMemori yang digunakan
etl1800 MB900 MB800 MB (memori tetap didahulukan)
etl2Tidak diatur300 MB400 MB (bawaan, karena 300 MB < 400 MB)
etl3Tidak diatur700 MB700 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 oleh statement_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

Penting
  • V6.0: Resource group admin_group mengelola workload sistem dan mencadangkan 10% CPU serta 10% memori. Untuk semua grup lain (termasuk default_group dan grup yang Anda buat), alokasi CPU gabungan tidak boleh melebihi 90% dan alokasi memori gabungan tidak boleh melebihi 90%. Grup admin_group dan default_group tidak dapat dihapus.

  • V7.0: Terdapat tiga grup bawaan: admin_group dan system_group untuk workload sistem, serta default_group untuk 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)

  1. Login ke Konsol AnalyticDB untuk PostgreSQL.

  2. Di pojok kiri atas, pilih wilayah Anda.

  3. Klik ID instans.

  4. Di panel navigasi kiri, klik Workload Management.

  5. 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.

Catatan Untuk instans V7.0, Anda hanya dapat mengeksekusi Pernyataan SQL untuk menggunakan resource group.

Buat resource group

Anda memerlukan akun database dengan hak istimewa untuk membuat kelompok sumber daya.

Buat melalui Konsol

  1. Di halaman Workload Management, klik Create Resource Group.

  2. 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

  1. Di halaman Workload Management, klik Edit.

  2. 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

  1. Di bagian Allocate Resource Groups pada halaman Workload Management, klik ikon edit pada kartu resource group target.

  2. 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.

VersiGrupDapat Dihapus
V6.0admin_groupTidak
V6.0default_groupTidak
V7.0admin_groupTidak
V7.0default_groupTidak
V7.0system_groupTidak
DROP RESOURCE GROUP <group_name>;

Pantau resource group

Pantau resource group V6.0

SELECT * FROM gp_toolkit.gp_resgroup_status;
FieldDeskripsi
rsgnameNama resource group
groupidID resource group
num_runningJumlah kueri yang sedang berjalan
num_queueingJumlah kueri yang sedang menunggu
num_queuedTotal kueri yang pernah masuk antrian (historis)
num_executedTotal kueri yang dieksekusi
total_queue_durationTotal waktu tunggu kueri, dalam detik
cpu_usageUtilisasi CPU per node komputasi
memory_usedTotal memori yang digunakan, dalam MB
memory_availableTotal memori yang tersedia, dalam MB
memory_quota_usedMemori tetap yang digunakan, dalam MB
memory_quota_availableMemori tetap yang tersedia, dalam MB
memory_quota_grantedMemori tetap yang dialokasikan, dalam MB
memory_shared_usedMemori bersama yang digunakan, dalam MB
memory_shared_availableMemori bersama yang tersedia, dalam MB
memory_shared_grantedMemori bersama yang dialokasikan, dalam MB

Pantau resource group V7.0

Status antrian kueri:

SELECT * FROM gp_toolkit.gp_resgroup_status;
FieldDeskripsi
groupidID resource group
groupnameNama resource group
num_runningJumlah transaksi yang sedang berjalan
num_queueingJumlah transaksi yang sedang mengantri
num_queuedJumlah transaksi yang pernah mengantri
num_executedJumlah transaksi yang dieksekusi
total_queue_durationTotal durasi antrian, dalam detik

Penggunaan CPU dan memori per node komputasi:

SELECT * FROM gp_toolkit.gp_resgroup_status_per_host;
FieldDeskripsi
groupidID resource group
groupnameNama resource group
hostnameHostname node komputasi
cpu_usageUtilisasi CPU, dalam %
memory_usageMemori 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.

  1. Login ke Konsol AnalyticDB untuk PostgreSQL.

  2. Di pojok kiri atas, pilih wilayah Anda.

  3. Klik ID instans.

  4. Di panel navigasi kiri, klik Workload Management, lalu klik Disable Resource Group Management.

Langkah selanjutnya