Vượt quá thời gian chờ khóa; thử khởi động lại giao dịch


12

Tôi nhận được lỗi này liên tục hàng ngày 4 - 5 lần.

SQLSTATE [HY000]: Lỗi chung: 1205 Đã hết thời gian chờ khóa; thử khởi động lại giao dịch

Lần này tôi khởi động lại phpmyadmin của mình nhưng nó xảy ra lặp đi lặp lại. Tôi không thể chỉ ra vấn đề này.

Tôi đang sử dụng Magento ver. 1.9.0.1 trong trang web. Tôi có hơn 7000 sản phẩm. Trong máy chủ tôi có 16GB RAM.

Làm thế nào để giải quyết vấn đề này?

Câu trả lời:


8

Bạn nên xem xét tăng giá trị thời gian chờ khóa cho InnoDB bằng cách đặt innodb_lock_wait_timeout , mặc định là 50 giây

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

Bạn có thể đặt nó thành giá trị cao hơn /etc/my.cnfvĩnh viễn với dòng này

[mysqld]
innodb_lock_wait_timeout=120

và khởi động lại mysql. Nếu bạn không thể khởi động lại mysql tại thời điểm này, hãy chạy nó:

SET GLOBAL innodb_lock_wait_timeout = 120; 

Bạn cũng có thể chỉ đặt nó trong suốt thời gian của phiên của bạn

SET innodb_lock_wait_timeout = 120; 

theo sau là truy vấn của bạn


3
Tại sao không phải là 140 'hay 2000'? Làm thế nào điều này thực sự có thể giải quyết vấn đề? bằng cách giấu nó?
Elzo Valugi

bạn có một vấn đề khiến các bảng bị khóa nhiều hơn mong đợi. Nếu bạn làm điều này, bạn buộc bản thân phải chờ 2 phút mỗi lần thay vì khắc phục sự cố một lần. Và như Elzo nói ... điều gì xảy ra khi 120 không đủ?
Carlos Robles

7

Bạn sẽ thấy thông báo này nếu nội dung cơ sở dữ liệu bạn đang cố truy cập đã bị khóa bởi một quy trình (thường chạy dài) trước đó. MySQL sẽ đợi một khoảng thời gian nhất định để khóa được gỡ bỏ trước khi nó bỏ cuộc và ném lỗi đó. Nếu bạn có thể theo dõi khi bạn thấy các thông báo lỗi này xuống bất kỳ thời điểm nhất quán nào trong ngày, bạn nên xem những gì máy chủ đang làm vào thời điểm đó - ví dụ như một bản sao lưu cơ sở dữ liệu đang chạy. Bằng cách này, bạn sẽ có thể thu hẹp các khả năng cho các quy trình có thể tạo khóa mặc dù không phải lúc nào cũng dễ dàng thực hiện - có thể là một chút thử nghiệm và lỗi.


5

Lý do đằng sau vấn đề này là nếu bạn đang chạy nhiều tập lệnh tùy chỉnh và giết tập lệnh trước khi kết nối cơ sở dữ liệu có cơ hội đóng.

Một cái gì đó đang chặn việc thực hiện truy vấn. Rất có thể là một truy vấn khác đang cập nhật, chèn hoặc xóa từ một trong các bảng trong truy vấn của bạn. Bạn phải tìm ra đó là gì:

Nếu bạn có thể đăng nhập vào MySQL từ CLI và chạy lệnh sau

SHOW PROCESSLIST;

Khi bạn xác định vị trí quá trình chặn / ngủ, hãy tìm nó idvà chạy:

KILL {id};

Chạy lại truy vấn ban đầu của bạn.

Có thể liên kết này sẽ giúp bạn: SQLSTATE [HY000]: Lỗi chung: 1205 Đã hết thời gian chờ khóa; hãy thử khởi động lại giao dịch Magento .


2

tăng thời gian thực hiện trong php.ini của bạn tại máy chủ HOẶC yêu cầu nhà cung cấp dịch vụ lưu trữ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.