MySQL 5.7 sonsuza dek sıkışmış “masa seviyesinde kilit bekliyor”


1

MySQL veritabanına sahip bir web sunucum var. Çeşitli projelerime hizmet eden birkaç veritabanı var. Ubuntu’yu 16.04’e yükselttiğimden beri, genel olarak beni çok sıkıntıya soktu. Bu soru özellikle, bir tablonun, masa kilidinin kilitlenmesinin neden hızlı bir şekilde alınmamasının açık bir nedeni olmadan kilitlendiği bir durumla ilgilidir.

Bunun gibi bir sürü sıkışmış sorgum var:

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

Kurcalama ve hiçbir şey arayan bir süre sonra performance_schemagibi table_handlesve metadata_locksben çok bulamadık.

Bir süre sonra bunun mysqldumpbelirli bir masayı boşaltmak için periyodik olarak yaptığım süreçlerden kaynaklandığını anladım. mysqldumpŞunun gibi bir düzine takılmış işlem (cron):

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

(gizlilik için maskeli tablo adı)

Öldürme mysqldumpişlemlerinden sonra masa kilitleri çıkarıldı ve her şey normale döndü.

Peki neden mysqldumpsüreçler işleri kilitliyor ve çalışmıyor?


Bu veritabanlarının ve tabloların boyutları nelerdir? Tüm veritabanlarının bir MySQL dökümünü çalıştırmak, MySQL sunucunuzdan silmek ve daha sonra bunları temizlemek için tekrar içe aktarmak kadar basit bir şey mi yaptınız?
JakeGould

Envanter tablosu InnoDB veya MyISAM mı?
Michael - sqlbot

Igor - Bunu nasıl yaptın?
OhadR

Yanıtlar:


3

Neden: mysqldump sırasında tablo düzeyinde kilitlenme, bu durum tablo MyISAM motorunu kullandığından dolayı yavaşlamanın nedenidir

Çözünürlük: Satır düzeyinde kilitleme için MyISAM'i Innodb'ye dönüştürün,

ALTER TABLE 'table_name' ENGINE=INNODB;

Bakınız: mysqldump sırasında myisam kilidi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.