Bagaimana Anda memeriksa jika instance DB postgresql Anda membutuhkan lebih banyak memori RAM untuk menangani data kerjanya saat ini?
database
performance
postgresql
memory
SDReyes
sumber
sumber
Jawaban:
Jika semua Anda menggunakan Linux, total RAM fisik Anda harus lebih besar dari ukuran basis data Anda pada disk untuk meminimalkan I / O. Akhirnya seluruh database akan berada dalam cache read OS dan I / O akan terbatas untuk melakukan perubahan pada disk. Saya lebih suka menemukan ukuran DB dengan menjalankan "du -shc $ PGDATA / base" - metode yang mengumpulkan semua database menjadi satu nomor. Selama Anda lebih besar dari itu, itu akan baik-baik saja.
Selain itu, Anda dapat melihat tingkat hit cache dari heap dan indeks ambil blok. Ini mengukur tingkat klik ke buffer bersama PostgreSQL. Angka-angka ini bisa sedikit menyesatkan - meskipun mungkin ada kesalahan dalam cache buffer bersama, itu mungkin masih menjadi hit di cache read OS. Namun, hit di buffer bersama masih lebih murah daripada hit di cache baca OS (yang, pada gilirannya, lebih murah oleh beberapa pesanan besar daripada harus kembali ke disk).
Untuk melihat tingkat klik buffer bersama, saya menggunakan kueri ini:
Ini memberi Anda 25 pelanggar terburuk teratas di mana cache buffer tidak terjawab untuk semua tabel di mana setidaknya satu blok harus diambil dari "disk" (sekali lagi, yang bisa berupa cache pembacaan OS atau I / O disk aktual). Anda dapat meningkatkan nilai dalam klausa WHERE atau menambahkan kondisi lain untuk heap_blks_hit untuk memfilter tabel yang jarang digunakan.
Kueri dasar yang sama dapat digunakan untuk memeriksa tingkat hit indeks total per tabel dengan mengganti string "heap" secara global dengan "idx". Lihatlah pg_statio_user_indexes untuk mendapatkan rincian per-indeks.
Catatan singkat tentang buffer bersama: aturan praktis yang baik untuk ini di Linux adalah mengatur parameter konfigurasi shared_buffers ke 1/4 dari RAM, tetapi tidak lebih dari 8GB. Ini bukan aturan yang sulit dan cepat, tetapi lebih merupakan titik awal yang baik untuk menyetel server. Jika database Anda hanya 4GB dan Anda memiliki server 32GB, 8GB buffer bersama sebenarnya berlebihan dan Anda harus dapat mengatur ini ke 5 atau 6 GB dan masih memiliki ruang untuk pertumbuhan di masa depan.
sumber
Saya membuat SQL ini untuk menampilkan tabel vs disk hits rasio:
sumber
Ini juga berfungsi, seperti yang dikatakan dalam dokumen Heroku:
sumber