Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat 'Tamat masa menunggu kunci melebihi' MySQL?

Bagaimana untuk Menyelesaikan Ralat 'Tamat masa menunggu kunci melebihi' MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-12-09 13:03:10530semak imbas

How to Resolve MySQL's

Bagaimanakah untuk Menyahpepijat "Kunci tamat masa menunggu melebihi" Ralat dalam MySQL?

Apabila menghadapi ralat "Kunci tamat masa menunggu melebihi" dalam log MySQL, ini menunjukkan transaksi menunggu untuk kunci pada item pangkalan data. Walaupun anda mungkin mengetahui pertanyaan mana yang cuba mengakses pangkalan data, menentukan pertanyaan yang memegang kunci pada saat yang tepat itu boleh menjadi mencabar.

Mengenalpasti Penyebab

Kehadiran perkataan "transaksi" dalam mesej ralat menunjukkan bahawa pertanyaan bermasalah melibatkan pengubahsuaian sekurang-kurangnya satu baris dalam satu atau lebih jadual InnoDB. Memandangkan anda mempunyai akses kepada pertanyaan yang menyebabkan ralat, anda boleh menentukan jadual yang sedang diakses, kerana ia berpotensi menjadi punca.

Menggunakan SHOW ENGINE INNODB STATUSG

Untuk menyiasat lebih lanjut, jalankan perkara berikut arahan:

SHOW ENGINE INNODB STATUS\G

Ini akan memberikan maklumat tentang kunci dan mutex, termasuk:

  • Jadual yang terjejas
  • Putaran kunci kongsi RW
  • Putaran kunci eksklusif RW
  • Putaran mutex menanti
  • Maklumat kunci baris
  • Buat asal log entri

Contoh Output

Sebagai contoh, output berikut daripada klien menggambarkan isu tersebut.

Type: InnoDB
Name:
Status:

=====================================
110514 19:44:14 INNODB MONITOR OUTPUT
=====================================

Per second averages calculated from the last 4 seconds
----------
SEMAPHORES
----------

Mutex spin waits 0, rounds 11487096053, OS waits 7756855

RW-shared spins 722142, OS waits 211221; RW-excl spins 787046, OS waits 39353

------------------------
LATEST FOREIGN KEY ERROR
------------------------

110507 21:41:35 Transaction:
TRANSACTION 0 606162814, ACTIVE 0 sec, process no 29956, OS thread id 1223895360 updating or deleting, thread declared inside InnoDB 499
mysql tables in use 1, locked 1

14 lock struct(s), heap size 3024, 8 row lock(s), undo log entries 1

MySQL thread id 3686635, query id 124164167 10.64.89.145 viget updating
DELETE FROM file WHERE file_id in ('6dbafa39-7f00-0001-51f2-412a450be5cc' )

...

Dalam output ini, jadual "fail" muncul menjadi jadual yang terjejas, kerana pertanyaan DELETE cuba mengubah suai baris dalam jadual itu. Dengan menganalisis output, anda boleh menentukan jadual tertentu yang menyebabkan perbalahan kunci.

Meningkatkan Tamat Masa Tunggu Kunci

Untuk mengelak daripada menghadapi ralat ini pada masa hadapan, pertimbangkan untuk meningkatkan tamat masa menunggu kunci nilai untuk InnoDB dengan menetapkan parameter innodb_lock_wait_timeout. Nilai lalai ialah 50 saat.

Untuk meningkatkan tamat masa secara kekal, tambah baris berikut pada fail /etc/my.cnf anda:

[mysqld]
innodb_lock_wait_timeout=120

Sebagai alternatif, anda boleh melaraskan tamat masa buat sementara waktu dalam sesi semasa:

SET innodb_lock_wait_timeout = 120;

Meningkatkan tamat masa akan memberikan transaksi menunggu lebih banyak masa untuk memperoleh kunci, mengurangkan kemungkinan ralat tamat masa.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Tamat masa menunggu kunci melebihi' MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn