DEVLAß
developers'
laboratory
  • HOME
  • DEVLOG
  • OPSLOG
  • SHOWCASE

innodb_stats_on_metadata=1でディスク容量激増とCPU負荷が発生

  • ALTER_TABLE
  • ANALIZE_TABLE
  • diskfull
  • information_schema
  • innodb_stats_on_metadata
  • MySQL
  • OPTIMEZE_TABLE
  • phpmyadmin

2015年2月20日 投稿者: komiyay

こんにちは。小宮です。
ある日chefのレシピをなおしていると、同僚がこんなことをいってきました。

1
2
3
4
「おきゃくさまがphpmyadminのinformation_schemaのリンクをクリックしたとたんに
 サイトが重くなってディスク容量が数十GBも増えて今下がって落ち着いたって言ってます。
 なにか原因わかりますか?」
 

phpmyadminでinformation_schemaをクリックするのが危険過ぎる – K52.NIKKI ver3.0というのが添えられていました。

よくわからなかったので現象を呟いたところ、親切なMySQLのACE(えーす)のyoku0825さんがinnodb_stats_on_metadata=1があやしいんじゃないかと教えてくれました。
ググってみたところ、innodb_stats_on_metadata に要注意 – TAKUMI SAKAMOTO’S BLOGというページを見かけて何が起きたかわかった気になったのでした。

起きたことの予測:
 ・テーブルの更新状況が統計情報更新の発生条件に達している状態だった
 ・information_schemaのリンクをクリックすることでshow table status相当の統計情報更新のきっかけになるクエリが走った
 ・統計情報更新のためにANALYZE_TABLE相当の処理が走った
 ・ディスクがあふれたのはテーブルのコピーがtmpdirに作られたためで挿げ替えられて処理が完了したために使用率が下がった
 ・cpu負荷はALTER相当のTABLEメンテナンス処理とそれに伴うディスクI/Oによるものと考えられる

innodbの統計情報更新の発生条件については、漢のブログに書いてあるのをみつけました。いつもありがとうございます。
めでたしめでたし。とこれだけだと物足りないのでちょっと足します。

どのバージョンでONかOFFかについて、公式のマニュアルをみると5.6.6からOFFでそれ以前はONのようです。

つぎに仮にinnodb-stats-on-metadataを0にしたばあいメンテナンスを自分で行う必要が生じるけどどうしたらええんやという話について。

基本メンテ入れて統計情報更新するだけならANALYZE TABLEするかデフラグもしたいならALTER TABLEしたほうがいいです。
InnoDBのOPTIMIZEは内部的にALTERが実行されるだけなのでREADのロックがかかるのが嫌ならALTER TABLE使うといいです。
データ(とスペック)を極力本番同様にした試験環境でかかる時間を見積もるのがオススメです。
表にマニュアルのリンクを貼っておきました。左は5.1日本語で右は5.6英語のリンクです。

構文 説明
ANALYZE TABLE インデックス統計情報の更新に使います
CHECK TABLE 破損の可能性があるテーブルをチェックする際に使います
REPAIR TABLE 破損が確認できた場合に、復旧を試みます
ALTER TABLE テーブルが再作成されることによりインデックス情報もデータも再作成され、デフラグメントが解消されます
OPTIMYZE TABLE MyISAMの可変長フォーマット(テーブル定義に可変長のカラムを持つ)と、InnoDBのデータ部分にフラグメンテーションが起こったのを解消するために実行します。MyISAMの場合は、インデックス統計情報の更新、デフラグの解消、インデックスページの並べ替えが行われます。InnoDBの場合は、内部的にALTER TABLEが行われてテーブルが再作成されることにより、インデックス情報もデータも再作成され、デフラグメントが解消されます。

・参考サイト
innodb_stats_on_metadata に要注意 – TAKUMI SAKAMOTO’S BLOG
漢(オトコ)のコンピュータ道: 大人のためのInnoDBテーブルとの正しい付き合い方。
漢(オトコ)のコンピュータ道: ALTER TABLEを上手に使いこなそう。
MySQLトラブル解析入門
テーブル メンテナンス ステートメント
MySQL :: MySQL 5.5 Reference Manual :: 13.7.2 Table Maintenance Statements
Percona Toolkit pt-online-schema-change でサービス無停止スキーマ変更 | 外道父の匠
pt-online-schema-changeを安全につかう – Around the World

5.6からONLINEで一部のALTER TABLEができるようになってますが以下みといたほうがよさそうです。
日々の覚書: MySQL 5.6のオンラインALTER TABLEを試してたらinnodb_online_alter_log_max_sizeに遭遇した
MySQLがオンラインALTER TABLEでOOM Killerに殺されたはなし | GMOメディア エンジニアブログ

MySQLは使ってる人も詳しい人もいっぱいいるので何かあっても情報が多くていいなあと思います。
では読んでいただいてありがとうございました。

  • ツイート
  • このエントリーをはてなブックマークに追加
くらまね. - クラウドサーバーの構築/運用・監視ならISAOのMSPサービス

関連記事

  • 素のRubyでMySQLクエリの結果を取得する
  • Chefで既存手順のレシピを書く4(DBサーバ)
  • mysqlパフォーマンス改善への道(その1、現状の確認)
  • MHAの動作確認と切替検証
  • MHA(MasterHighAvailabilityManager)の導入設定

タグ

attribute AWS backup Capistrano CentOS chef Chef-Solo Cloud cloudwatch CSS DataBase data_bags Deploy failover git GitHub Google Glass HA HTML HTML5 IP JavaScript jQuery log mail MHA mondo munin MySQL NAT nginx ntp OpsWorks PHP Plugin recipe role Ruby script Vagrant VPC WordPress zabbix 監視 障害対応

最近の投稿

  • innodb_stats_on_metadata=1でディスク容量激増とCPU負荷が発生 2015年2月20日
  • VirtualBoxでCSSが更新されない時の対処法 2015年2月18日
  • FuelPHP + Ansible で超ラクラク開発/運用 – FuelPHPのインストール編 2015年2月18日
  • Amazon RDS for Auroraプレビュー利用開始! 2015年2月17日
  • ELBでssl転送してnginxでクライアント認証とssl終端してProxyProtocolで送信元IPを取得する 2015年2月16日

コメントを残す

返信をキャンセルする。

  • お問い合わせ
  • ようこそDEVLAßへ!
  • 株式会社ISAO
  • クラウドサーバーの構築・運用・監視に関するご相談はコチラ

Copyright © 2015 DEVLAB.
All Rights Reserved. Powered by WordPress.