Bagikan melalui


Penggunaan Sumber Daya / Memori

autovacuum_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.
Jenis Data Integer
Nilai default -1
Nilai yang diizinkan -1-2097151
Jenis parameter dinamis
Dokumentasi autovacuum_work_mem

dynamic_shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama dinamis yang digunakan.
Jenis Data Enumerasi
Nilai default posix
Nilai yang diizinkan posix
Jenis parameter baca-saja
Dokumentasi dynamic_shared_memory_type

hash_mem_multiplier

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Beberapa work_mem digunakan untuk tabel hash.
Jenis Data numeric
Nilai default 2
Nilai yang diizinkan 2
Jenis parameter baca-saja
Dokumentasi hash_mem_multiplier

huge_pages

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore.
Jenis Data Enumerasi
Nilai default try
Nilai yang diizinkan on,off,try
Jenis parameter statik
Dokumentasi huge_pages

Deskripsi

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 keuntungan performa yang secara efektif membongkar 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.

Rekomendasi

  • Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
  • Jika Anda mulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi peningkatan skala ke server yang melakukannya, pertahankan huge_pages pengaturan TRY untuk transisi yang mulus dan performa optimal.

Catatan khusus Azure

Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasar. 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.

huge_page_size

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Ukuran halaman besar yang harus diminta.
Jenis Data Integer
Nilai default 0
Nilai yang diizinkan 0
Jenis parameter baca-saja
Dokumentasi huge_page_size

logical_decoding_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk decoding logis.
Jenis Data Integer
Nilai default 65536
Nilai yang diizinkan 65536
Jenis parameter baca-saja
Dokumentasi logical_decoding_work_mem

maintenance_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks.
Jenis Data Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 1024-2097151
Jenis parameter dinamis
Dokumentasi maintenance_work_mem

Deskripsi

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.

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 autovacuum_work_mem pengaturan untuk mengontrol memori yang digunakan operasi autovacuum secara independen. Pengaturan ini bertindak sebagai subset dari maintenance_work_mem. Anda dapat memutuskan berapa banyak penggunaan autovacuum memori tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lain dan operasi definisi data.

max_prepared_transactions

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default 0
Nilai yang diizinkan 0-262143
Jenis parameter statik
Dokumentasi max_prepared_transactions

max_stack_depth

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur kedalaman tumpukan maksimum, dalam kilobyte.
Jenis Data Integer
Nilai default 2048
Nilai yang diizinkan 2048
Jenis parameter baca-saja
Dokumentasi max_stack_depth

min_dynamic_shared_memory

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Jumlah memori bersama dinamis yang dicadangkan saat startup.
Jenis Data Integer
Nilai default 0
Nilai yang diizinkan 0
Jenis parameter baca-saja
Dokumentasi min_dynamic_shared_memory

shared_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 16-1073741823
Jenis parameter statik
Dokumentasi shared_buffers

Deskripsi

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. Dengan berfungsi sebagai perantara antara proses database dan disk, shared_buffers secara efektif mengurangi jumlah operasi I/O yang diperlukan.

Catatan khusus Azure

Pengaturan shared_buffers membuat skala secara linear (kira-kira) saat vCore bertambah tingkatannya.

shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama.
Jenis Data Enumerasi
Nilai default mmap
Nilai yang diizinkan mmap
Jenis parameter baca-saja
Dokumentasi shared_memory_type

temp_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
Jenis Data Integer
Nilai default 1024
Nilai yang diizinkan 100-1073741823
Jenis parameter dinamis
Dokumentasi temp_buffers

work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara.
Jenis Data Integer
Nilai default 4096
Nilai yang diizinkan 4096-2097151
Jenis parameter dinamis
Dokumentasi work_mem

Deskripsi

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 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 di luar memori. Berikut adalah bagaimana Anda dapat membahasnya:

  • 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.
Jenis Data Integer
Nilai default -1
Nilai yang diizinkan -1-2097151
Jenis parameter dinamis
Dokumentasi autovacuum_work_mem

dynamic_shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama dinamis yang digunakan.
Jenis Data Enumerasi
Nilai default posix
Nilai yang diizinkan posix
Jenis parameter baca-saja
Dokumentasi dynamic_shared_memory_type

hash_mem_multiplier

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Beberapa work_mem digunakan untuk tabel hash.
Jenis Data numeric
Nilai default 2
Nilai yang diizinkan 2
Jenis parameter baca-saja
Dokumentasi hash_mem_multiplier

huge_pages

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore.
Jenis Data Enumerasi
Nilai default try
Nilai yang diizinkan on,off,try
Jenis parameter statik
Dokumentasi huge_pages

Deskripsi

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 keuntungan performa yang secara efektif membongkar 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.

Rekomendasi

  • Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
  • Jika Anda mulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi peningkatan skala ke server yang melakukannya, pertahankan huge_pages pengaturan TRY untuk transisi yang mulus dan performa optimal.

Catatan khusus Azure

Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasar. 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.

huge_page_size

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Ukuran halaman besar yang harus diminta.
Jenis Data Integer
Nilai default 0
Nilai yang diizinkan 0
Jenis parameter baca-saja
Dokumentasi huge_page_size

logical_decoding_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk decoding logis.
Jenis Data Integer
Nilai default 65536
Nilai yang diizinkan 65536
Jenis parameter baca-saja
Dokumentasi logical_decoding_work_mem

maintenance_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks.
Jenis Data Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 1024-2097151
Jenis parameter dinamis
Dokumentasi maintenance_work_mem

Deskripsi

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.

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 autovacuum_work_mem pengaturan untuk mengontrol memori yang digunakan operasi autovacuum secara independen. Pengaturan ini bertindak sebagai subset dari maintenance_work_mem. Anda dapat memutuskan berapa banyak penggunaan autovacuum memori tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lain dan operasi definisi data.

max_prepared_transactions

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default 0
Nilai yang diizinkan 0-262143
Jenis parameter statik
Dokumentasi max_prepared_transactions

max_stack_depth

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur kedalaman tumpukan maksimum, dalam kilobyte.
Jenis Data Integer
Nilai default 2048
Nilai yang diizinkan 2048
Jenis parameter baca-saja
Dokumentasi max_stack_depth

min_dynamic_shared_memory

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Jumlah memori bersama dinamis yang dicadangkan saat startup.
Jenis Data Integer
Nilai default 0
Nilai yang diizinkan 0
Jenis parameter baca-saja
Dokumentasi min_dynamic_shared_memory

shared_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 16-1073741823
Jenis parameter statik
Dokumentasi shared_buffers

Deskripsi

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. Dengan berfungsi sebagai perantara antara proses database dan disk, shared_buffers secara efektif mengurangi jumlah operasi I/O yang diperlukan.

Catatan khusus Azure

Pengaturan shared_buffers membuat skala secara linear (kira-kira) saat vCore bertambah tingkatannya.

shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama.
Jenis Data Enumerasi
Nilai default mmap
Nilai yang diizinkan mmap
Jenis parameter baca-saja
Dokumentasi shared_memory_type

temp_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
Jenis Data Integer
Nilai default 1024
Nilai yang diizinkan 100-1073741823
Jenis parameter dinamis
Dokumentasi temp_buffers

work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara.
Jenis Data Integer
Nilai default 4096
Nilai yang diizinkan 4096-2097151
Jenis parameter dinamis
Dokumentasi work_mem

Deskripsi

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 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 di luar memori. Berikut adalah bagaimana Anda dapat membahasnya:

  • 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.
Jenis Data Integer
Nilai default -1
Nilai yang diizinkan -1-2097151
Jenis parameter dinamis
Dokumentasi autovacuum_work_mem

dynamic_shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama dinamis yang digunakan.
Jenis Data Enumerasi
Nilai default posix
Nilai yang diizinkan posix
Jenis parameter baca-saja
Dokumentasi dynamic_shared_memory_type

hash_mem_multiplier

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Beberapa work_mem digunakan untuk tabel hash.
Jenis Data numeric
Nilai default 1
Nilai yang diizinkan 1
Jenis parameter baca-saja
Dokumentasi hash_mem_multiplier

huge_pages

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore.
Jenis Data Enumerasi
Nilai default try
Nilai yang diizinkan on,off,try
Jenis parameter statik
Dokumentasi huge_pages

Deskripsi

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 keuntungan performa yang secara efektif membongkar 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.

