MySQL 5.7は「テーブルレベルのロックを待機しています」と永久に止まりました


1

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_handlesmetadata_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

回答:


3

原因: テーブルがMyISAMエンジンを使用しているため、mysqldumpの実行中にテーブルレベルのロックが遅くなります。

解決策:行レベルのロックのために、MyISAMをInnodbに変換します。

ALTER TABLE 'table_name' ENGINE=INNODB;

参照:mysqldump中のmyisamロック

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.