mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

MariaDB(MySQL) - シャットダウン時間の短縮!

[ サーバ構築 ] [ MariaDB, MySQL ]

こんばんは。

MariaDB や MySQL をシャットダウン(or 再起動)する際に時間がかかりすぎることがあります。

バッファの内容をディスクに書き込むのに時間がかかっているからです。

今回は、そのイライラを軽減するための対処についての記録です。

0. 前提条件

  • MariaDB 10.0.21 での作業を想定(MySQL でも同様)
  • ハード環境により成果は異なる、ということに留意。

1. シャットダウン時に行われる時間のかかる処理

  • InnoDB Buffer Pool 全領域のチェックポイント。
  • チェックポイントとは、ダーティページ(変更されたが、まだデータベースファイルに書き込まれていないページ)をテーブルスペースへ書き込むこと。

2. innodb_max_dirty_pages_pct について

  • InnoDB は、ダーティページの割合(単位:%)が innodb_max_dirty_pages_pct の値を超えないように、バッファープールからデータをフラッシュしようとする。
  • innodb_max_dirty_pages_pct のデフォルト値は 75
  • innodb_max_dirty_pages_pct の設定可能値は 099.999 (MariaDB 10.0.15 以上), 099 (MariaDB 10.0.15 未満).
  • 書き込み回数を減らす(書き込みを遅らせる)ためにはこの値を大きくする。
  • この値を小さくし過ぎると書き込みが頻発し、innodb_buffer_pool_size を大きく設定していても効果が小さくなる。

3. シャットダウン時間の短縮方法

  1. MariaDB(MySQL) サーバにログインし以下の SQLを実行する。
    SET GLOBAL innodb_max_dirty_pages_pct = 0;
    (但し、環境によっては 0 を指定できないかもしれない。その場合は 10.001 等でもよい)
  2. Value 値が十分小さくなる(0 に近付く)まで以下の SQL を断続的に実行して待つ。
    SHOW GLOBAL STATUS like 'innodb_buffer_pool_pages_dirty';
  3. サーバのシャットダウン(or 再起動)
    • シャットダウン(or 再起動)すると、 innodb_max_dirty_pages_pct の値が設定値に戻る。
    • シャットダウン(or 再起動)し忘れると innodb_max_dirty_pages_pct の値が 0 のままで、頻繁にダーティページのテーブルスペースへの書き込みが発生してレスポンスが悪くなるので注意。

4. 所感

シャットダウンに時間がかかりすぎて不安に感じる際には、シャットダウン前にチェックポイントを実行してダーティページの書込状況を確認できるのでよいかもしれません。

5. 参考サイト

シャットダウンプロセスについては以下のサイトを参照。(但し、チェックポイントやダーティページについての記載はない)


以上。

Comments