Mam serwer WWW z bazą danych MySQL. Posiada kilka baz danych obsługujących moje różne projekty. Od momentu uaktualnienia Ubuntu do 16.04 dało mi to wiele problemów. To pytanie dotyczy konkretnie sytuacji, w której stół jest zablokowany blokadą poziomu stołu bez wyraźnego powodu, dla którego zamek nie został szybko usunięty.
Mam wiele zablokowanych zapytań, takich jak:
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
Po chwili szukania i szukania niczego performance_schema
Jak na przykład table_handles
i metadata_locks
, Nie znalazłem wiele.
Po chwili zdałem sobie sprawę, że tak się dzieje mysqldump
procesy, które robię okresowo, aby zrzucić jedną konkretną tabelę. Utknąłem tuzin mysqldump
procesy (zwane cron), takie jak te:
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
(nazwa tabeli zamaskowana dla prywatności)
Po zabiciu mysqldump
procesy, blokady stołu zostały usunięte i wszystko wróciło do normy.
Ale dlaczego mysqldump
procesy blokują i nie działają?
Odpowiedzi:
Przyczyna: blokada poziomu tabeli podczas mysqldump, co jest powodem powolności, ponieważ tabela używa silnika MyISAM
Rozkład: Konwertuj MyISAM do Innodb, aby zablokować poziom wierszy,
Odnosić się: blokada myisam podczas mysqldump
źródło