ฉันต้องการรับสถิติเกี่ยวกับจำนวนการเชื่อมต่อสูงสุดในช่วงระยะเวลาหนึ่ง
ฉันรู้ว่าpg_stat_activity
มุมมองชอบselect count(*) from pg_stat_activity
แต่ฉันคิดว่าวิธีนี้ไม่ฉลาดมาก
มีมุมมองหรือตารางอื่น ๆ ที่สามารถให้ข้อมูลที่ฉันต้องการได้หรือไม่?
ฉันต้องการรับสถิติเกี่ยวกับจำนวนการเชื่อมต่อสูงสุดในช่วงระยะเวลาหนึ่ง
ฉันรู้ว่าpg_stat_activity
มุมมองชอบselect count(*) from pg_stat_activity
แต่ฉันคิดว่าวิธีนี้ไม่ฉลาดมาก
มีมุมมองหรือตารางอื่น ๆ ที่สามารถให้ข้อมูลที่ฉันต้องการได้หรือไม่?
คำตอบ:
SQL นี้จะช่วยคุณ
select max_conn,used,res_for_super,max_conn-used-res_for_super res_for_normal
from
(select count(*) used from pg_stat_activity) t1,
(select setting::int res_for_super from pg_settings where name=$$superuser_reserved_connections$$) t2,
(select setting::int max_conn from pg_settings where name=$$max_connections$$) t3
ผล:
max_conn | used | res_for_super | res_for_normal
---------+------+---------------+----------------
100 | 2 | 3 | 95
(1 row)
คุณสามารถใส่มันลงไปในเปลือก:
#!/bin/bash
for (( c=1; c<=3600; c++ ))
do
gsql -U pgdba -W pgdba -p 6432 -c "sql" >> /home/pgdba/res_data.log
sleep 1 # once per second
done
หรือคุณสามารถบันทึกผลลัพธ์ลงในตารางจากนั้นดำเนินการ
postgres=# copy restbl to '/home/pgdba/res.csv' csv header;
เพื่อรับไฟล์ csv ผลลัพธ์