ล็อกการหมดเวลารอของการล็อคเกิน ลองรีสตาร์ทธุรกรรม


12

ฉันได้รับข้อผิดพลาดนี้ซ้ำ ๆ ทุกวัน 4 - 5 ครั้ง

SQLSTATE [HY000]: ข้อผิดพลาดทั่วไป: เกินกำหนดเวลารอการล็อค 1205; ลองรีสตาร์ทธุรกรรม

เวลานี้ฉันเริ่ม phpmyadmin ใหม่ แต่มันเกิดขึ้นซ้ำแล้วซ้ำอีก ฉันไม่สามารถชี้ปัญหานี้ได้

ฉันใช้Magento ver 1.9.0.1ในเว็บไซต์ ฉันมีผลิตภัณฑ์มากกว่า 7000 รายการ ในเซิร์ฟเวอร์ฉันมีRAM 16GB

จะแก้ไขปัญหานี้ได้อย่างไร?

คำตอบ:


8

คุณควรพิจารณาเพิ่มค่าการหมดเวลาการรอการล็อกสำหรับ InnoDB โดยการตั้งค่าinnodb_lock_wait_timeoutค่าเริ่มต้นคือ 50 วินาที

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

คุณสามารถกำหนดเป็นค่าที่สูงขึ้นได้/etc/my.cnfอย่างถาวรด้วยบรรทัดนี้

[mysqld]
innodb_lock_wait_timeout=120

และเริ่ม mysql ใหม่ หากคุณไม่สามารถเริ่ม mysql ใหม่ได้ในตอนนี้ให้รันสิ่งนี้:

SET GLOBAL innodb_lock_wait_timeout = 120; 

นอกจากนี้คุณยังสามารถตั้งค่าสำหรับช่วงเวลาของเซสชั่นของคุณ

SET innodb_lock_wait_timeout = 120; 

ตามด้วยคำค้นหาของคุณ


3
ทำไมไม่ใช่ 140 'หรือ 2000' วิธีนี้สามารถแก้ปัญหาได้จริง? ด้วยการซ่อนมัน?
Elzo Valugi

คุณมีปัญหาที่ทำให้ตารางถูกล็อคมากกว่าที่คาดไว้ หากคุณทำเช่นนี้คุณบังคับให้คุณรอ 2 นาทีทุกครั้งแทนที่จะแก้ไขปัญหาหนึ่งครั้ง และอย่างที่เอลโซพูด ... จะเกิดอะไรขึ้นเมื่อ 120 ไม่พอ
Carlos Robles

7

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


5

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

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

หากคุณสามารถเข้าสู่ MySQL จาก CLI และเรียกใช้คำสั่งต่อไปนี้

SHOW PROCESSLIST;

เมื่อคุณค้นหากระบวนการบล็อก / นอนหลับให้ค้นหาidและเรียกใช้:

KILL {id};

เรียกใช้แบบสอบถามเริ่มต้นของคุณอีกครั้ง

อาจจะเป็นลิงค์นี้จะช่วยให้คุณ: SQLSTATE [HY000]: ข้อผิดพลาดทั่วไป: 1205 เกินล็อคหมดเวลารอ; ลองเริ่มธุรกรรม Magentoใหม่


2

เพิ่มเวลาดำเนินการใน php.ini ของคุณที่เซิร์ฟเวอร์หรือขอให้ผู้ให้บริการโฮสต์

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