เป็นไปได้หรือไม่ที่จะตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์ PostgreSQL จากภายในฟังก์ชัน PL / PGSQL

Aug 17 2020

สิ่งนี้อาจฟังดูแปลกใหม่โดยฉันต้องการทราบทางโปรแกรมว่าเป็น 'ช่วงเวลาที่ดี' หรือไม่ที่จะเรียกใช้ฟังก์ชัน PL / PGSQL แบบเขียนจำนวนมากในเซิร์ฟเวอร์ โดย 'ช่วงเวลาที่ดี' ฉันหมายถึงการไตร่ตรองตัวบ่งชี้โดยตรงหรือจากการคำนวณของระดับการโหลดระดับการทำงานพร้อมกันหรือขนาดอื่น ๆ ของเซิร์ฟเวอร์ PostgreSQL

ฉันทราบว่ามีแอปพลิเคชั่นขั้นสูงจำนวนมากที่เชี่ยวชาญในการติดตามประสิทธิภาพเช่น https://www.datadoghq.com. แต่ฉันแค่ต้องการ KPI ภายในง่ายๆที่เปลี่ยนแปลงหรือชะลอการดำเนินการของขั้นตอนการเขียนจำนวนมากเหล่านี้จนกว่าจะถึงเวลา

บางขั้นตอนเหล่านี้ล้างตารางบางส่วนทำการคำนวณเฉลี่ย / ผลรวมมากกว่าหลายล้านแถวบางส่วนตรวจสอบตารางระยะไกล ฯลฯ อาจรอเป็นนาทีหรือชั่วโมงเพื่อให้ 'ช่วงเวลาที่ดีขึ้น' เมื่อความกดดันของผู้ใช้พร้อมกันลดลง

ความคิดใด ๆ ?

คำตอบ

3 jjanes Aug 16 2020 at 23:56

คุณสามารถดูจำนวนเซสชันอื่น ๆ ที่มีการใช้งานได้ดังนี้:

select count(*) from pg_stat_activity where state='active';

แต่คุณต้องเป็น superuser หรือมีบทบาท pg_monitor มิฉะนั้นสถานะจะเป็น NULL สำหรับเซสชันของผู้ใช้รายอื่น หากสิ่งนั้นรบกวนคุณคุณสามารถเขียนฟังก์ชันด้วย SECURITY DEFINER เพื่ออนุญาตให้เข้าถึงข้อมูลนี้ (คุณน่าจะใส่สิ่งนี้ลงในฟังก์ชันของตัวเองอยู่ดีซึ่งหมายความว่าไม่มีเหตุผลที่จะต้องนำมาใช้ใน plpgsql เว้นแต่ว่าจะเป็นภาษาเดียวที่มีให้สำหรับคุณ)

คุณยังสามารถเรียกใช้การดำเนินการของระบบปฏิบัติการใด ๆ โดยพลการโดยใช้ภาษา pl ที่มีสิทธิพิเศษอย่างเหมาะสม นั่นรวมถึงจาก plpgsqlCOPY...FROM PROGRAMโดยเหยียดหยาม