แบบสอบถามที่ถูกต้องเพื่อรับจำนวนการเชื่อมต่อปัจจุบันในฐานข้อมูล PostgreSQL


คำตอบ:


226

ทั้งสองนั้นต้องการไม่เท่ากัน รุ่นที่เทียบเท่าของรุ่นแรกจะเป็น:

SELECT sum(numbackends) FROM pg_stat_database;

ในกรณีนี้ฉันคาดว่ารุ่นนั้นจะเร็วกว่ารุ่นที่สองเล็กน้อยเพียงเพราะมีจำนวนแถวน้อยกว่าที่จะนับ แต่คุณไม่น่าจะสามารถวัดความแตกต่างได้

คำค้นหาทั้งสองจะขึ้นอยู่กับข้อมูลเดียวกันทั้งหมดดังนั้นพวกเขาจะถูกต้องเท่าเทียมกัน


1
ไม่จริงพวกเขาถูกต้องเท่าเทียมกัน ดูคำตอบของฉัน
gargii

2
โปรดทราบว่าเมื่อเครื่องมือบรรทัดคำสั่ง postgres, PSQL จะใช้สำหรับการดำเนินการแบบสอบถามนี้จำนวนการเชื่อมต่อทั้งหมดเป็นผลมาจากแบบสอบถามนี้ - 1 เนื่องจากการเชื่อมต่อ psql ทำรวมอยู่ในการเชื่อมต่อ
Neonidian

25

แบบสอบถามต่อไปนี้มีประโยชน์มาก

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;

2
คุณอธิบายได้ไหมว่าคอลัมน์ 'ใช้แล้ว' และ 'res_for_super' นั้นมีอะไรบ้าง
เดิมพัน

สวัสดีการเชื่อมต่อที่ใช้ถูกใช้แล้ว res_for_super เป็นการเชื่อมต่อที่สงวนไว้สำหรับการเข้าถึง superuser
tbo

12

พวกเขาอาจให้ผลลัพธ์ที่แตกต่างแน่นอน สิ่งที่ดีกว่าคือ

select count(*) from pg_stat_activity;

ก็เพราะมันรวมถึงการเชื่อมต่อกับกระบวนการส่ง WAL max_connectionsซึ่งจะถือว่าเป็นการเชื่อมต่อปกติและนับต่อ

ดูmax_wal_senders


2

การรวมเซสชัน postgres ทั้งหมดตามสถานะของพวกเขา (มีจำนวนไม่ได้ใช้งานจำนวนการทำบางสิ่ง ... )

select state, count(*) from pg_stat_activity  where pid <> pg_backend_pid() group by 1 order by 1;

0

จำนวนการเชื่อมต่อ TCP จะช่วยคุณ จำไว้ว่ามันไม่ได้มีไว้สำหรับฐานข้อมูลเฉพาะ

netstat -a -n | find /c "127.0.0.1:13306"

1
ความคิดเห็นนี้สำหรับระบบปฏิบัติการที่ใช้ Windows สำหรับ Linux อาจเป็นสิ่งต่อไปนี้: lsof -Pni: 5432 | fgrep ">" | fgrep -i ก่อตั้ง | wc -l
XXL

3
นี่ไม่ใช่แบบสอบถาม SQL โปรดอย่าเพิ่มเสียงรบกวนสำหรับคำถามเฉพาะ
bugmenot123

-3

จากการดูซอร์สโค้ดดูเหมือนว่าเคียวรี pg_stat_database จะให้จำนวนการเชื่อมต่อกับฐานข้อมูลปัจจุบันสำหรับผู้ใช้ทั้งหมด ในทางกลับกันแบบสอบถาม pg_stat_activity ให้จำนวนการเชื่อมต่อกับฐานข้อมูลปัจจุบันสำหรับผู้ใช้ที่สอบถามเท่านั้น


1
นั่นไม่ถูกต้อง pg_stat_activity ให้การเชื่อมต่อทั้งหมดเช่นกันโดยไม่คำนึงถึงผู้ใช้ จากนั้นจะให้ฟิลด์ซึ่งระบุว่าเป็นผู้ใช้รายใดซึ่งคุณสามารถกรองได้หากต้องการ มันจะไม่ให้ข้อความของแบบสอบถามถ้าคุณไม่ใช่ผู้ใช้เดียวกันหรือเป็น superuser แต่มันจะยังแสดงการเชื่อมต่อ
Magnus Hagander

3
คุณถูก. ฉันไม่ได้มองอย่างใกล้ชิดพอที่คำจำกัดความของมุมมอง ข้อ จำกัด ของหมายเลขผู้ใช้เป็นเพียงการเข้าร่วมกับ pg_authid ความผิดพลาดของฉัน.
Brian L
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.