MySQLデータベースを備えたWebサーバーがあります。私のさまざまなプロジェクトに役立ついくつかのデータベースを保持しています。Ubuntuを16.04にアップグレードしてから、一般的に多くのトラブルが発生しました。この質問は、特に、ロックがすぐに削除されない明白な理由なしに、テーブルがテーブルレベルロックでロックされている状況に関するものです。
私は次のような行き詰まったクエリをたくさん持っています:
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
チャンスをうかがっとで何を探しているのしばらく後performance_schema
などtable_handles
とmetadata_locks
、私は多くを見つけることができませんでした。
しばらくして、mysqldump
特定のテーブルをダンプするために定期的に行うプロセスが原因であることに気付きました。私はmysqldump
これらのようなスタックしたプロセス(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
(プライバシーのためにマスクされたテーブル名)
mysqldump
プロセスを強制終了した後、テーブルロックが削除され、すべてが正常に戻りました。
しかし、なぜmysqldump
プロセスは物事をロックして動作しないのですか?
これらのデータベースとテーブルのサイズはどのくらいですか?すべてのデータベースのMySQLダンプを実行し、MySQLサーバーからそれらを削除し、それらを再度インポートして、それを確認するのと同じくらい簡単なことをしましたか?
—
JakeGould
インベントリテーブルはInnoDBまたはMyISAMですか?
—
マイケル-sqlbot
イゴール-どうやってこれを解決したのですか?
—
OhadR