Bagikan melalui


Pemanfaatan memori tinggi di Azure Database for PostgreSQL - Server Fleksibel

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Fleksibel

Artikel ini memperkenalkan skenario umum dan akar penyebab yang mungkin menyebabkan pemanfaatan memori tinggi di server fleksibel Azure Database for PostgreSQL.

Dalam artikel ini, Anda belajar tentang:

  • Tentang panduan pemecahan masalah untuk mengidentifikasi dan mendapatkan rekomendasi untuk mengurangi akar penyebabnya.
  • Alat untuk mengidentifikasi pemanfaatan memori tinggi.
  • Alasan memori tinggi & tindakan perbaikan.

Panduan Pemecahan Masalah

Menggunakan panduan pemecahan masalah fitur yang tersedia di portal server fleksibel Azure Database for PostgreSQL, kemungkinan akar penyebab dan rekomendasi untuk mengurangi skenario memori tinggi dapat ditemukan. Cara menyiapkan panduan pemecahan masalah untuk menggunakannya, ikuti panduan pemecahan masalah penyiapan.

Alat untuk mengidentifikasi pemanfaatan memori tinggi

Pertimbangkan alat berikut untuk mengidentifikasi pemanfaatan memori tinggi.

Azure Metrics

Gunakan Azure Metrics untuk memantau persentase memori yang digunakan untuk tanggal dan jangka waktu yang ditentukan.
Untuk pemantauan proaktif, konfigurasikan pemberitahuan pada metrik. Untuk panduan langkah demi langkah, lihat Metrik Azure.

Query Store

Penyimpanan Kueri secara otomatis menangkap riwayat kueri dan statistik runtime-nya, dan menyimpannya untuk Anda tinjau.

Penyimpanan Kueri dapat menghubungkan informasi peristiwa tunggu dengan statistik durasi kueri. Gunakan Penyimpanan Kueri untuk mengidentifikasi kueri yang memiliki konsumsi memori tinggi selama periode yang diminati.

Untuk mengetahui informasi selengkapnya tentang menyiapkan dan menggunakan Penyimpanan Kueri, tinjau Penyimpanan Kueri.

Alasan dan tindakan perbaikan

Pertimbangkan alasan dan tindakan perbaikan berikut untuk menyelesaikan pemanfaatan memori tinggi.

Parameter server

Parameter server berikut memengaruhi konsumsi memori dan harus ditinjau:

Work_Mem

Parameter work_mem menentukan jumlah memori yang akan digunakan oleh operasi pengurutan internal dan tabel hash sebelum menulis ke file disk sementara. Jumlah ini bukan berdasarkan per-kueri, melainkan diatur berdasarkan jumlah operasi sortir dan hash.

Jika beban kerja memiliki banyak kueri yang berjalan singkat dengan gabungan sederhana dan operasi pengurutan minimal, disarankan untuk tetap menurunkan work_mem. Jika ada beberapa kueri aktif dengan gabungan dan pengurutan yang kompleks, disarankan untuk menetapkan nilai yang lebih tinggi untuk work_mem.

Sulit untuk mendapatkan nilai yang work_mem tepat. Jika Anda melihat pemanfaatan memori tinggi atau masalah kehabisan memori, pertimbangkan untuk mengurangi work_mem.

Pengaturan yang lebih aman untuk work_mem adalah work_mem = Total RAM / Max_Connections / 16

Nilai default work_mem adalah = 4 MB. Anda dapat mengatur nilai work_mem pada beberapa tingkat termasuk di tingkat server melalui halaman parameter di portal Azure.

Strategi yang baik adalah memantau konsumsi memori selama waktu sibuk.

Jika pengurutan disk terjadi selama waktu ini dan ada banyak memori yang tidak digunakan, tingkatkan work_mem secara bertahap sampai Anda dapat mencapai keseimbangan yang baik antara memori yang tersedia dan digunakan Demikian pula, jika penggunaan memori terlihat tinggi, kurangi work_mem.

Maintenance_Work_Mem

maintenance_work_mem adalah untuk tugas pemeliharaan seperti vakum, menambahkan indeks, atau kunci asing. Penggunaan memori dalam skenario ini adalah per sesi.

Misalnya, pertimbangkan skenario saat ada tiga pekerja autovacuum yang berjalan.

Jika maintenance_work_mem diatur ke 1 GB, semua sesi yang digabungkan akan menggunakan memori sebesar 3 GB.

Nilai maintenance_work_mem tinggi bersama dengan beberapa sesi yang berjalan untuk vakum/pembuatan indeks/penambahan kunci asing dapat menyebabkan pemanfaatan memori tinggi. Nilai maksimum yang maintenance_work_mem diizinkan untuk parameter server di server fleksibel Azure Database for PostgreSQL adalah 2 GB.

Buffer bersama

Parameter shared_buffers menentukan berapa banyak memori yang didedikasikan untuk server untuk penembolokan data. Tujuan buffer bersama adalah untuk mengurangi I/O DISK.

Pengaturan yang wajar untuk buffer bersama adalah 25% dari RAM. Menetapkan nilai yang lebih besar dari 40% RAM tidak disarankan untuk beban kerja yang paling umum.

Koneksi maksimal

Semua koneksi baru dan menganggur pada database server fleksibel Azure Database for PostgreSQL menggunakan memori hingga 2 MB. Salah satu cara untuk memantau koneksi adalah dengan menggunakan kueri berikut:

select count(*) from pg_stat_activity;

Ketika jumlah koneksi ke database tinggi, konsumsi memori juga meningkat.

Dalam situasi di mana ada banyak koneksi database, pertimbangkan untuk menggunakan pengumpul koneksi seperti PgBouncer.

Untuk detail selengkapnya tentang PgBouncer, tinjau:

Pengumpul Koneksi.

Praktik Terbaik.

Server fleksibel Azure Database for PostgreSQL menawarkan PgBouncer sebagai solusi pengumpulan koneksi bawaan. Untuk mengetahui informasi selengkapnya, lihat PgBouncer.

Menjelaskan Analisis

Setelah kueri yang memakan memori tinggi diidentifikasi dari Query Store, gunakan EXPLAIN, dan EXPLAIN ANALYZE untuk menyelidiki lebih lanjut dan menyetelnya.

Untuk mengetahui informasi selengkapnya tentang perintah EXPLAIN, tinjau Rencana Jelaskan.