เป็นไปได้ไหมที่จะ จำกัด การหมดเวลาบนเซิร์ฟเวอร์ Postgres?


17

ฉันตั้งค่าการเชื่อมต่อและหมดเวลาคำสั่งเป็น 10 นาทีในแอปพลิเคชันของฉัน (ฝั่งไคลเอ็นต์)

กว่าใบสมัครของฉันเรียกใช้แบบสอบถามง่าย ๆ : SELECT pg_sleep(65)

ในบางเซิร์ฟเวอร์มันใช้งานได้ดี แต่เซิร์ฟเวอร์อื่นปิดการเชื่อมต่อหลังจาก 60 วินาที

นี่อาจเป็นประเภทของการกำหนดค่าเซิร์ฟเวอร์ PostgreSQL ซึ่ง จำกัด การหมดเวลาและละเว้นการตั้งค่าไคลเอ็นต์ของฉันหรือไม่


หากต้องการดูการหมดเวลาปัจจุบัน:SHOW statement_timeout;
ผู้ใช้

คำตอบ:


27

ใช่มันเป็นไปได้

มีการตั้งค่าสองอย่างที่ระบุไว้ในเอกสาร ( idle_in_transaction_session_timeoutใหม่กับรุ่น 9.6x)

  • statement_timeout (จำนวนเต็ม)

    ยกเลิกคำสั่งใด ๆ ที่ใช้เวลามากกว่าจำนวนมิลลิวินาทีที่ระบุเริ่มต้นจากเวลาที่คำสั่งมาถึงที่เซิร์ฟเวอร์จากไคลเอนต์ หาก log_min_error_statement ถูกตั้งค่าเป็น ERROR หรือต่ำกว่าคำสั่งที่หมดเวลาจะถูกบันทึกไว้ด้วย ค่าเป็นศูนย์ (ค่าเริ่มต้น) จะปิดสิ่งนี้

    ไม่แนะนำให้ตั้งค่า statement_timeout ใน postgresql.conf เนื่องจากจะมีผลกับเซสชันทั้งหมด

  • idle_in_transaction_session_timeout (จำนวนเต็ม)

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

    ค่าเริ่มต้นเป็น 0 จะปิดใช้งานคุณสมบัตินี้

เป็นสิ่งสำคัญที่จะไม่ตั้งstatement_timeoutใน postgresql.conf เว้นแต่คุณต้องการความสนุก

นี่คือตัวอย่างของการทำงาน

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

ไม่มีการตั้งค่าอยู่ในไฟล์กำหนดค่าดังนั้นฉันจึงใช้ค่าเริ่มต้น :( ความคิดอื่นใดอีกหรือเปล่า
Andrzej Gis

@ แน่ใจว่ามันอาจเป็นสิ่งที่ระดับเครือข่ายไม่ว่าจะเป็นในสแต็ค IP ในพื้นที่ของคุณหรือที่ไฟร์วอลล์
Evan Carroll

4

ไม่ออกนอกกรอบ มันจะค่อนข้างง่ายในการรวบรวมเซิร์ฟเวอร์ที่กำหนดเองที่ไม่สนใจการตั้งค่าของคุณ

แต่มีโอกาสมากขึ้นที่การเชื่อมต่อของคุณจะถูกตัดโดยไฟร์วอลล์หรือเกตเวย์ที่ไม่ชอบการเชื่อมต่อที่ไม่ได้ใช้งาน

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


มันแน่นอนไม่เซิร์ฟเวอร์รวบรวมกำหนดเอง - เพียงแค่สิ่งที่ปกติจาก apt-get คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับไฟร์วอลล์และเกตเวย์ของ abut ให้มากขึ้นได้ไหม? ฉันจะตรวจสอบและแก้ไขได้อย่างไร
Andrzej Gis

-2

ใช่มันเป็นไปได้ มีพารามิเตอร์การเชื่อมต่อบางอย่างที่คุณต้องตั้งค่า

โปรดอ้างอิงลิงค์ด้านล่าง https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout ซ็อกเก็ตหมดเวลาหมดเวลายกเลิกยกเลิกสัญญาณหมดเวลา


2
สิ่งเหล่านี้เป็นการตั้งค่าสำหรับฝั่งไคลเอ็นต์ของการเชื่อมต่อฐานข้อมูลและไม่ใช่การตั้งค่าที่สามารถกำหนดค่าบนเซิร์ฟเวอร์เพื่อตัดการเชื่อมต่อไคลเอ็นต์ OP กำลังค้นหาการตั้งค่าการหมดเวลาการเชื่อมต่อฝั่งเซิร์ฟเวอร์
John aka hot2use
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.