mysql Lock timeout เกินกำหนดแล้ว ลองรีสตาร์ทธุรกรรม


26

เรากำลังเรียกใช้แอปพลิเคชั่นจาวา, รันได้ทุกเพศทุกวัย, back end คือ db คือ MySQL, เพิ่งปรับปรุงเป็น mysql 5.6 ทุกอย่างทำงานได้ดีสัปดาห์ที่ผ่านมาเริ่มได้รับข้อผิดพลาดนี้เกินล็อครอหมดเวลา ลองรีสตาร์ทธุรกรรมที่ดูเหมือนไม่หยุดสิ้นสุดไม่รู้ว่าจะทำอย่างไรกับข้อผิดพลาดนี้เพื่อหยุด ทำไมมันเกิดขึ้นทั้งหมดในทันที

คำตอบ:


29

คุณสามารถตั้งค่าตัวแปร innodb_lock_wait_timeout = 100 สำหรับเวลาล็อคเป็น 100 วินาที

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

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

SHOW ENGINE INNODB STATUS\G 

คุณสามารถดูรายการตารางที่ถูกล็อคโดย -

 show open tables where in_use>0;

ตอนนี้ดูกระทู้ที่ใช้ตารางนี้

  show full processlist;

ตอนนี้คุณสามารถฆ่าเธรดนั้นหรือรอให้เสร็จสมบูรณ์


ขอให้เรายังคงอภิปรายนี้ในการแชท
JAVAC

ขอบคุณสำหรับข้อมูลนี้ แต่เราจะไปที่รูทของปัญหาได้อย่างไรเมื่อล็อกยังคงเกิดขึ้นแม้ในตารางที่ง่ายมากที่มีการอัปเดตเล็ก ๆ (เช่นการเพิ่มหรือการอัปเดตฟิลด์เดียว)
Wouter

-1

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


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