Bagikan melalui


Penggunaan Sumber Daya / Memori

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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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_pages pada TRY untuk 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_mem ke 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 bahwa VACUUM memiliki 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_mem untuk secara independen mengontrol memori yang digunakan operasi autovacuum. Pengaturan ini bertindak sebagai subset dari maintenance_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_mem adalah bagian dari memori privat yang digunakan setiap sesi database. Memori ini berbeda dari area memori bersama yang shared_buffers menggunakan.
  • Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan work_mem. Kueri sederhana seperti SELECT 1 tidak mungkin memerlukan work_mem. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potongan work_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 ROLE Gunakan perintah untuk meningkatkan performa operasi pengguna.

  • Tingkat fungsi/prosedur: Jika fungsi atau prosedur tertentu menghasilkan file sementara yang substansial, meningkatkan work_mem nilai pada tingkat fungsi atau prosedur tertentu dapat bermanfaat. ALTER FUNCTION Gunakan perintah atau ALTER PROCEDURE untuk secara khusus mengalokasikan lebih banyak memori untuk operasi ini.

  • Tingkat database: Ubah work_mem di 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_mem nilai 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 peningkatan work_mem nilai.

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:

  1. Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
  2. Atur nilai awal work_mem yang sedikit lebih tinggi dari 20 MB untuk memperhitungkan header tambahan saat memproses dalam memori. Gunakan perintah seperti: SET work_mem TO '25MB'.
  3. Jalankan EXPLAIN ANALYZE pada kueri bermasalah dalam sesi yang sama.
  4. Tinjau output untuk "Sort Method: quicksort Memory: xkB". Jika menunjukkan "external merge Disk: xkB", naikkan work_mem nilai secara bertahap dan coba lagi hingga "quicksort Memory" muncul. Munculnya "quicksort Memory" sinyal bahwa kueri sekarang beroperasi dalam memori.
  5. 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.