การรับหลาย ๆ คำสั่งด้วย“ แสดงระดับการแยกธุรกรรม” ใน pg_activity


10

ฉันใช้เซิร์ฟเวอร์ PostgreSQL สำหรับการใช้งานจริงของฉัน

เมื่อฉันเริ่มต้นแบบสอบถาม

select * from pg_stat_activity

บนเซิร์ฟเวอร์ของฉันฉันได้รับ 98% ของข้อความค้นหาเช่น

SHOW TRANSACTION ISOLATION LEVEL

และเซิร์ฟเวอร์ของฉันยอมรับการเชื่อมต่อเพียง 100 ครั้งดังนั้นฉันจึงไม่สามารถดำเนินการต่อไปได้

ทำไมสิ่งนี้จึงเกิดขึ้น ฉันจะบล็อกข้อความค้นหาเหล่านี้ทั้งหมดได้อย่างไร


4
Postgres ไม่ได้สร้างการเชื่อมต่อด้วยตนเอง เป็นแอปพลิเคชันของคุณที่สร้างการเชื่อมต่อเหล่านั้นและเรียกใช้คิวรีเหล่านั้น อาจเป็นพูลการเชื่อมต่อหรือสิ่งที่คล้ายกัน
a_horse_with_no_name

2
คุณใช้แอปพลิเคชัน Java อยู่หรือไม่ ใช้ HikariCP หรืออาจเป็นอีกทางเลือกในการรวมการเชื่อมต่อ? ฉันใช้ HikariCP และเห็นสิ่งที่คล้ายกันเมื่อฉันเข้าสู่ระบบpsqlและทำselect query from pg_stat_activity;... ฉันยังสงสัยว่าทำไมสิ่งนี้จึงเกิดขึ้น ฉันเดาว่านี่เป็นกลไกที่ HikariCP คอยทำให้การเชื่อมต่อ "สด"
Chris W.

คำตอบ:


2

หากพวกเขาอยู่ที่นั่น พวกเขาอยู่ที่นั่น แต่พวกเขาไม่ได้โผล่ออกมาจากอากาศอย่างน่าอัศจรรย์ ในขณะที่ฉันรักที่จะให้คุณกลับมาและบอกเราว่าพวกเขาเป็นอย่างไรในกรณีของคุณมันเป็นหนึ่งในสองสิ่ง

  1. การรวมการเชื่อมต่อ
  2. ORM หรือ SQL นามธรรม

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

จากความเห็น

Postgres ไม่ได้สร้างการเชื่อมต่อด้วยตนเอง มันเป็นแอปพลิเคชันของคุณที่สร้างการเชื่อมต่อเหล่านั้นและเรียกใช้แบบสอบถาม อาจเป็นพูลการเชื่อมต่อหรือสิ่งที่คล้ายกัน - a_horse_with_no_name 10 ก.ย. '13 เวลา 9:03 น

คุณใช้แอปพลิเคชัน Java อยู่หรือไม่ ใช้ HikariCP หรืออาจเป็นอีกทางเลือกในการรวมการเชื่อมต่อ? ฉันใช้ HikariCP และเห็นสิ่งที่คล้ายกันเมื่อฉันเข้าสู่ psql และเลือกแบบสอบถามจาก pg_stat_activity; ... ฉันยังสงสัยว่าทำไมสิ่งนี้ถึงเกิดขึ้น ฉันเดาว่านี่เป็นกลไกที่ HikariCP คอยทำให้การเชื่อมต่อ "สด" - Chris W. 16 มกราคม '16 ที่ 19:22

ในขณะที่เป็นไปได้มันเป็นความพยายามในการรักษาการเชื่อมต่อที่ "สด" วิธี kosher ที่จะทำเช่นนี้

result = PQexec(imp_dbh->conn, "/* DBD::Pg ping test v3.6.0 */");

คุณอาจต้องการส่งรายงานข้อผิดพลาดเพื่อใช้วิธีการนั้นแทน

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