วิธีการตรวจสอบว่ามี [การเชื่อมต่อที่ไม่ได้ใช้งานกับ] ธุรกรรมที่ไม่มีข้อผูกมัดใน PostgreSQL หรือไม่


24

ตามความเห็นเกี่ยวกับคำถามนี้ฉันถามเกี่ยวกับการเชื่อมต่อที่ไม่ได้ใช้งานใน PostgreSQL 9.2ธุรกรรมบางอย่างที่ไม่ได้รับการติดต่อ (อาจเกี่ยวข้องกับการเชื่อมต่อที่ไม่ได้ใช้งาน) อาจทำให้เกิดปัญหาประสิทธิภาพการทำงาน

เป็นวิธีที่ดีในการตรวจสอบว่ามีการทำธุรกรรมที่ปราศจากข้อผูกมัด (คะแนนโบนัสหากมีวิธีที่จะรู้ว่าพวกเขากำลังเชื่อมต่ออยู่ไม่ได้ใช้งานหรือไม่)?

ขอบคุณมาก ๆ!


2
pgtopมีลักษณะที่ นอกจากนี้คุณยังอาจล่าแถวแสดง "ไม่ได้ใช้งานในการทำธุรกรรม" ps auxในการส่งออกของ
dezso

@dezso - pgtopดูน่าสนใจ; จะมีเทียบเท่าสำหรับ Windows?
Max Vernon

@ MaxVernon มีบางคำใบ้ว่าควรทำงานกับ Windows แต่ไม่เห็นตัวอย่างที่ชัดเจน แต่มันก็ยังเป็นโครงการ Perl (ค่อนข้างง่าย) ดังนั้น ... และต่อไปก็ใช้งานได้กับมุมมอง pg_stat *
dezso

คำตอบ:


16

หากคุณต้องการดูจำนวนการเชื่อมต่อที่ไม่ได้ใช้งานของคุณที่มีธุรกรรมแบบเปิดคุณสามารถใช้:

select * 
from pg_stat_activity
where (state = 'idle in transaction')
    and xact_start is not null;

นี่จะให้รายการของการเชื่อมต่อที่เปิดอยู่ในสถานะว่างที่มีธุรกรรมเปิดอยู่

ต้องบอกว่าฉันไม่สามารถสร้างการเชื่อมต่อที่เปิดอยู่ในสถานะว่างที่มีธุรกรรมเปิดอยู่ บางทีคนอื่นสามารถให้รายละเอียดเกี่ยวกับวิธีการทำเช่นนั้น


3
ระวังว่าstateคอลัมน์นั้นมีอยู่ใน 9.2 เท่านั้น และสำหรับฉันดูเหมือนว่าสถานะที่เหมาะสมคือ 'ไม่ได้ใช้งานในการทำธุรกรรม'
dezso

1
ฉันเห็นด้วยกับ dezso
ฟรังก์

1
state = 'idle'ไม่ได้ระบุธุรกรรมที่เปิดอยู่
a_horse_with_no_name

2
I cannot recreate an open connection in the idle state that has an open transaction. เปิดการเชื่อมต่อที่สองไปยังฐานข้อมูลและพิมพ์ "เริ่มต้น" ในหนึ่ง ในระยะอื่น ๆ idle in transactionแบบสอบถามดังกล่าวและคุณจะมี
X-Istence
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.