AnalyticDB for PostgreSQL berfungsi langsung tanpa konfigurasi tambahan untuk sebagian besar kasus penggunaan. Namun, pada skenario dengan kebutuhan performa spesifik—seperti konkurensi koneksi tinggi, kueri yang intensif memori, atau workload campuran dengan prioritas berbeda—penyetelan parameter database dapat meningkatkan throughput dan pemanfaatan resource secara signifikan.
Tingkat parameter
Parameter diterapkan pada empat tingkat. Parameter yang diatur pada tingkat lebih rendah akan menggantikan parameter yang sama pada tingkat lebih tinggi dalam cakupannya.
| Tingkat | Cakupan | Cara mengatur |
|---|---|---|
| System | Semua pengguna di seluruh database dalam satu instans | Ajukan tiket kepada personel operasi dan maintenance (O&M) |
| Database | Semua session dalam database tertentu | ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT }; |
| Role | Semua session untuk pengguna tertentu | ALTER ROLE name SET parameter { TO | = } { value | DEFAULT }; |
| Session | Hanya session saat ini | SET parameter { TO | = } { value | DEFAULT }; |
Mulailah dengan penyetelan tingkat session. Ubah parameter pada tingkat yang lebih tinggi hanya setelah memastikan perubahan tersebut tidak memengaruhi pengguna atau workload lain.
Periksa nilai saat ini dari suatu parameter
Sebelum mengubah parameter, periksa nilai saat ini:
-- Periksa parameter tertentu dalam session saat ini
SHOW statement_mem;
-- Periksa semua parameter untuk database saat ini
SELECT name, setting, unit, context FROM pg_settings WHERE name = 'statement_mem';Parameter tingkat sistem
Parameter berikut memerlukan tiket untuk dimodifikasi. Untuk deskripsi lengkapnya, lihat Referensi parameter konfigurasi Greenplum.
| Parameter | Bawaan | Tipe/Unit | Nilai valid |
|---|---|---|---|
gp_autostats_mode | ON_NO_STATS | STRING | NONE, ON_CHANGE, ON_NO_STATS |
gp_autostats_mode_in_functions | NONE | STRING | NONE, ON_CHANGE, ON_NO_STATS |
gp_max_slices | 50 | INT | 0–1000 |
log_rotation_size | 102400 | KB | 0–4194304 |
master.rds_enable_vmem_protect | on | STRING | on, off |
master.rds_max_non_super_conns | 500 | INT | 10–1000 |
max_stack_depth | 2048 | KB | 100–2048000 |
max_statement_mem | 2048000 | KB | 32768–2147483647 |
optimizer | on | STRING | on, off |
random_page_cost | 4 | DOUBLE | 0–1000 |
rds.rds_enable_aliyun_oss_endpoint | on | STRING | on, off |
rds.rds_enable_oss_endpoint_whitelist_check | on | STRING | on, off |
rds_max_super_conns | 50 | INT | 10–100 |
segment.rds_enable_vmem_proctect | off | STRING | on, off |
segment.rds_max_non_super_conns | 1000 | INT | 10–3000 |
statement_mem | 2047000 | KB | 50–2147483647 |
statement_timeout | 10800000 | INT | 0–2147483647 |
Parameter koneksi
Parameter ini mengontrol jumlah koneksi bersamaan yang dapat diterima oleh instans. Konfigurasi yang tidak tepat dapat menyebabkan error koneksi pada skenario konkurensi tinggi.
| Parameter | Berlaku | Ketergantungan | Deskripsi |
|---|---|---|---|
max_connections | Restart instans | Nilai node komputasi harus 3–5 kali nilai node koordinator | Jumlah maksimum koneksi bersamaan per node. Alih-alih menaikkan max_connections secara langsung, sesuaikan rds_max_non_super_conns sebagai gantinya—parameter ini berlaku tanpa perlu restart. Untuk koneksi singkat dengan konkurensi tinggi, atur rds_max_non_super_conns ke nilai antara 500 dan nilai max_connections. |
max_prepared_transactions | Restart instans | Atur ke nilai yang sama dengan max_connections. 2 × max_prepared_transactions harus melebihi rds_max_non_super_conns + rds_max_super_conns. | Jumlah maksimum transaksi dalam status two-phase commit (2PC). Jika terjadi error pada kondisi konkurensi tinggi, naikkan nilai ini. |
rds_max_non_super_conns | Reload konfigurasi | Harus lebih kecil dari max_connections. rds_max_non_super_conns + rds_max_super_conns tidak boleh melebihi max_connections. Nilai node komputasi harus 3–5 kali nilai node koordinator. | Jumlah maksimum koneksi untuk non-superuser. Menyesuaikan parameter ini merupakan cara utama untuk mengelola batas koneksi. |
rds_max_super_conns | Reload konfigurasi | Batasan yang sama seperti rds_max_non_super_conns. | Jumlah maksimum koneksi untuk superuser. Biasanya tidak perlu disesuaikan. |
Jika Anda mencapai batas koneksi: Tingkatkan rds_max_non_super_conns (berlaku segera melalui reload). Jika batas tersebut sudah mencapai nilai max_connections, naikkan terlebih dahulu max_connections (memerlukan restart), lalu tingkatkan rds_max_non_super_conns.
Parameter memori
Parameter ini mengontrol alokasi memori untuk kueri dan penggunaan bersama di antara session. Lakukan penyetelan ketika kueri gagal karena error kehabisan memori (OOM) atau ketika memori kurang dimanfaatkan.
| Parameter | Unit | Berlaku | Ketergantungan | Deskripsi |
|---|---|---|---|---|
shared_buffers | KB | Restart instans | Untuk workload tabel berorientasi baris, atur ke 25% dari memori instans atau lebih tinggi pada node komputasi. | Ukuran pool buffer bersama. Atur secara terpisah untuk node koordinator dan node komputasi. Cache pada node koordinator menyimpan tabel kamus data; node komputasi menyimpan cache tabel berorientasi baris. Tabel Append-optimized column-oriented (AOCO) tidak dipengaruhi oleh pengaturan ini. Jika instans memiliki lebih dari 100.000 tabel, tingkatkan nilai ini pada kedua jenis node. |
temp_buffers | KB | Reload konfigurasi | — | Ukuran buffer sementara yang digunakan untuk akses session-level ke tabel temporary. Bawaan: 8 MB. Tingkatkan nilai ini pada tingkat session untuk meningkatkan performa pada tabel temporary berukuran besar. |
gp_vmem_protect_limit | MB | Restart instans | gp_vmem_protect_limit = gp_vmem / acting_primary_segments | Memori maksimum yang dapat digunakan oleh semua proses postgres pada satu node komputasi. Kueri akan gagal jika memerlukan memori melebihi batas ini. Atur secara terpisah untuk node komputasi primary dan secondary. Hitung nilai yang sesuai: gp_vmem = ((SWAP + RAM) - (7,5 GB + 0,05 × RAM)) / 1,7 lalu gp_vmem_protect_limit = gp_vmem / acting_primary_segments. Jika kueri gagal karena error memori, tingkatkan nilai ini. Untuk mengatur batas memori per kueri, gunakan parameter antrian sumber daya—lihat Gunakan resource queues untuk manajemen workload. |
gp_vmem_protect_segworker_cache_limit | KB | Restart instans | — | Memori maksimum yang di-cache per proses pelaksana kueri pada node komputasi. Jika instans memiliki banyak koneksi atau proses idle, turunkan nilai ini untuk membebaskan memori bagi kueri aktif. Atur secara terpisah untuk setiap node komputasi. |
gp_resqueue_memory_policy | — | Reload konfigurasi | — | Kebijakan manajemen memori. eager_free melepaskan memori di akhir setiap tahap rencana kueri, sehingga tersedia untuk tahap berikutnya—mengurangi risiko OOM tetapi menambah overhead. auto mendistribusikan memori berdasarkan statement_mem dan batas memori antrian sumber daya. |
statement_mem | KB | Reload konfigurasi | Aktif ketika gp_resqueue_memory_policy diatur ke auto. Tidak boleh melebihi max_statement_mem. | Memori yang dialokasikan per kueri pada host. Jika kueri memerlukan memori melebihi batas ini, data akan ditulis ke file disk sementara. Hitung nilai yang sesuai: statement_mem = (gp_vmem_protect_limit GB × 0,9) / max_expected_concurrent_queries. Contohnya, dengan gp_vmem_protect_limit = 8 GB dan 40 kueri bersamaan yang diharapkan: (8 GB × 0,9) / 40 = 184 MB. |
max_statement_mem | KB | Reload konfigurasi | (seghost_physical_memory) / (average_number_concurrent_queries) | Batas atas alokasi memori per kueri. Mencegah error OOM pada node komputasi ketika statement_mem diatur terlalu tinggi. Hitung nilai yang sesuai: max_statement_mem = seghost_physical_memory / average_number_concurrent_queries. |
Parameter workload
Parameter ini mengontrol alokasi CPU dan prioritas kueri di antara workload bersamaan.
| Parameter | Nilai valid | Berlaku | Ketergantungan | Deskripsi |
|---|---|---|---|---|
gp_resqueue_priority | BOOLEAN | Restart instans | — | Mengaktifkan atau menonaktifkan prioritisasi kueri. Saat dinonaktifkan, pengaturan prioritas pada resource queue tidak berpengaruh selama waktu proses. Nonaktifkan prioritisasi pada skenario sensitif latensi di mana semua kueri harus bersaing secara setara untuk CPU. |
gp_resqueue_priority_cpucores_per_segment | 0,1–512,0 | Restart instans | — | Jumlah core CPU yang dialokasikan untuk setiap node komputasi. Atur nilai ini agar sesuai dengan jumlah CPU aktual instans saat dibuat. Nilai yang salah menyebabkan pemanfaatan CPU tidak optimal dan membuat prioritisasi kueri tidak andal. |
gp_resqueue_priority_sweeper_interval | 500–15000 ms | Restart instans | gp_resqueue_priority harus diaktifkan | Interval pembaruan perhitungan pemanfaatan CPU untuk kueri aktif. Interval yang lebih pendek meningkatkan akurasi penegakan prioritas tetapi menambah overhead CPU. |
Pertimbangan untuk gp_resqueue_priority: Menonaktifkan prioritisasi kueri menghilangkan overhead penjadwalan dan dapat meningkatkan throughput untuk workload seragam. Jika workload Anda mencampur kueri sensitif latensi dan kueri batch, pertahankan prioritisasi aktif dan tetapkan prioritas melalui resource queue. Untuk informasi lebih lanjut, lihat Gunakan resource queues untuk manajemen workload.