mysql:15029
From: 玉越大輝 <玉越大輝 <hiroki.tamakoshi@xxxxxxxxxx>>
Date: Tue, 22 Sep 2009 11:13:25 +0900
Subject: [mysql 15029] ALTER TABLEが終わってもディスクに書き込みが続く理由は何でしょうか?
玉越です。 運用中のデータベースにて、理由が分からない挙動が起き、不安になっています。 理由や対処法などをご存知の方がいらっしゃればご教示いただけますと幸いです。 ■操作したこと あるテーブルへのカラム追加のため、ALTER TABLEしました。 InnoDBを用いてテーブルごとにファイルを作成するようにしており、 そのテーブルは19GBあります。 ■現象 ALTER TABLEは完了したにもかかわらず、そのテーブルが更新され続ける ・rootでMySQLにログインし、show processlistすると、何も走っていない。 ・そのテーブルのファイルのctimeが常に最新時刻になる ・dstatというプログラムで、毎秒30〜80MB程度ディスクに書き込んでいる(ディスクは12本のRAID10) ・SHOW INNODB STATUSのROW OPERATIONSに下記のように表示される -------------- ROW OPERATIONS -------------- 0 queries inside InnoDB, 0 queries in queue 1 read views open inside InnoDB Main thread process no. 4459, id 1140881744, state: purging Number of rows inserted 1919458574, updated 1763846459, deleted 298996892, read 73211468480 43.74 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.50 reads/s そのテーブル以外のテーブルに書き込み続けている処理が別途走っているので 「43.74 inserts/s」という表示がされていると思いますが、 そのテーブルを操作するようなSQLは一切発行していません。 ■調べたこと SHOW INNODB STATUSで、上記にあるように「state: purging」とあるのが気になります。 ALTER TABLEの後処理か何かが走っているのかもしれないと思ったのですが、 仮にそうだとしても何か分かりません。 ここをヒントにいくつか調べてみました。 http://www.mysqlpracticewiki.com/index.php/SHOW_INNODB_STATUS%E3%81%AE%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89 ソースinnobase/srv/srv0srv.cの2367行目、2445行目、2459行目あたり srv_main_thread_op_info = "purging"; が三個所あるので、どこに該当するのか分かりません。 分かりませんが、ずっと"purging"と表示され続けるので、 n_pages_purged = trx_purge(); で1以上が返されているのだろうと想像します。 それで、innobase/trx/trx0purge.cの1037行目のtrx_purge(void)を見てみました。 /* out: number of undo log pages handled in the batch */ とあるので、ログファイルを操作しているのかなと思ったのですがそれ以上は分かりませんでした。 ■したいこと スキーマの変更が正常に終わったことを確かめてから、アプリケーションプログラムを起動したいと思っています。 このまま待てばよいのか、何か操作が必要かどうかだけでも分かればと思います。 ■MySQLの設定 バージョン:5.0.54-20071205(2007年末の当時、仕方なくsnapshotを使いました) my.cnfは普通ですね・・・ my-medium.cnfをコピーして、 innodb_file_per_tableとlog_slow_queriesを追加して、 文字コードとinnodb_buffer_pool_sizeとinnodb_additional_mem_pool_sizeを設定してあるくらいです。 -- 株式会社ビービット 玉越 大輝 hiroki.tamakoshi@xxxxxxxxxx プロダクト責任者 兼 戦略担当 〒102-0071 東京都千代田区富士見2-14-37 FUJIMI EAST 1F TEL: 03-5210-3891 / FAX: 03-5210-3895 http://www.bebit.co.jp/