Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache tanda waktu penerapan. Tentukan 0 agar nilai ini ditentukan sebagai pecahan shared_buffers. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 0-131072 |
| Jenis parameter | statik |
| Documentation | commit_timestamp_buffers |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Kelipatan "work_mem" untuk digunakan pada tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 2 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Penggunaan halaman besar di Linux atau Windows. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
ukuran_halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Ukuran halaman besar yang harus diminta. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Batasi ukuran baca dan tulis data. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 1-128 |
| Jenis parameter | dynamic |
| Documentation | io_combine_limit |
io_max_combine_limit
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Batas seluruh server yang membatasi io_combine_limit. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 1-128 |
| Jenis parameter | dynamic |
| Documentation | io_max_combine_limit |
io_max_concurrency
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah maksimum IO yang dapat dijalankan satu proses secara bersamaan. |
| Jenis data | bilangan bulat |
| Nilai standar | 64 |
| Nilai yang diizinkan | -1-1024 |
| Jenis parameter | statik |
| Documentation | io_max_concurrency |
io_method
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih metode untuk menjalankan I/O asinkron. |
| Jenis data | enumerasi |
| Nilai standar | worker |
| Nilai yang diizinkan | worker,sync |
| Jenis parameter | statik |
| Documentation | io_method |
io_workers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah proses pekerja IO, untuk io_method=worker. |
| Jenis data | bilangan bulat |
| Nilai standar | 3 |
| Nilai yang diizinkan | 1-32 |
| Jenis parameter | dynamic |
| Documentation | io_workers |
logical_decoding_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk decoding logis. Memori sebesar ini dapat digunakan oleh setiap buffer pengurutan ulang internal sebelum meluap ke disk. |
| Jenis data | bilangan bulat |
| Nilai standar | 65536 |
| Nilai yang diizinkan | 64-2147483647 |
| Jenis parameter | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan. Ini termasuk operasi seperti VACUUM dan CREATE INDEX. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
Memori Bersama Dinamis Minimum (min_dynamic_shared_memory)
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah memori bersama dinamis yang dicadangkan saat startup. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache anggota MultiXact. |
| Jenis data | bilangan bulat |
| Nilai standar | 32 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache offset MultiXact. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache pesan LISTEN/NOTIFY. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | notify_buffers |
serializable_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache transaksi yang dapat diserialisasikan. |
| Jenis data | bilangan bulat |
| Nilai standar | 32 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | serializable_buffers |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
subtransaction_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache subtransaksi. Tentukan 0 agar nilai ini ditentukan sebagai pecahan shared_buffers. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 0-131072 |
| Jenis parameter | statik |
| Documentation | subtransaction_buffers |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
penyangga_transaksi
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache status transaksi. Tentukan 0 agar nilai ini ditentukan sebagai pecahan shared_buffers. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 0-131072 |
| Jenis parameter | statik |
| Documentation | penyangga_transaksi |
vacuum_buffer_usage_limit
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer untuk VACUUM, ANALYZE, dan autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 0-16777216 |
| Jenis parameter | dynamic |
| Documentation | batas_penggunaan_buffer_vakum |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk ruang kerja kueri. Memori sebanyak ini dapat digunakan oleh setiap operasi pengurutan internal dan tabel hash sebelum beralih ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache tanda waktu penerapan. Tentukan 0 agar nilai ini ditentukan sebagai pecahan shared_buffers. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 0-131072 |
| Jenis parameter | statik |
| Documentation | commit_timestamp_buffers |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Kelipatan "work_mem" untuk digunakan pada tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 2 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Penggunaan halaman besar di Linux atau Windows. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
ukuran_halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Ukuran halaman besar yang harus diminta. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Batasi ukuran baca dan tulis data. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 16 |
| Jenis parameter | baca-saja |
| Documentation | io_combine_limit |
logical_decoding_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk decoding logis. Memori sebesar ini dapat digunakan oleh setiap buffer pengurutan ulang internal sebelum meluap ke disk. |
| Jenis data | bilangan bulat |
| Nilai standar | 65536 |
| Nilai yang diizinkan | 64-2147483647 |
| Jenis parameter | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan. Ini termasuk operasi seperti VACUUM dan CREATE INDEX. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
Memori Bersama Dinamis Minimum (min_dynamic_shared_memory)
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah memori bersama dinamis yang dicadangkan saat startup. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache anggota MultiXact. |
| Jenis data | bilangan bulat |
| Nilai standar | 32 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache offset MultiXact. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache pesan LISTEN/NOTIFY. |
| Jenis data | bilangan bulat |
| Nilai standar | 16 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | notify_buffers |
serializable_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache transaksi yang dapat diserialisasikan. |
| Jenis data | bilangan bulat |
| Nilai standar | 32 |
| Nilai yang diizinkan | 16-131072 |
| Jenis parameter | statik |
| Documentation | serializable_buffers |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
subtransaction_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache subtransaksi. Tentukan 0 agar nilai ini ditentukan sebagai pecahan shared_buffers. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 0-131072 |
| Jenis parameter | statik |
| Documentation | subtransaction_buffers |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
penyangga_transaksi
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer khusus yang digunakan untuk cache status transaksi. Tentukan 0 agar nilai ini ditentukan sebagai pecahan shared_buffers. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 0-131072 |
| Jenis parameter | statik |
| Documentation | penyangga_transaksi |
vacuum_buffer_usage_limit
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer untuk VACUUM, ANALYZE, dan autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 0-16777216 |
| Jenis parameter | dynamic |
| Documentation | batas_penggunaan_buffer_vakum |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk ruang kerja kueri. Memori sebanyak ini dapat digunakan oleh setiap operasi pengurutan internal dan tabel hash sebelum beralih ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Beberapa work_mem digunakan untuk tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 2 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
ukuran_halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Ukuran halaman besar yang harus diminta. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk decoding logis. |
| Jenis data | bilangan bulat |
| Nilai standar | 65536 |
| Nilai yang diizinkan | 64-2147483647 |
| Jenis parameter | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. Saat menjalankan server replika, Anda harus mengatur parameter ini ke nilai yang sama atau lebih tinggi daripada di server utama. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
Memori Bersama Dinamis Minimum (min_dynamic_shared_memory)
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah memori bersama dinamis yang dicadangkan saat startup. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. Unitnya 8kb. Nilai yang diizinkan berada di dalam rentang 10% - 75% dari memori yang tersedia. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
vacuum_buffer_usage_limit
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur ukuran kumpulan buffer untuk VACUUM, ANALYZE, dan autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | 256 |
| Nilai yang diizinkan | 0-16777216 |
| Jenis parameter | dynamic |
| Documentation | batas_penggunaan_buffer_vakum |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Beberapa work_mem digunakan untuk tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 2 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
ukuran_halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Ukuran halaman besar yang harus diminta. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk decoding logis. |
| Jenis data | bilangan bulat |
| Nilai standar | 65536 |
| Nilai yang diizinkan | 64-2147483647 |
| Jenis parameter | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. Saat menjalankan server replika, Anda harus mengatur parameter ini ke nilai yang sama atau lebih tinggi daripada di server utama. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
Memori Bersama Dinamis Minimum (min_dynamic_shared_memory)
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah memori bersama dinamis yang dicadangkan saat startup. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. Unitnya 8kb. Nilai yang diizinkan berada di dalam rentang 10% - 75% dari memori yang tersedia. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Beberapa work_mem digunakan untuk tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 1 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
ukuran_halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Ukuran halaman besar yang harus diminta. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk decoding logis. |
| Jenis data | bilangan bulat |
| Nilai standar | 65536 |
| Nilai yang diizinkan | 64-2147483647 |
| Jenis parameter | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. Saat menjalankan server replika, Anda harus mengatur parameter ini ke nilai yang sama atau lebih tinggi daripada di server utama. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
Memori Bersama Dinamis Minimum (min_dynamic_shared_memory)
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Jumlah memori bersama dinamis yang dicadangkan saat startup. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0 |
| Jenis parameter | baca-saja |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. Unitnya 8kb. Nilai yang diizinkan berada di dalam rentang 10% - 75% dari memori yang tersedia. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Beberapa work_mem digunakan untuk tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 1 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
logical_decoding_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk decoding logis. |
| Jenis data | bilangan bulat |
| Nilai standar | 65536 |
| Nilai yang diizinkan | 64-2147483647 |
| Jenis parameter | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. Saat menjalankan server replika, Anda harus mengatur parameter ini ke nilai yang sama atau lebih tinggi daripada di server utama. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. Unitnya 8kb. Nilai yang diizinkan berada di dalam rentang 10% - 75% dari memori yang tersedia. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Beberapa work_mem digunakan untuk tabel hash. |
| Jenis data | Numerik |
| Nilai standar | 1 |
| Nilai yang diizinkan | 1-1000 |
| Jenis parameter | dynamic |
| Documentation | hash_mem_multiplier |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. Saat menjalankan server replika, Anda harus mengatur parameter ini ke nilai yang sama atau lebih tinggi daripada di server utama. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. Unitnya 8kb. Nilai yang diizinkan berada di dalam rentang 10% - 75% dari memori yang tersedia. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
jenis_memori_bersama
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama. |
| Jenis data | enumerasi |
| Nilai standar | mmap |
| Nilai yang diizinkan | mmap |
| Jenis parameter | baca-saja |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum. |
| Jenis data | bilangan bulat |
| Nilai standar | -1 |
| Nilai yang diizinkan | -1-2097151 |
| Jenis parameter | dynamic |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Memilih implementasi memori bersama dinamis yang digunakan. |
| Jenis data | enumerasi |
| Nilai standar | posix |
| Nilai yang diizinkan | posix |
| Jenis parameter | baca-saja |
| Documentation | dynamic_shared_memory_type |
halaman_besar
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore. |
| Jenis data | enumerasi |
| Nilai standar | try |
| Nilai yang diizinkan | on,off,try |
| Jenis parameter | statik |
| Documentation | huge_pages |
Description
Halaman besar adalah fitur yang memungkinkan memori dikelola dalam blok yang lebih besar. Anda biasanya dapat mengelola blok hingga 2 MB, dibandingkan dengan halaman 4 KB standar.
Menggunakan halaman besar dapat menawarkan manfaat kinerja yang secara efektif mengurangi beban CPU.
- Mereka mengurangi overhead yang terkait dengan tugas manajemen memori seperti lebih sedikit kesalahan buffer lookaside terjemahan (TLB).
- Mereka mempersingkat waktu yang diperlukan untuk manajemen memori.
Secara khusus, di PostgreSQL, Anda dapat menggunakan halaman besar hanya untuk area memori bersama. Bagian penting dari area memori bersama dialokasikan untuk buffer bersama.
Keuntungan lain adalah bahwa halaman besar mencegah pertukaran area memori bersama ke disk, yang semakin menstabilkan performa.
Recommendations
- Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
- Jika Anda memulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi akan meningkatkan skala ke server yang mendukung hal itu, pertahankan pengaturan
huge_pagespadaTRYuntuk transisi yang mulus dan kinerja optimal.
Catatan khusus Azure
Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasarinya. Fitur ini tidak tersedia untuk server dengan kurang dari empat vCore. Jumlah halaman besar secara otomatis disesuaikan jika ada pengaturan memori bersama yang diubah, termasuk perubahan ke shared_buffers.
maintenance_work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 1024-2097151 |
| Jenis parameter | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem adalah parameter konfigurasi di PostgreSQL. Ini mengatur jumlah memori yang dialokasikan untuk operasi pemeliharaan, seperti VACUUM, , CREATE INDEXdan ALTER TABLE. Tidak seperti work_mem, yang memengaruhi alokasi memori untuk operasi kueri, maintenance_work_mem dicadangkan untuk tugas yang memelihara dan mengoptimalkan struktur database.
! [CATATAN] Pengaturan
maintenance_work_memke nilai yang terlalu agresif dapat secara berkala menyebabkan kesalahan kehabisan memori dalam sistem. Sangat penting untuk memahami jumlah memori yang tersedia di server, dan jumlah operasi bersamaan yang dapat mengalokasikan memori untuk tugas yang dijelaskan sebelumnya, sebelum membuat perubahan pada parameter ini.
Poin-poin penting
-
Batas memori vakum: Jika Anda ingin mempercepat pembersihan tuple mati dengan meningkatkan
maintenance_work_mem, ketahuilah bahwaVACUUMmemiliki batasan bawaan untuk mengumpulkan pengidentifikasi tuple mati. Ini hanya dapat menggunakan memori hingga 1 GB untuk proses ini. -
Pemisahan memori untuk autovacuum: Anda dapat menggunakan pengaturan
autovacuum_work_memuntuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset darimaintenance_work_mem. Anda dapat memutuskan berapa banyak memori yang digunakan oleh autovacuum tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lainnya dan operasi pendefinisian data.
Catatan khusus Azure
Nilai default untuk maintenance_work_mem parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak akan berpengaruh pada nilai default untuk parameter server instans tersebut maintenance_work_mem .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai untuk parameter maintenance_work_mem berdasarkan rumus berikut.
Rumus yang digunakan untuk menghitung nilai maintenance_work_mem adalah (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | maintenance_work_mem |
|---|---|
| 2 GiB | 99,328 KiB |
| 4 GiB | 157,696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392,192 KiB |
| 80 GiB | 410,624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468,992 KiB |
| 192 GiB | 484,352 KiB |
| 256 GiB | 508,928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum transaksi yang disiapkan secara bersamaan. Saat menjalankan server replika, Anda harus mengatur parameter ini ke nilai yang sama atau lebih tinggi daripada di server utama. |
| Jenis data | bilangan bulat |
| Nilai standar | 0 |
| Nilai yang diizinkan | 0-262143 |
| Jenis parameter | statik |
| Documentation | max_prepared_transactions |
kedalaman_tumpukan_maksimum
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur kedalaman tumpukan maksimum, dalam kilobyte. |
| Jenis data | bilangan bulat |
| Nilai standar | 2048 |
| Nilai yang diizinkan | 2048 |
| Jenis parameter | baca-saja |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah buffer memori bersama yang digunakan oleh server. Unitnya 8kb. Nilai yang diizinkan berada di dalam rentang 10% - 75% dari memori yang tersedia. |
| Jenis data | bilangan bulat |
| Nilai standar | Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server. |
| Nilai yang diizinkan | 16-1073741823 |
| Jenis parameter | statik |
| Documentation | shared_buffers |
Description
Parameter shared_buffers konfigurasi menentukan jumlah memori sistem yang dialokasikan ke database PostgreSQL untuk data buffering. Ini berfungsi sebagai kumpulan memori terpusat yang dapat diakses oleh semua proses database.
Ketika data diperlukan, proses database pertama-tama memeriksa buffer bersama. Jika ada data yang diperlukan, data akan diambil dengan cepat dan melewati pembacaan disk yang lebih memakan waktu. Buffer bersama berfungsi sebagai perantara antara proses database dan disk, dan secara efektif mengurangi jumlah operasi I/O yang diperlukan.
Catatan khusus Azure
Nilai default untuk shared_buffers parameter server dihitung saat Anda menyediakan instans server fleksibel Azure Database for PostgreSQL, berdasarkan nama produk yang Anda pilih untuk komputasinya. Setiap perubahan pemilihan produk berikutnya pada komputasi yang mendukung server fleksibel tidak berpengaruh pada nilai default untuk parameter server instans tersebut shared_buffers .
Setiap kali Anda mengubah produk yang ditetapkan ke instans, Anda juga harus menyesuaikan nilai parameter shared_buffers sesuai dengan rumus berikut.
Untuk komputer virtual dengan memori hingga 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 16384.
Untuk komputer virtual dengan lebih dari 2 GiB, rumus yang digunakan untuk menghitung nilai shared_buffers adalah memoryGib * 32768.
Berdasarkan rumus sebelumnya, tabel berikut mencantumkan nilai parameter server ini akan diatur ke tergantung pada jumlah memori yang disediakan:
| Ukuran memori | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
temp_buffers
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database. |
| Jenis data | bilangan bulat |
| Nilai standar | 1024 |
| Nilai yang diizinkan | 100-1073741823 |
| Jenis parameter | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Nilai |
|---|---|
| Kategori | Penggunaan Sumber Daya / Memori |
| Description | Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. |
| Jenis data | bilangan bulat |
| Nilai standar | 4096 |
| Nilai yang diizinkan | 4096-2097151 |
| Jenis parameter | dynamic |
| Documentation | work_mem |
Description
Parameter work_mem di PostgreSQL mengontrol jumlah memori yang dialokasikan untuk operasi internal tertentu dalam area memori privat setiap sesi database. Contoh operasi ini adalah pengurutan dan hashing.
Tidak seperti buffer bersama, yang berada di area memori bersama, work_mem dialokasikan dalam ruang memori privat per sesi atau per kueri. Dengan mengatur ukuran yang memadai work_mem , Anda dapat secara signifikan meningkatkan efisiensi operasi ini dan mengurangi kebutuhan untuk menulis data sementara ke disk.
Poin-poin penting
-
Memori koneksi privat:
work_memadalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yangshared_buffersmenggunakan. -
Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem. Kueri sederhana sepertiSELECT 1tidak mungkin memerlukanwork_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem. -
Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem , terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal Microsoft Azure:
-
Wawasan performa kueri: Periksa kueri Teratas menurut tab file sementara untuk mengidentifikasi kueri yang menghasilkan file sementara. Situasi ini menunjukkan potensi kebutuhan untuk meningkatkan
work_mem. - Panduan pemecahan masalah: Gunakan tab File sementara tinggi di panduan pemecahan masalah untuk mengidentifikasi kueri yang bermasalah.
Penyesuaian terperinci
Saat Anda mengelola work_mem parameter, sering kali lebih efisien untuk mengadopsi pendekatan penyesuaian terperinci daripada menetapkan nilai global. Pendekatan ini memastikan bahwa Anda mengalokasikan memori secara yudisius berdasarkan kebutuhan spesifik proses dan pengguna. Ini juga meminimalkan risiko mengalami masalah kekurangan memori. Berikut adalah cara yang dapat Anda lakukan:
Tingkat pengguna: Jika pengguna tertentu terutama terlibat dalam tugas agregasi atau pelaporan, yang intensif memori, pertimbangkan untuk menyesuaikan nilai untuk pengguna tersebut
work_mem.ALTER ROLEGunakan perintah untuk meningkatkan performa operasi pengguna.Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan
work_memnilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat.ALTER FUNCTIONGunakan perintah atauALTER PROCEDUREuntuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.Tingkat database: Ubah
work_memdi tingkat database jika hanya database tertentu yang menghasilkan file sementara dalam jumlah tinggi.Tingkat global: Jika analisis sistem Anda mengungkapkan bahwa sebagian besar kueri menghasilkan file sementara kecil, sementara hanya beberapa yang membuat file besar, mungkin bijaksana untuk meningkatkan
work_memnilai secara global. Tindakan ini memfasilitasi sebagian besar kueri untuk diproses dalam memori, sehingga Anda dapat menghindari operasi berbasis disk dan meningkatkan efisiensi. Namun, selalu berhati-hati dan pantau pemanfaatan memori di server Anda untuk memastikan bahwa ia dapat menangani peningkatanwork_memnilai.
Menentukan nilai work_mem minimum untuk operasi pengurutan
Untuk menemukan nilai minimum work_mem untuk kueri tertentu, terutama yang menghasilkan file disk sementara selama proses pengurutan, mulailah dengan mempertimbangkan ukuran file sementara yang dihasilkan selama eksekusi kueri. Misalnya, jika kueri menghasilkan file sementara 20 MB:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- Atur nilai awal
work_memyang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti:SET work_mem TO '25MB'. - Jalankan
EXPLAIN ANALYZEpada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB". Jika menunjukkan"external merge Disk: xkB", naikkanwork_memnilai secara bertahap dan coba lagi hingga"quicksort Memory"muncul. Munculnya"quicksort Memory"sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.