Rekomendasi

  • Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
  • Jika Anda mulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi peningkatan skala ke server yang melakukannya, pertahankan huge_pages pengaturan TRY untuk transisi yang mulus dan performa optimal.

Catatan khusus Azure

Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasar. 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.

huge_page_size

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Ukuran halaman besar yang harus diminta.
Jenis Data Integer
Nilai default 0
Nilai yang diizinkan 0
Jenis parameter baca-saja
Dokumentasi huge_page_size

logical_decoding_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk decoding logis.
Jenis Data Integer
Nilai default 65536
Nilai yang diizinkan 65536
Jenis parameter baca-saja
Dokumentasi logical_decoding_work_mem

maintenance_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks.
Jenis Data Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 1024-2097151
Jenis parameter dinamis
Dokumentasi maintenance_work_mem

Deskripsi

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.

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 autovacuum_work_mem pengaturan untuk mengontrol memori yang digunakan operasi autovacuum secara independen. Pengaturan ini bertindak sebagai subset dari maintenance_work_mem. Anda dapat memutuskan berapa banyak penggunaan autovacuum memori tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lain dan operasi definisi data.

max_prepared_transactions

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default 0
Nilai yang diizinkan 0-262143
Jenis parameter statik
Dokumentasi max_prepared_transactions

max_stack_depth

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur kedalaman tumpukan maksimum, dalam kilobyte.
Jenis Data Integer
Nilai default 2048
Nilai yang diizinkan 2048
Jenis parameter baca-saja
Dokumentasi max_stack_depth

min_dynamic_shared_memory

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Jumlah memori bersama dinamis yang dicadangkan saat startup.
Jenis Data Integer
Nilai default 0
Nilai yang diizinkan 0
Jenis parameter baca-saja
Dokumentasi min_dynamic_shared_memory

shared_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 16-1073741823
Jenis parameter statik
Dokumentasi shared_buffers

Deskripsi

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. Dengan berfungsi sebagai perantara antara proses database dan disk, shared_buffers secara efektif mengurangi jumlah operasi I/O yang diperlukan.

Catatan khusus Azure

Pengaturan shared_buffers membuat skala secara linear (kira-kira) saat vCore bertambah tingkatannya.

shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama.
Jenis Data Enumerasi
Nilai default mmap
Nilai yang diizinkan mmap
Jenis parameter baca-saja
Dokumentasi shared_memory_type

temp_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
Jenis Data Integer
Nilai default 1024
Nilai yang diizinkan 100-1073741823
Jenis parameter dinamis
Dokumentasi temp_buffers

work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara.
Jenis Data Integer
Nilai default 4096
Nilai yang diizinkan 4096-2097151
Jenis parameter dinamis
Dokumentasi work_mem

Deskripsi

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 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 di luar memori. Berikut adalah bagaimana Anda dapat membahasnya:

  • 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.
Jenis Data Integer
Nilai default -1
Nilai yang diizinkan -1-2097151
Jenis parameter dinamis
Dokumentasi autovacuum_work_mem

dynamic_shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama dinamis yang digunakan.
Jenis Data Enumerasi
Nilai default posix
Nilai yang diizinkan posix
Jenis parameter baca-saja
Dokumentasi dynamic_shared_memory_type

hash_mem_multiplier

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Beberapa work_mem digunakan untuk tabel hash.
Jenis Data numeric
Nilai default 1
Nilai yang diizinkan 1
Jenis parameter baca-saja
Dokumentasi hash_mem_multiplier

huge_pages

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore.
Jenis Data Enumerasi
Nilai default try
Nilai yang diizinkan on,off,try
Jenis parameter statik
Dokumentasi huge_pages

Deskripsi

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 keuntungan performa yang secara efektif membongkar 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.

Rekomendasi

  • Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
  • Jika Anda mulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi peningkatan skala ke server yang melakukannya, pertahankan huge_pages pengaturan TRY untuk transisi yang mulus dan performa optimal.

Catatan khusus Azure

Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasar. 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk decoding logis.
Jenis Data Integer
Nilai default 65536
Nilai yang diizinkan 65536
Jenis parameter baca-saja
Dokumentasi logical_decoding_work_mem

maintenance_work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks.
Jenis Data Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 1024-2097151
Jenis parameter dinamis
Dokumentasi maintenance_work_mem

Deskripsi

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.

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 autovacuum_work_mem pengaturan untuk mengontrol memori yang digunakan operasi autovacuum secara independen. Pengaturan ini bertindak sebagai subset dari maintenance_work_mem. Anda dapat memutuskan berapa banyak penggunaan autovacuum memori tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lain dan operasi definisi data.

max_prepared_transactions

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default 0
Nilai yang diizinkan 0-262143
Jenis parameter statik
Dokumentasi max_prepared_transactions

max_stack_depth

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur kedalaman tumpukan maksimum, dalam kilobyte.
Jenis Data Integer
Nilai default 2048
Nilai yang diizinkan 2048
Jenis parameter baca-saja
Dokumentasi max_stack_depth

shared_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 16-1073741823
Jenis parameter statik
Dokumentasi shared_buffers

Deskripsi

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. Dengan berfungsi sebagai perantara antara proses database dan disk, shared_buffers secara efektif mengurangi jumlah operasi I/O yang diperlukan.

Catatan khusus Azure

Pengaturan shared_buffers membuat skala secara linear (kira-kira) saat vCore bertambah tingkatannya.

shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama.
Jenis Data Enumerasi
Nilai default mmap
Nilai yang diizinkan mmap
Jenis parameter baca-saja
Dokumentasi shared_memory_type

temp_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
Jenis Data Integer
Nilai default 1024
Nilai yang diizinkan 100-1073741823
Jenis parameter dinamis
Dokumentasi temp_buffers

work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara.
Jenis Data Integer
Nilai default 4096
Nilai yang diizinkan 4096-2097151
Jenis parameter dinamis
Dokumentasi work_mem

Deskripsi

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 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 di luar memori. Berikut adalah bagaimana Anda dapat membahasnya:

  • 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.
Jenis Data Integer
Nilai default -1
Nilai yang diizinkan -1-2097151
Jenis parameter dinamis
Dokumentasi autovacuum_work_mem

dynamic_shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama dinamis yang digunakan.
Jenis Data Enumerasi
Nilai default posix
Nilai yang diizinkan posix
Jenis parameter baca-saja
Dokumentasi dynamic_shared_memory_type

hash_mem_multiplier

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Beberapa work_mem digunakan untuk tabel hash.
Jenis Data numeric
Nilai default 1
Nilai yang diizinkan 1
Jenis parameter baca-saja
Dokumentasi hash_mem_multiplier

huge_pages

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore.
Jenis Data Enumerasi
Nilai default try
Nilai yang diizinkan on,off,try
Jenis parameter statik
Dokumentasi huge_pages

Deskripsi

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 keuntungan performa yang secara efektif membongkar 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.

Rekomendasi

  • Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
  • Jika Anda mulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi peningkatan skala ke server yang melakukannya, pertahankan huge_pages pengaturan TRY untuk transisi yang mulus dan performa optimal.

Catatan khusus Azure

Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasar. 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks.
Jenis Data Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 1024-2097151
Jenis parameter dinamis
Dokumentasi maintenance_work_mem

Deskripsi

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.

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 autovacuum_work_mem pengaturan untuk mengontrol memori yang digunakan operasi autovacuum secara independen. Pengaturan ini bertindak sebagai subset dari maintenance_work_mem. Anda dapat memutuskan berapa banyak penggunaan autovacuum memori tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lain dan operasi definisi data.

max_prepared_transactions

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default 0
Nilai yang diizinkan 0-262143
Jenis parameter statik
Dokumentasi max_prepared_transactions

max_stack_depth

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur kedalaman tumpukan maksimum, dalam kilobyte.
Jenis Data Integer
Nilai default 2048
Nilai yang diizinkan 2048
Jenis parameter baca-saja
Dokumentasi max_stack_depth

shared_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 16-1073741823
Jenis parameter statik
Dokumentasi shared_buffers

Deskripsi

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. Dengan berfungsi sebagai perantara antara proses database dan disk, shared_buffers secara efektif mengurangi jumlah operasi I/O yang diperlukan.

Catatan khusus Azure

Pengaturan shared_buffers membuat skala secara linear (kira-kira) saat vCore bertambah tingkatannya.

shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama yang digunakan untuk wilayah memori bersama utama.
Jenis Data Enumerasi
Nilai default mmap
Nilai yang diizinkan mmap
Jenis parameter baca-saja
Dokumentasi shared_memory_type

