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


26

chúng tôi đang chạy ứng dụng java, chạy từ lâu, back end là db là MySQL, gần đây được cập nhật lên mysql 5.6. Mọi thứ đều chạy tốt, tuần trước bắt đầu nhận được lỗi này Khóa thời gian chờ đã vượt quá; hãy thử khởi động lại giao dịch có vẻ như không bao giờ kết thúc không biết phải làm gì với lỗi này để dừng lại. tại sao nó xảy ra đột ngột

Câu trả lời:


29

Bạn có thể đặt biến innodb_lock_wait_timeout = 100 cho thời gian khóa thành 100 giây.

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   |
+--------------------------+-------+

Giao dịch đã hết thời gian, hãy thử khóa bảng được giữ bởi một quy trình khác. và biến thời gian chờ của bạn được đặt với số lượng nhỏ thứ hai. vì vậy nó hiển thị lỗi. Bạn có thể thấy nhiều trạng thái hơn bằng lệnh.

SHOW ENGINE INNODB STATUS\G 

Bạn có thể xem danh sách các bảng bị khóa bởi-

 show open tables where in_use>0;

Bây giờ hãy xem chủ đề đang sử dụng bảng này

  show full processlist;

bây giờ bạn có thể giết chủ đề đó hoặc chờ đợi để hoàn thành nó.



Cảm ơn thông tin này, nhưng làm thế nào người ta có thể đi đến gốc rễ của vấn đề khi các khóa vẫn tiếp tục xảy ra, ngay cả trên các bảng rất đơn giản với các cập nhật nhỏ (như tăng hoặc cập nhật một trường).
Wouter

-1

Nếu sử dụng phiên bản MySQL nhỏ hơn 5.0, bạn không thể thay đổi biến ngay cả đối với phiên hoặc phạm vi toàn cầu. Giải pháp tốt nhất là nắm bắt truy vấn và thực hiện nó sau khi lưu lượng truy cập chậm.


2
OP cho biết họ đang sử dụng 5.6, trong đó (tôi giả sử) là 5.0 hoặc cao hơn.
RDFozz
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.