web-dev-qa-db-ja.com

MySQL:非常にアクティブなテーブルでのテーブルの変更により、「テーブルメタデータロックの待機」が発生する

私の仕事では、MySQL 5.5に最近アップグレードし、それ以来、メタデータロックの新しい(および意図した)動作に数回噛まれました。基本的に、かなりアクティブなテーブルでALTER TABLEステートメントを実行すると、テーブルは読み取りと書き込みの両方にアクセスできなくなり、スレッドは「テーブルメタデータロックを待機しています」というメッセージが表示され、基本的には永久にハングします。

私は少し調査しましたが、これについての適切な説明を見つけました MySQLのマニュアルで および ここ これは予期された実際の動作であることを確認します。オンラインで見つけられなかったのは、これが本番環境で発生する明らかな問題を軽減するための優雅な方法です。アップグレード以来、よりアクティブなテーブルでalter tableステートメントを実行できる唯一の方法は、アプリケーションを実行するユーザー名の読み取りおよび書き込み権限を無効にし、実行中のすべてのプロセスを強制終了して、ALTER TABLEステートメントを実行することです。これは機能しますが、バックグラウンドプロセスとWebサイトの両方から、アプリから多くのエラーが発生します。

以前(つまり5.5より前)、スキーマの変更は問題になりませんでした。新しい振る舞いの理由は理解していますが、それは制作において明らかな問題を引き起こし、コミュニティの人々は回避策を講じる必要があると考えています。

任意のアイデアをいただければ幸いです。ありがとう!

4
stymo

http://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.htmlhttp: //openarkkit.googlecode.com/svn/trunk/openarkkit/doc/html/Oak-online-alter-table.html

どちらも本番環境でテストされ、信頼性があります。 Perconaのツールは、スレーブラグのチェックについて非常に優れています。他のperconaツールもチェックアウトしてください。非常に便利です。

2
netneladno