Saya bertanggung jawab atas database PostgreSQL yang besar, dengan beberapa lusin tabel. Saya menduga bahwa banyak dari tabel ini tidak pernah diakses.
Apa cara terbaik untuk memeriksa kapan terakhir kali tabel tertentu diakses? Saya berpikir untuk menambahkan pemicu DELETE
, INSERT
dan UPDATE
, tapi saya harap ada cara yang lebih efisien.
postgresql
Adam Matan
sumber
sumber
select
. Sudahkah Anda mempertimbangkan untuk masuk ?Jawaban:
pg_catalog.pg_statio_all_tables adalah teman Anda. Yang harus Anda lakukan adalah melakukan polling pg_statio_all_tables secara berkala untuk tabel yang dimaksud. Mengubah statistik ~ tabel aktif, statistik tidak berubah ~ tabel yang berpotensi tidak digunakan. Berhati-hatilah agar tidak ada yang melakukan hal
select pg_stat_reset () ;
di tengah pemantauan Anda.Sebagai contoh:
Sisipan:
Memilih:
Hapus:
perbarui-- 2011-09-01
Pengujian lebih lanjut menunjukkan bahwa
vacuum
tampaknya meningkatkan nilai dalam pg_statio_all_tables agak, yang sangat disayangkan untuk penggunaan yang Anda inginkan. Meskipunvacuum
tidak menggunakan pg_statio_all_tables tidak berguna, itu membuat menafsirkan hasil sedikit lebih fuzzier.Mungkin tempat yang lebih baik untuk memantau adalah pg_catalog.pg_stat_all_tables (setidaknya dengan versi Pg yang lebih baru). Saya sedang melihat versi 8.4 dan yang memiliki jumlah tuple dimasukkan, dibaca, diperbarui, dan dihapus - ISTR 8.2 tidak memiliki semua itu dan saya tidak tahu tentang 8.3 jadi YMMV tergantung pada versi Pg yang Anda miliki. menggunakan.
Opsi ketiga (untuk menyisipkan, memperbarui, dan menghapus aktivitas) adalah menonton stempel waktu file di direktori $ PGDATA / base / $ datid. Nama file harus dipetakan ke oid tabel, jadi Anda bisa menggunakan ini untuk mengidentifikasi tabel yang tidak mendapatkan sisipan, pembaruan, atau penghapusan. Sayangnya, ini tidak membahas tabel yang masih dipilih, dan menggunakan tablespace akan menyebabkan komplikasi tambahan (karena file-file tersebut tidak akan di bawah $ PGDATA / base / $ datid). Stempel waktu tidak akan diperbarui hingga semua perubahan yang tertunda dihapus, tetapi jika file belum berubah dalam beberapa bulan maka kemungkinan perubahan yang saat ini tertunda mungkin kecil.
sumber
Anda bisa mendapatkan beberapa informasi tentang perubahan terakhir ke tabel dengan
xmin
, misalnya:Tapi, Anda perlu mewaspadai modulo dan pembungkus dan xids beku . Tidak ada cara untuk mengubah ini menjadi "waktu", tetapi jika Anda menangkap nilai untuk tabel Anda sekarang, kemudian membandingkannya di kemudian hari, Anda bisa mendapatkan daftar tabel yang telah berubah
sumber