เป็นไปได้หรือไม่ที่จะตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์ PostgreSQL จากภายในฟังก์ชัน PL / PGSQL
สิ่งนี้อาจฟังดูแปลกใหม่โดยฉันต้องการทราบทางโปรแกรมว่าเป็น 'ช่วงเวลาที่ดี' หรือไม่ที่จะเรียกใช้ฟังก์ชัน PL / PGSQL แบบเขียนจำนวนมากในเซิร์ฟเวอร์ โดย 'ช่วงเวลาที่ดี' ฉันหมายถึงการไตร่ตรองตัวบ่งชี้โดยตรงหรือจากการคำนวณของระดับการโหลดระดับการทำงานพร้อมกันหรือขนาดอื่น ๆ ของเซิร์ฟเวอร์ PostgreSQL
ฉันทราบว่ามีแอปพลิเคชั่นขั้นสูงจำนวนมากที่เชี่ยวชาญในการติดตามประสิทธิภาพเช่น https://www.datadoghq.com. แต่ฉันแค่ต้องการ KPI ภายในง่ายๆที่เปลี่ยนแปลงหรือชะลอการดำเนินการของขั้นตอนการเขียนจำนวนมากเหล่านี้จนกว่าจะถึงเวลา
บางขั้นตอนเหล่านี้ล้างตารางบางส่วนทำการคำนวณเฉลี่ย / ผลรวมมากกว่าหลายล้านแถวบางส่วนตรวจสอบตารางระยะไกล ฯลฯ อาจรอเป็นนาทีหรือชั่วโมงเพื่อให้ 'ช่วงเวลาที่ดีขึ้น' เมื่อความกดดันของผู้ใช้พร้อมกันลดลง
ความคิดใด ๆ ?
คำตอบ
คุณสามารถดูจำนวนเซสชันอื่น ๆ ที่มีการใช้งานได้ดังนี้:
select count(*) from pg_stat_activity where state='active';
แต่คุณต้องเป็น superuser หรือมีบทบาท pg_monitor มิฉะนั้นสถานะจะเป็น NULL สำหรับเซสชันของผู้ใช้รายอื่น หากสิ่งนั้นรบกวนคุณคุณสามารถเขียนฟังก์ชันด้วย SECURITY DEFINER เพื่ออนุญาตให้เข้าถึงข้อมูลนี้ (คุณน่าจะใส่สิ่งนี้ลงในฟังก์ชันของตัวเองอยู่ดีซึ่งหมายความว่าไม่มีเหตุผลที่จะต้องนำมาใช้ใน plpgsql เว้นแต่ว่าจะเป็นภาษาเดียวที่มีให้สำหรับคุณ)
คุณยังสามารถเรียกใช้การดำเนินการของระบบปฏิบัติการใด ๆ โดยพลการโดยใช้ภาษา pl ที่มีสิทธิพิเศษอย่างเหมาะสม นั่นรวมถึงจาก plpgsqlCOPY...FROM PROGRAM
โดยเหยียดหยาม