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
Lepaskan: 2024-12-09 13:03:10
asal
419 orang telah melayarinya

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
Salin selepas log masuk

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' )

...
Salin selepas log masuk

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
Salin selepas log masuk

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

SET innodb_lock_wait_timeout = 120;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan