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
pengaturanTRY
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 INDEX
dan 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 bahwaVACUUM
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 darimaintenance_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 yangshared_buffers
menggunakan. - Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem
. Kueri sederhana sepertiSELECT 1
tidak mungkin memerlukanwork_mem
. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem
. - Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem
.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem
, terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal 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 atauALTER 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 peningkatanwork_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:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- 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'
. - Jalankan
EXPLAIN ANALYZE
pada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB"
. Jika menunjukkan"external merge Disk: xkB"
, naikkanwork_mem
nilai secara bertahap dan coba lagi hingga"quicksort Memory"
muncul. Munculnya"quicksort Memory"
sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
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
pengaturanTRY
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 INDEX
dan 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 bahwaVACUUM
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 darimaintenance_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 yangshared_buffers
menggunakan. - Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem
. Kueri sederhana sepertiSELECT 1
tidak mungkin memerlukanwork_mem
. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem
. - Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem
.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem
, terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal 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 atauALTER 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 peningkatanwork_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:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- 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'
. - Jalankan
EXPLAIN ANALYZE
pada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB"
. Jika menunjukkan"external merge Disk: xkB"
, naikkanwork_mem
nilai secara bertahap dan coba lagi hingga"quicksort Memory"
muncul. Munculnya"quicksort Memory"
sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
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
pengaturanTRY
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 INDEX
dan 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 bahwaVACUUM
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 darimaintenance_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 yangshared_buffers
menggunakan. - Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem
. Kueri sederhana sepertiSELECT 1
tidak mungkin memerlukanwork_mem
. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem
. - Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem
.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem
, terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal 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 atauALTER 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 peningkatanwork_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:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- 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'
. - Jalankan
EXPLAIN ANALYZE
pada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB"
. Jika menunjukkan"external merge Disk: xkB"
, naikkanwork_mem
nilai secara bertahap dan coba lagi hingga"quicksort Memory"
muncul. Munculnya"quicksort Memory"
sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
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
pengaturanTRY
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 INDEX
dan 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 bahwaVACUUM
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 darimaintenance_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 yangshared_buffers
menggunakan. - Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem
. Kueri sederhana sepertiSELECT 1
tidak mungkin memerlukanwork_mem
. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem
. - Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem
.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem
, terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal 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 atauALTER 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 peningkatanwork_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:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- 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'
. - Jalankan
EXPLAIN ANALYZE
pada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB"
. Jika menunjukkan"external merge Disk: xkB"
, naikkanwork_mem
nilai secara bertahap dan coba lagi hingga"quicksort Memory"
muncul. Munculnya"quicksort Memory"
sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
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
pengaturanTRY
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 INDEX
dan 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 bahwaVACUUM
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 darimaintenance_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 yangshared_buffers
menggunakan. - Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem
. Kueri sederhana sepertiSELECT 1
tidak mungkin memerlukanwork_mem
. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem
. - Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem
.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem
, terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal 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 atauALTER 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 peningkatanwork_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:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- 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'
. - Jalankan
EXPLAIN ANALYZE
pada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB"
. Jika menunjukkan"external merge Disk: xkB"
, naikkanwork_mem
nilai secara bertahap dan coba lagi hingga"quicksort Memory"
muncul. Munculnya"quicksort Memory"
sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
autovacuum_work_mem
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
pengaturanTRY
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 INDEX
dan 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 bahwaVACUUM
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 darimaintenance_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 yangshared_buffers
menggunakan. - Penggunaan khusus kueri: Tidak semua sesi atau kueri menggunakan
work_mem
. Kueri sederhana sepertiSELECT 1
tidak mungkin memerlukanwork_mem
. Namun, kueri kompleks yang melibatkan operasi seperti pengurutan atau hashing dapat menggunakan satu atau beberapa potonganwork_mem
. - Operasi paralel: Untuk kueri yang mencakup beberapa ujung belakang paralel, setiap ujung belakang berpotensi menggunakan satu atau beberapa gugus
work_mem
.
Memantau dan menyesuaikan work_mem
Sangat penting untuk terus memantau performa sistem Anda dan menyesuaikan seperlunya work_mem
, terutama jika waktu eksekusi kueri yang terkait dengan operasi pengurutan atau hashing lambat. Berikut adalah cara untuk memantau performa dengan menggunakan alat yang tersedia di portal 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 atauALTER 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 peningkatanwork_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:
- Sambungkan ke database Anda dengan menggunakan psql atau klien PostgreSQL pilihan Anda.
- 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'
. - Jalankan
EXPLAIN ANALYZE
pada kueri bermasalah dalam sesi yang sama. - Tinjau output untuk
"Sort Method: quicksort Memory: xkB"
. Jika menunjukkan"external merge Disk: xkB"
, naikkanwork_mem
nilai secara bertahap dan coba lagi hingga"quicksort Memory"
muncul. Munculnya"quicksort Memory"
sinyal bahwa kueri sekarang beroperasi dalam memori. - Setelah Anda menentukan nilai melalui metode ini, Anda dapat menerapkannya baik secara global atau pada tingkat yang lebih terperinci (seperti yang dijelaskan sebelumnya) agar sesuai dengan kebutuhan operasional Anda.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk