ข้อใดต่อไปนี้ถูกต้องมากขึ้น
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
ข้อใดต่อไปนี้ถูกต้องมากขึ้น
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
คำตอบ:
ทั้งสองนั้นต้องการไม่เท่ากัน รุ่นที่เทียบเท่าของรุ่นแรกจะเป็น:
SELECT sum(numbackends) FROM pg_stat_database;
ในกรณีนี้ฉันคาดว่ารุ่นนั้นจะเร็วกว่ารุ่นที่สองเล็กน้อยเพียงเพราะมีจำนวนแถวน้อยกว่าที่จะนับ แต่คุณไม่น่าจะสามารถวัดความแตกต่างได้
คำค้นหาทั้งสองจะขึ้นอยู่กับข้อมูลเดียวกันทั้งหมดดังนั้นพวกเขาจะถูกต้องเท่าเทียมกัน
แบบสอบถามต่อไปนี้มีประโยชน์มาก
select * from
(select count(*) used from pg_stat_activity) q1,
(select setting::int res_for_super from pg_settings where name=$$superuser_reserved_connections$$) q2,
(select setting::int max_conn from pg_settings where name=$$max_connections$$) q3;
พวกเขาอาจให้ผลลัพธ์ที่แตกต่างแน่นอน สิ่งที่ดีกว่าคือ
select count(*) from pg_stat_activity;
ก็เพราะมันรวมถึงการเชื่อมต่อกับกระบวนการส่ง WAL max_connections
ซึ่งจะถือว่าเป็นการเชื่อมต่อปกติและนับต่อ
การรวมเซสชัน postgres ทั้งหมดตามสถานะของพวกเขา (มีจำนวนไม่ได้ใช้งานจำนวนการทำบางสิ่ง ... )
select state, count(*) from pg_stat_activity where pid <> pg_backend_pid() group by 1 order by 1;
จำนวนการเชื่อมต่อ TCP จะช่วยคุณ จำไว้ว่ามันไม่ได้มีไว้สำหรับฐานข้อมูลเฉพาะ
netstat -a -n | find /c "127.0.0.1:13306"
จากการดูซอร์สโค้ดดูเหมือนว่าเคียวรี pg_stat_database จะให้จำนวนการเชื่อมต่อกับฐานข้อมูลปัจจุบันสำหรับผู้ใช้ทั้งหมด ในทางกลับกันแบบสอบถาม pg_stat_activity ให้จำนวนการเชื่อมต่อกับฐานข้อมูลปัจจุบันสำหรับผู้ใช้ที่สอบถามเท่านั้น