Apakah mungkin untuk memantau kinerja server PostgreSQL dari dalam fungsi PL / PGSQL?
Ini mungkin terdengar eksotis, oleh saya ingin tahu secara terprogram apakah ini adalah 'momen yang baik' untuk menjalankan fungsi PL / PGSQL yang banyak menulis di server. Yang saya maksud dengan 'momen baik' adalah merenungkan beberapa indikator langsung atau dihitung dari tingkat beban, tingkat konkurensi, atau besaran lain dari server PostgreSQL.
Saya menyadari ada sejumlah aplikasi tingkat lanjut yang berspesialisasi dalam pelacakan kinerja di luar sana, seperti https://www.datadoghq.com. Tapi saya hanya ingin KPI internal sederhana yang mengubah atau menunda pelaksanaan prosedur penulisan berat ini sampai 'momen yang lebih baik' datang.
Beberapa dari prosedur ini membersihkan tabel, beberapa membuat penghitungan rata-rata / jumlah lebih dari jutaan baris, beberapa memeriksa tabel jarak jauh, dll. Mereka mungkin menunggu beberapa menit atau jam untuk 'momen yang lebih baik' ketika tekanan pengguna secara bersamaan turun.
Ada ide?
Jawaban
Anda dapat melihat berapa banyak sesi lain yang aktif dengan sesuatu seperti:
select count(*) from pg_stat_activity where state='active';
Tetapi Anda harus menjadi pengguna super, atau memiliki peran pg_monitor, atau status akan menjadi NULL untuk sesi pengguna lain. Jika itu mengganggu Anda, Anda dapat menulis fungsi dengan SECURITY DEFINER untuk mengizinkan akses ke info ini. (Anda mungkin harus meletakkan ini ke dalam fungsinya sendiri, yang berarti tidak ada alasan bahwa ini perlu diterapkan di plpgsql kecuali itu satu-satunya bahasa yang tersedia untuk Anda.)
Anda juga dapat menjalankan operasi OS sembarang dengan menggunakan bahasa pl yang memiliki hak istimewa yang sesuai. Itu termasuk dari plpgsql , dengan menyalahgunakan COPY...FROM PROGRAM
.