temp_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
Jenis Data Integer
Nilai default 1024
Nilai yang diizinkan 100-1073741823
Jenis parameter dinamis
Dokumentasi temp_buffers

work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara.
Jenis Data Integer
Nilai default 4096
Nilai yang diizinkan 4096-2097151
Jenis parameter dinamis
Dokumentasi work_mem

Deskripsi

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 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 di luar memori. Berikut adalah bagaimana Anda dapat membahasnya:

  • 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan oleh setiap proses pekerja autovacuum.
Jenis Data Integer
Nilai default -1
Nilai yang diizinkan -1-2097151
Jenis parameter dinamis
Dokumentasi autovacuum_work_mem

dynamic_shared_memory_type

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Memilih implementasi memori bersama dinamis yang digunakan.
Jenis Data Enumerasi
Nilai default posix
Nilai yang diizinkan posix
Jenis parameter baca-saja
Dokumentasi dynamic_shared_memory_type

huge_pages

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengaktifkan/menonaktifkan penggunaan halaman memori besar. Pengaturan ini tidak berlaku untuk server yang memiliki kurang dari 4 vCore.
Jenis Data Enumerasi
Nilai default try
Nilai yang diizinkan on,off,try
Jenis parameter statik
Dokumentasi huge_pages

Deskripsi

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 keuntungan performa yang secara efektif membongkar 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.

Rekomendasi

  • Untuk server yang memiliki sumber daya memori yang signifikan, hindari menonaktifkan halaman besar. Menonaktifkan halaman besar dapat membahayakan performa.
  • Jika Anda mulai dengan server yang lebih kecil yang tidak mendukung halaman besar tetapi Anda mengantisipasi peningkatan skala ke server yang melakukannya, pertahankan huge_pages pengaturan TRY untuk transisi yang mulus dan performa optimal.

Catatan khusus Azure

Untuk server dengan empat vCore atau lebih, halaman besar secara otomatis dialokasikan dari sistem operasi yang mendasar. 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

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur memori maksimum yang akan digunakan untuk operasi pemeliharaan seperti VACUUM, Buat Indeks.
Jenis Data Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 1024-2097151
Jenis parameter dinamis
Dokumentasi maintenance_work_mem

Deskripsi

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.

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 autovacuum_work_mem pengaturan untuk mengontrol memori yang digunakan operasi autovacuum secara independen. Pengaturan ini bertindak sebagai subset dari maintenance_work_mem. Anda dapat memutuskan berapa banyak penggunaan autovacuum memori tanpa memengaruhi alokasi memori untuk tugas pemeliharaan lain dan operasi definisi data.

max_prepared_transactions

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default 0
Nilai yang diizinkan 0-262143
Jenis parameter statik
Dokumentasi max_prepared_transactions

max_stack_depth

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur kedalaman tumpukan maksimum, dalam kilobyte.
Jenis Data Integer
Nilai default 2048
Nilai yang diizinkan 2048
Jenis parameter baca-saja
Dokumentasi max_stack_depth

shared_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi 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 Integer
Nilai default Bergantung pada sumber daya (vCore, RAM, atau ruang disk) yang dialokasikan ke server.
Nilai yang diizinkan 16-1073741823
Jenis parameter statik
Dokumentasi shared_buffers

Deskripsi

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. Dengan berfungsi sebagai perantara antara proses database dan disk, shared_buffers secara efektif mengurangi jumlah operasi I/O yang diperlukan.

Catatan khusus Azure

Pengaturan shared_buffers membuat skala secara linear (kira-kira) saat vCore bertambah tingkatannya.

temp_buffers

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah maksimum buffer sementara yang digunakan oleh setiap sesi database.
Jenis Data Integer
Nilai default 1024
Nilai yang diizinkan 100-1073741823
Jenis parameter dinamis
Dokumentasi temp_buffers

work_mem

Atribut Nilai
Kategori Penggunaan Sumber Daya / Memori
Deskripsi Mengatur jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara.
Jenis Data Integer
Nilai default 4096
Nilai yang diizinkan 4096-2097151
Jenis parameter dinamis
Dokumentasi work_mem

Deskripsi

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 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 di luar memori. Berikut adalah bagaimana Anda dapat membahasnya:

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