Eu tenho um servidor web com um banco de dados MySQL. Ele contém vários bancos de dados que atendem meus vários projetos. Desde o upgrade do Ubuntu para 16.04, isso me causou muitos problemas em geral. Esta questão é especificamente sobre uma situação em que uma tabela é bloqueada com um bloqueio no nível da tabela sem nenhum motivo óbvio pelo qual o bloqueio não seja removido rapidamente.
Eu tenho muitas dúvidas assim:
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
Depois de um tempo pesquisando e procurando por nada em performance_schema
, como table_handles
e metadata_locks
, não encontrei muita coisa.
Depois de um tempo, percebi que isso acontece devido a mysqldump
dos processos que faço periodicamente para despejar uma tabela específica. Eu tive uma dúzia de mysqldump
processos presos (chamados pelo cron) como estes:
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
(nome da tabela mascarado para privacidade)
Depois de matar mysqldump
processos, os bloqueios de tabela foram removidos e tudo voltou ao normal.
Mas por que mysqldump
processa o bloqueio e não funciona?