คุณต้องดูว่าจะใช้ค่าเริ่มต้นใดในการหมดเวลา:
mysql> show variables like '%timeout';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 60 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 60 |
+----------------------------+-------+
10 rows in set (0.00 sec)
โดยปกติฉันดูตัวแปรหมดเวลาหลายครั้ง นี่เป็นสิ่งจำเป็นอย่างยิ่งหากคุณใช้ MySQL จากระยะไกลจาก MySQL Workbench, ไคลเอนต์ mysql หรือแอป PHP บนเซิร์ฟเวอร์แอพที่ติดต่อกับ MySQL บนเซิร์ฟเวอร์ฐานข้อมูล
นี่คือความหมายของเอกสาร MySQL ที่กล่าวถึงการตั้งค่าเหล่านี้:
- wait_timeout (ค่าเริ่มต้น 28800 [8 ชั่วโมง]): จำนวนวินาทีที่เซิร์ฟเวอร์รอกิจกรรมในการเชื่อมต่อแบบไม่โต้ตอบก่อนที่จะปิด การหมดเวลานี้ใช้เฉพาะกับการเชื่อมต่อไฟล์ซ็อกเก็ต TCP / IP และ Unix ไม่ใช่การเชื่อมต่อที่ทำโดยใช้ไพพ์ที่มีชื่อหรือหน่วยความจำที่แชร์ ในการเริ่มต้นเธรดค่าเซสชัน wait_timeout จะเริ่มต้นจากค่าส่วนกลาง wait_timeout หรือจากค่าโกลบอล interactive_timeout ขึ้นอยู่กับประเภทของลูกค้า (ตามที่กำหนดโดยตัวเลือกการเชื่อมต่อ CLIENT_INTERACTIVE เพื่อ mysql_real_connect () ดูเพิ่มเติมที่ interactive_timeout
- interactive_timeout (ค่าเริ่มต้น 28800 [8 ชั่วโมง]): จำนวนวินาทีที่เซิร์ฟเวอร์รอกิจกรรมในการเชื่อมต่อแบบโต้ตอบก่อนที่จะปิด ไคลเอนต์แบบโต้ตอบถูกกำหนดเป็นไคลเอนต์ที่ใช้ตัวเลือก CLIENT_INTERACTIVE เพื่อ mysql_real_connect () ดูเพิ่มเติม wait_timeout
- net_read_timeout (ค่าเริ่มต้น 30): จำนวนวินาทีที่รอข้อมูลเพิ่มเติมจากการเชื่อมต่อก่อนที่จะยกเลิกการอ่าน เมื่อเซิร์ฟเวอร์กำลังอ่านจากไคลเอ็นต์ net_read_timeout เป็นค่าการหมดเวลาที่ควบคุมเมื่อจะยกเลิก เมื่อเซิร์ฟเวอร์กำลังเขียนไปยังไคลเอ็นต์ net_write_timeout เป็นค่าการหมดเวลาที่ควบคุมเมื่อจะยกเลิก ดูเพิ่มเติม slave_net_timeout
- net_write_timeout (ค่าเริ่มต้น 60): จำนวนวินาทีที่รอให้บล็อกถูกเขียนไปยังการเชื่อมต่อก่อนที่จะยกเลิกการเขียน ดูเพิ่มเติมที่ net_read_timeout
โปรดตรวจสอบให้แน่ใจว่าการหมดเวลาเหล่านี้ตั้งค่าไว้สูงพอที่จะรองรับข้อความค้นหาที่อาจทำงานเป็นเวลานานซึ่งอาจรวมถึง:
- มวล
UPDATEs
- มวล
DELETEs
ENABLE KEYS
บน MyISAM ขนาดใหญ่
ในการจัดการกับคิวรีที่ทำงานต่อไปหลังจากที่คุณไม่ได้สัมผัสคุณจะต้องรันKILLกับ ID กระบวนการของเคียวรีที่รันนาน แม้ว่าจะมีคำสั่ง KILL คุณจะต้องรอคิวรีใด ๆ ที่อยู่ในระหว่างขั้นตอนที่ใช้ดิสก์มากหรือมี mutex ภายในอยู่ระหว่างดำเนินการ