pgFincore 1.2 adalah ekstensi PostgreSQL untuk mengaudit dan memanipulasi cache halaman data sistem operasi. Ekstensi ini telah memiliki riwayat penggunaan selama 7 tahun, dengan evolusi yang sesuai dengan kebutuhan produksi.
Unduh di sini versi terbaru 1.2, kompatibel dengan PostgreSQL 9.6.
Tembolok data
Caching halaman data adalah operasi yang terjadi "secara alami", pada beberapa tingkatan dalam manajemen data. Objeknya sederhana:banyak lapisan ditumpangkan antara data yang direkam secara fisik pada disk dan ganti rugi kepada pengguna. Saat ini hampir setiap lapisan data memiliki abstraksi untuk melayani perintah baca dan tulis lebih cepat. Jadi, sebagian besar hard drive menawarkan cache tulis, yang menunda penulisan fisik, dan cache baca yang memungkinkan Anda mengantisipasi permintaan di masa mendatang dan menyajikan data dengan lebih cepat. Sistem yang setara ada di SAN, kartu RAID, sistem operasi, perangkat lunak, dll.
PostgreSQL tentu saja memiliki sistem manajemennya sendiri untuk menulis dan membaca, buffer bersama , yang dapat diaudit dengan ekstensi pg_buffercache.
Dimungkinkan untuk mengaudit cache sistem operasi dengan alat sistem, dan pgFincore port ini di PostgreSQL.
Baca Sebelumnya
Sebagian besar sistem operasi mengoptimalkan jalur data dengan menyediakan jendela baca-depan, ini memungkinkan untuk memuat data ke dalam cache dan dengan demikian memberikannya lebih cepat ke aplikasi. PostgreSQL berisi beberapa pengoptimalan untuk mendukung perilaku ini di tingkat sistem, dan juga membawa fungsionalitas serupa dengan opsi effective_io_concurrency.
Salah satu solusi untuk memfasilitasi pengoptimalan ini adalah dengan menggunakan panggilan sistem POSIX_FADVISE. Sekali lagi pgFincore port solusi ini di PostgreSQL.
pgFincore 1.2
Oleh karena itu, ekstensi ini memungkinkan:
- untuk mendapatkan informasi yang tepat tentang penggunaan tabel atau indeks (dan beberapa file lain yang digunakan oleh PostgreSQL) dalam cache sistem yang mendukung POSIX (linux, BSD, ...),
- untuk memanipulasi cache ini:buat petanya dan pulihkan nanti atau di server lain,
- untuk mengoptimalkan jalur melalui panggilan posix_fadvise.
Dapatkan pgFincore
Paket Debian dan Red Hat tersedia di distribusi, dan untuk setiap versi PostgreSQL di repositori Apt PGDG dan RPM PGDG.
Dan sumber-sumber di repositori pgfincore git.
Butuh bantuan?
Selain dukungan komunitas, Anda dapat menghubungi 2ndQuadrant.
Contoh penggunaan
Penyiapan
$ sudo apt-get install postgresql-9.6-pgfincore $ psql -c 'CREATE EXTENSION pgfincore;'
Informasi Sistem
# select * from pgsysconf_pretty(); os_page_size | os_pages_free | os_total_pages --------------+---------------+---------------- 4096 bytes | 314 MB | 16 GB
Optimalkan random walk (kurangi jendela read-ahead)
# select * from pgfadvise_random('pgbench_accounts_pkey'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/24980 | 4096 | 2 | 1853808
Optimalkan traversal sekuensial (peningkatan jendela baca-depan)
# select * from pgfadvise_sequential('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/25676 | 4096 | 3176 | 1829288
Audit cache
# select * from pgfincore('pgbench_accounts'); relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit --------------------+---------+--------------+--------------+-----------+-----------+---------------+--------- base/11874/16447 | 0 | 4096 | 262144 | 3 | 1 | 408444 | base/11874/16447.1 | 1 | 4096 | 65726 | 0 | 0 | 408444 |
Memuat tabel ke dalam memori
# select * from pgfadvise_willneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 80650 base/11874/16447.1 | 4096 | 65726 | 80650
Hapus cache tabel
# select * from pgfadvise_dontneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 342071 base/11874/16447.1 | 4096 | 65726 | 408103
Pulihkan halaman yang di-cache
Di sini kita menggunakan parameter tipe bit-string yang mewakili halaman untuk memuat dan membongkar dari memori.
# select * from pgfadvise_loader('pgbench_accounts', 0, true, true, B'101001'); -- Varbit décrivant les pages à manipuler relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded ------------------+--------------+---------------+--------------+---------------- base/11874/16447 | 4096 | 408376 | 3 | 3
CATATAN:untuk demo, hanya 6 halaman data yang ditangani di atas, 1 memuat halaman, 0 membongkar halaman.