タマゴヘビ、アベニーパファー、MR2、色々雑多に書きます
怪しい物を開発するブログ

waiting for table metadata lock でDBが死んだ

mysql
2018.10.272017.07.02

CopyContentDetectorで障害を起こしてしまったので、メモです。

 

  1. ■DBにアクセスできない
  2. ■今までは何で大丈夫だった?
  3. ■対応方法

■DBにアクセスできない

半年に一回、各テーブルのフラグメントを解消する目的で以下のSQLを実行しています。

ALTER TABLE 【テーブル名】 ENGINE INNODB;  

 

フラグメントを解消することで、ディスクの圧縮や速度低下の防止をすることが出来ます。今回はこのALTER TABLEをしているときにwaiting for table metadata lockが発生してDBが死にました。

mysql5.6では、上記ALTER TABLEはオンラインDDLなので、変更中もデータの取得・更新が出来るようになっています。しかし、何かが原因でトランザクションが長引いたり、トランザクション放ったらかしにすると、waiting for table metadata lockが発生してしまうみたいです。

https://dev.mysql.com/doc/refman/5.6/ja/metadata-locking.html
dev.mysql.com

トランザクション実行中がある→その間に別にalter tableで構造変更→他でトランザクション実行中だから待て。ロック発生→詰まって死ぬ

という感じでしょうか。どうも、alter tableの結果がcommitされる瞬間に発生する感じでした。

 

■今までは何で大丈夫だった?

単純にデータ量が少なかったためです。今までうまく行っていましたが、ずっとwaiting for table metadata lockが発生する危険を含んでいたのだと思います。それが、サーバの台数もかなり増えて同時接続・同時実行数がかなり多くなった、かつ処理するデータ量が多くなって発生する率上がって今回起こった。という感じだと思います。

 

このあたりを見ると、データ量少ないテーブルでも発生するときは発生するみたいですね。

サービス稼働中にMySQLでALTER TABLEしたら Waiting for table metadata lock が溢れて死んだ - Qiita
ALTER TABLE実行する時は注意しましょう、、という事で。 ALTER TABLE ALTER TABLEすると以下のような挙動でカラム変更されるようです 他のセッションからのREADを許可し、WRITEをブロック 新...
qiita.com

 

■対応方法

いろいろあるようですが、waiting for table metadata lockが発生してしまうと、「サーバの再起動」か「止めているクエリをkillでやっつける」の二種類みたいですね。うーん。。。これ、今度からALTER TABLEの必要があるときは、結局メンテナンスモードにしないとだめですね。。

mysql
waiting for table metadata lock
シェアする
Twitter Facebook はてブ
meganeをフォローする
megane
怪しい物を開発するブログ

関連記事

mysql

Mysqlでインデックスを使っていないクエリをログに残す方法

mysql

InnoDBのテーブルが突然壊れて起動しなくなったので対応

mysql

mysqldumpでテーブルロックを発生させない方法

mysql

mysqldumpを使って圧縮しておいたダンプファイルから一部のデータベースのみを抜きだす

mysql

SELECT FOR UPDATEを利用するときに必ず確認すること

mysql

AmazonLinux2にMariaDB10.2を入れたら【#mysql50#.rocksdb】

スポンサーリンク
CakePHP + AjaxでのPOSTで受け取った情報が空になる原因
Raspberry Pi3に1.6インチ小型液晶を付けてIPアドレスが確認できるようにしてみる
ホーム
mysql
スポンサーリンク
megane
megane

最近、個人事業主から法人へと進化しました。

エンジニア歴17年位です。PHPとかMysqlを使ってWebシステムを構築します。 Javaも書きます。 CakePHPも使います。 サーバのチューニングもごりごりやります。

あと、お肉と自動車が好きです。Twitterとか申請どうぞ。

meganeをフォローする

新着記事

タマゴヘビの舌はとても長くて、黒い
2023.03.05
Ubuntu20.04でcronのログを/var/log/syslog以外に出力する
2022.10.28
DockerDeskctopで「Cannot remove Docker Compose application…….」とか出る
2022.02.20
RankHistoryに新機能 対象サイトの順位を絞り込んで表示をリリース
2021.09.05
2021年 おためしナガノに参加しました
2021.08.29

カテゴリー

人気記事

タマゴヘビを飼育し始めました 1031 views
2018.11.042023.03.05
【アクアリウム初心者向け】20cmキューブ水槽にちょうどよいおすすめ機材一式 725 views
2018.10.272021.07.13
JQueryでclassを追加・変更する方法 262 views
2016.06.012021.06.30
ニキシー管の置き時計キットを海外から購入して格安で組み立てました。 241 views
2020.08.302020.09.09
SELECT FOR UPDATEを利用するときに必ず確認すること 221 views
2016.03.182018.10.27
怪しい物を開発するブログ
© 2013-2023 株式会社ニューシステムクリエイト.
  • ホーム
  • トップ