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

waiting for table metadata lock でDBが死んだ

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

MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.10.4 メタデータのロック
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

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

mysql

【CopyContentDetector】mysqlで処理が多くなりすぎて性能不足で遅くなった

mysql

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

mysql

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

mysql

mysqlのinnodb_log_file_sizeの設定を変更した時の対応

mysql

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

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

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

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

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

meganeをフォローする

新着記事

DockerDeskctopで「Cannot remove Docker Compose application…….」とか出る
2022.02.20
RankHistoryに新機能 対象サイトの順位を絞り込んで表示をリリース
2021.09.05
2021年 おためしナガノに参加しました
2021.08.29
ゼンスイ TEGARU2が故障してしまった。症状はしっかり伝えましょう
2021.08.28
無料の順位チェックツール RankHistoryを公開
2021.08.24

カテゴリー

人気記事

タマゴヘビを飼育し始めました 1259 views
2018.11.042021.08.06
【アクアリウム初心者向け】20cmキューブ水槽にちょうどよいおすすめ機材一式 840 views
2018.10.272021.07.13
ニキシー管の置き時計キットを海外から購入して格安で組み立てました。 245 views
2020.08.302020.09.09
ゼンスイ TEGARU2に買い替えました。TEGARUとの違いは? 231 views
2021.01.15
【初心者向け】アベニーパファーの飼育方法まとめてみました 227 views
2018.03.212021.07.13
怪しい物を開発するブログ
© 2013-2022 株式会社ニューシステムクリエイト.
  • ホーム
  • トップ
  • スポンサーリンク
    megane
    megane

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

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

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

    meganeをフォローする

    新着記事

    DockerDeskctopで「Cannot remove Docker Compose application…….」とか出る
    2022.02.20
    RankHistoryに新機能 対象サイトの順位を絞り込んで表示をリリース
    2021.09.05
    2021年 おためしナガノに参加しました
    2021.08.29
    ゼンスイ TEGARU2が故障してしまった。症状はしっかり伝えましょう
    2021.08.28
    無料の順位チェックツール RankHistoryを公開
    2021.08.24

    カテゴリー

    人気記事

    タマゴヘビを飼育し始めました 1259 views
    2018.11.042021.08.06
    【アクアリウム初心者向け】20cmキューブ水槽にちょうどよいおすすめ機材一式 840 views
    2018.10.272021.07.13
    ニキシー管の置き時計キットを海外から購入して格安で組み立てました。 245 views
    2020.08.302020.09.09
    ゼンスイ TEGARU2に買い替えました。TEGARUとの違いは? 231 views
    2021.01.15
    【初心者向け】アベニーパファーの飼育方法まとめてみました 227 views
    2018.03.212021.07.13