Bagaimana cara menafsirkan "waktu kunci" dalam log kueri lambat mysql?

12

Saya mencoba memahami cara terbaik menafsirkan waktu kunci untuk kueri yang muncul di log kueri lambat MySQL kami.

Misalnya jika kueri UPDATE memiliki waktu kunci 10 detik. Saya kira itu adalah total waktu setelah permintaan pembaruan mendapatkan kunci. Bahkan jika menunggu kueri pemilihan sebelumnya untuk menyelesaikan tetapi tidak menjalankan tindakan UPDATE itu sendiri, jam harus berdetak karena mengunci semua kueri SELECT yang telah berbaris setelah kueri UPDATE.

Dan bagaimana dengan kueri kunci SELECT. Mengapa beberapa kueri pemilihan memiliki waktu kunci? Apakah karena ada permintaan UPDATE yang menindaklanjuti maka mereka mengunci tabel bersama.

Haluk
sumber

Jawaban:

19

Dalam lock_timelog kueri lambat sebenarnya adalah jumlah waktu kueri yang dihabiskan menunggu untuk mendapatkan kunci yang perlu dijalankan. Misalnya, UPDATESkueri memerlukan kunci tulis.

Penguncian juga tergantung pada mesin penyimpanan yang Anda gunakan dalam tabel. Saat menulis, InnoDB akan menggunakan penguncian level-baris dan hanya mengunci baris yang sedang diubah. MyISAM akan mengunci seluruh tabel sampai pembaruan / masukkan / hapus selesai.

Mengunci seluruh tabel untuk MyISAM adalah alasan besar mengapa SELECTkueri akan memiliki lock_time di log kueri lambat Anda.

Derek Downey
sumber