Saya memiliki server web dengan database MySQL. Itu memegang beberapa database yang melayani berbagai proyek saya. Sejak Memutakhirkan Ubuntu ke 16,04, ini memberi saya banyak masalah secara umum. Pertanyaan ini secara khusus adalah tentang situasi di mana tabel dikunci dengan kunci level meja tanpa alasan yang jelas mengapa kunci tersebut tidak dihapus dengan cepat.
Saya memiliki banyak kueri macet seperti:
581723 algebrainc_ro localhost algebrainc Query 10309 Waiting for table level lock SELECT\n *\nFROM inventory\nWHERE inventory_id = '21601'
581724 algebrainc_ro localhost algebrainc Query 10309 Waiting for table level lock SELECT\n *\nFROM inventory\nWHERE inventory_id = '21592'
581725 algebrainc_ro localhost algebrainc Query 10309 Waiting for table level lock SELECT\n *\nFROM inventory\nWHERE inventory_id = '21602'
581726 algebrainc_ro localhost algebrainc Query 10309 Waiting for table level lock SELECT\n *\nFROM inventory\nWHERE inventory_id = '21596'
581729 algebrainc_ro localhost algebrainc Query 10306 Waiting for table level lock SELECT inventory_id, ebay_title FROM inventory WHERE ebay_id = '32999992936'
581730 algebrainc localhost algebrainc Query 10282 Waiting for table level lock SELECT \n complete_status status,\n ebay_transactions.inventory_id,\n ebay_transactions.ebay_id, \n quantity, purchase_price, \n ebay_title \nFROM ebay_transactions, inventory \nWHERE \n ebay_transactions.inventory_id = inventory.inventory_id \n AND created_date > date_add( now(), interval -7 day )\nORDER BY \n created_date
Setelah beberapa saat mencari-cari dan tidak menemukan apa-apa di performance_schema
seperti table_handles
dan metadata_locks
, saya tidak menemukan banyak.
Setelah beberapa saat saya menyadari bahwa itu terjadi karena mysqldump
proses yang saya lakukan secara berkala untuk membuang satu tabel tertentu. Saya memiliki selusin mysqldump
proses macet (dipanggil oleh cron) seperti ini:
ichudov 1178 0.0 0.0 29004 3248 pts/46 Ss+ 20:24 0:00 mysqldump -ualgebrainc -px xxxxxxxx algebrainc XXXXXXXX_posts
ichudov 1394 0.0 0.0 29004 900 pts/26 Ss+ Jun23 0:00 mysqldump -ualgebrainc -px xxxxxxxx algebrainc XXXXXXXX_posts
ichudov 2537 0.0 0.0 29004 920 pts/22 Ss+ Jun24 0:00 mysqldump -ualgebrainc -px xxxxxxxx algebrainc XXXXXXXX_posts
(nama tabel tertutup untuk privasi)
Setelah membunuh mysqldump
proses, kunci meja dihapus dan semuanya kembali normal.
Tetapi mengapa mysqldump
proses mengunci sesuatu dan tidak bekerja?
Jawaban:
Penyebab: kunci level tabel selama mysqldump yang menjadi alasan kelambatan karena tabel menggunakan mesin MyISAM
Resolusi: Konversi MyISAM ke Innodb, untuk penguncian level baris,
Lihat: kunci myisam selama mysqldump
sumber