ฉันจะดีบัก Idle Query ได้อย่างไร


13

ฉันมีชุดแบบสอบถามที่ฉันทำงานทุกวันในฐานข้อมูลของฉัน อย่างไรก็ตามดูเหมือนว่าจะติดอยู่ในสถานะไม่ได้ใช้งานและฉันมีปัญหาในการดีบั๊กสิ่งที่เกิดขึ้น

แบบสอบถามคือการรวมตัวกันบนโต๊ะที่ถูกแทรกพร้อมกันซึ่งฉันเดาว่าเกี่ยวข้องกับปัญหาอย่างใด (การรวมเป็นข้อมูลวันก่อนหน้าดังนั้นการแทรกไม่ควรส่งผลต่อผลลัพธ์)

เบาะแส

  1. ฉันใช้มันในสคริปต์หลามโดยใช้ sqlalchemy อย่างไรก็ตามฉันได้ตั้งค่าระดับธุรกรรมเป็นแบบอัตโนมัติดังนั้นฉันไม่คิดว่าสิ่งต่าง ๆ จะถูกห่อในการทำธุรกรรม ในทางกลับกันฉันไม่เห็นข้อความค้นหาหยุดทำงานเมื่อฉันรันด้วยตนเองในเทอร์มินัล sql

  2. โดยการสอบถามแบบสอบถามครั้งแรกที่เข้ามาในฐานข้อมูลเป็นpg_stat_activity state='active'หลังจาก 15 วินาทีอาจจะมีการเปลี่ยนแปลงของรัฐที่จะ 'ไม่ได้ใช้งานและนอกจากนี้มีการตั้งค่าxact_start NULLธงรอไม่เคยถูกตั้งค่าเป็นจริง

  3. ก่อนที่ผมจะคิดออก autocommit ระดับธุรกรรมสำหรับ sqlalchemy มันแทนจะแขวนในรัฐมากกว่า'idle in transaction' 'idle'และมันอาจจะแฮงค์น้อยลงเล็กน้อยนับตั้งแต่ทำการเปลี่ยนแปลง?

ฉันรู้สึกว่าฉันไม่พร้อมที่จะขุดลึกลงไปกว่าที่ฉันมี ข้อเสนอแนะใด ๆ แม้จะอธิบายเพิ่มเติมเกี่ยวกับรัฐต่างๆและผู้ฝึกงานระดับสูงที่เกี่ยวข้องโดยไม่ต้องตอบคำถามแน่นอนจะได้รับการชื่นชมอย่างมาก


2
หากสถานะไม่ได้ใช้งานและไม่ได้รอการสืบค้นจะเสร็จสิ้น แต่การเชื่อมต่อกับฐานข้อมูลจะไม่ถูกปิด ไม่มีการใช้งานในการทำธุรกรรมหมายความว่าแบบสอบถามเสร็จสมบูรณ์ แต่ยังไม่มีCOMMITการออกเพื่อยุติการทำธุรกรรม ดูเหมือนว่าปัญหาของคุณอาจจะอยู่ที่อื่นนอกเหนือจากฐานข้อมูล ..
Joishi Bodio

ใช่ฉันคิดว่าคุณพูดถูก ปัญหาคือวิธีที่ Python จัดการกับแบบสอบถามไม่ใช่ปัญหากับฐานข้อมูล
Kurt Spindler

คำตอบ:


6

สิ่งแรกที่คุณต้องแยกที่นี่มีคำแบบสอบถาม , การทำธุรกรรมและการเชื่อมต่อ

  1. เบาะแส: แบบสอบถามของคุณถูกดำเนินการ - อยู่ในสถานะใช้งาน หลังจากนั้นแบบสอบถามจะสิ้นสุดลง แต่การเชื่อมต่อยังคงอยู่ - สถานะว่าง ไม่มีการทำธุรกรรม (มันได้รับการยอมรับ) ดังนั้นจึงxact_startเป็นโมฆะ ดังนั้นคุณต้องปิดการเชื่อมต่อหลังจากที่แบบสอบถามประสบความสำเร็จ

  2. แย้ม: ก่อน autocommit อยู่บนแบบสอบถามถูกทิ้งไว้ในช่วงกลางของการทำธุรกรรมเพื่อครั้งแรกที่คุณจะต้องแล้วcommitclose connection

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