Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengenalpasti Pertanyaan Khusus Menyebabkan Ralat 'Tamat masa menunggu kunci melebihi' dalam MySQL?

Bagaimana untuk Mengenalpasti Pertanyaan Khusus Menyebabkan Ralat 'Tamat masa menunggu kunci melebihi' dalam MySQL?

Susan Sarandon
Lepaskan: 2024-12-31 06:10:09
asal
686 orang telah melayarinya

How to Identify the Specific Query Causing a

Cara mengenal pasti pertanyaan khusus yang memegang kunci apabila ralat melebihi masa menunggu Kunci melebihi berlaku dalam MySQL

Pengenalan:

Tamat masa menunggu kunci melebihi ralat dalam MySQL menunjukkan bahawa pertanyaan menemui tamat masa menunggu kunci semasa cuba mengakses sumber terkunci. Ini boleh berlaku dalam senario di mana berbilang pertanyaan mengakses data yang sama dan satu pertanyaan menyekat pelaksanaan yang lain disebabkan oleh kunci yang bercanggah. Menentukan pertanyaan khusus yang menyebabkan menunggu kunci boleh membantu dalam menyelesaikan isu dan mencegah kejadian pada masa hadapan.

Mengenal pasti Pertanyaan Penyebab:

Dalam log ralat, perkataan " transaksi" ialah penunjuk utama bahawa pertanyaan yang cuba mengakses pangkalan data sedang mengubah suai satu atau lebih InnoDB meja. Mengetahui pertanyaan yang mencetuskan ralat, adalah mungkin untuk mengenal pasti jadual yang terlibat.

Menggunakan arahan SHOW ENGINE INNODB STATUSG, anda boleh mendapatkan maklumat tentang jadual yang terjejas dan status penguncian. Perintah ini memaparkan maklumat terperinci, termasuk:

  • Putaran kongsi RW: Menentukan bilangan putaran menunggu kunci baca dikongsi.
  • RW -excl spins: Menunjukkan bilangan putaran menunggu untuk eksklusif kunci.
  • Mutex spin menunggu: Bilangan putaran menunggu pada mutex.

Contoh Output:

The berikutan output daripada SHOW ENGINE INNODB STATUSG menunjukkan bahawa pertanyaan khusus sedang menunggu kunci eksklusif pada lampiran jadual:

RW-excl spins: 787046, OS waits: 39353
...
Latest foreign key error (a full list is printed in the InnoDB error log when a foreign key error occurs):
...
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
...
Foreign key constraint fails for table `backoffice`.`attachment`:

,
  CONSTRAINT `attachment_ibfk_2` FOREIGN KEY (`file_id`) REFERENCES `file` (`file_id`)
Trying to delete or update in parent table, in index `PRIMARY` tuple:
...
But in child table `backoffice`.`attachment`, in index `PRIMARY`, there is a record:
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan isu, anda boleh meningkatkan nilai parameter innodb_lock_wait_timeout, yang menentukan masa maksimum transaksi akan menunggu kunci sebelum melaporkan ralat. Dengan meningkatkan tamat masa ini, anda boleh menyediakan lebih banyak masa penimbal untuk transaksi selesai dan mengurangkan kemungkinan ralat tamat masa kunci.

Menetapkan innodb_lock_wait_timeout:

  • Untuk menetapkan tamat masa secara kekal, tambahkan baris berikut pada /etc/my.cnf dan mulakan semula MySQL:

    [mysqld]
    innodb_lock_wait_timeout=120
    Salin selepas log masuk
  • Untuk menetapkan tamat masa bagi sesi semasa, laksanakan pertanyaan berikut:

    SET GLOBAL innodb_lock_wait_timeout = 120;
    Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengenalpasti Pertanyaan Khusus Menyebabkan Ralat 'Tamat masa menunggu kunci melebihi' dalam 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