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

waiting for table metadata lock でDBが死んだ

mysql
2018.10.27

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が発生してしまうみたいです。

fw_error_www
fw_error_www
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をブロック 新しいtable定...
qiita.com

 

■対応方法

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

mysql
waiting for table metadata lock
シェアする
X Facebook はてブ
meganeをフォローする
megane

関連記事

mysql

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

mysql

mysqlのログファイルを削除したときの手順

mysql

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

mysql

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

CentOS7

CentOS7.5にyumでmysql5.7をインストールする

mysql

圧縮しながらmysqldump&圧縮したファイルをmysqlに戻す

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

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

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

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

meganeをフォローする
タマゴヘビの舌はとても長くて、黒い
2023.03.052025.04.28
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

カテゴリー

AWS EC2が勝手に再起動するので対応した
129 views
2021.05.182021.05.27
crontab で10分毎にコマンドを実行する
91 views
2015.06.072016.03.04
ミニ四駆初心者が一番初めに買うと良いパーツ 7点
83 views
2020.03.042020.05.11
リバースプロキシを利用していると、ごく稀に502が戻ってくる問題
56 views
2016.04.262018.10.27
nginxで高負荷時に「upstream timed out (110: Connection timed out) 」とかエラーがでる
56 views
2018.03.272018.10.27
怪しい物を開発するブログ
© 2013-2025 株式会社ニューシステムクリエイト.
  • ホーム
  • トップ