まとまりのないブログ

something which something is something

mysql

mysqlの運用時のトラブルと試行錯誤のメモ

投稿日:

条件

  • 1分間にクエリの実行が30回〜60回程度発生する。
  • 結果のテーブルは7フィールドの数千〜10万件レコード程度のテーブル
  • mysqlのスペックはCPUがcore2duo,メモリが8GB,他のサービスとしては主にapacheやphp,tomcatなどを同時稼働

結果

  • クエリの結果が表示されない。(メモリが足らない?または、クエリのキャッシュが不具合?)
  • mysqlのサービスは落ちていない。

考察

クエリの実行回数が少ない時は発生しなかったが、高負荷時にはクエリの実行結果が正しく表示されないという現象が頻発するようになった。サービスが落ちてはいないことからキャッシュ関係の設定(table_cache, query_cache_size, max_connections, thread_cache)を見直しながら試行錯誤してみたものの改善せずまた原因もわからず。

メモリを増やせば解決する問題のような、そうでもないような・・・。今で限界の8GB積んでいるから、増やすとなると次は・・・16GB?ECC機能付きのメモリは今の相場だと厳しい値段がついているような予感。それも4GB×4枚だとちょっと。

今のところは応急処置として、定期的にキャッシュクリアをすればなんとか正常にクエリ結果を返すことはわかった。しばらくはそれでもたせて、何か他に見落とした設定があるかもしれないので引き続き調査を続行。

追記

  • キャッシュクリアでは効果があまりない模様。仕方が無いので定期的にmysqlのデーモンをリスタートさせることでさらに応急処置。
  • mysqlの起動スクリプトで簡単にリスタートできることを今更ながら発見。スクリプトの場所は標準なら code>/usr/local/mysql/share/mysql/mysql.server にある。起動スクリプトの使い方は,半角スペースを空けてrestartと入力するばいい。(例:/usr/local/mysql/share/mysql/mysql.server restart)
  • このときオプションもついでに使うことができる模様。オプションを指定して起動スクリプトを実行すると設定ファイルより優先される。(例:/usr/local/mysql/share/mysql/mysql.server restart --skip-slave-start)

追記2

事態が好転しないのでmysqlの設定をもう一度見直し。

  • table_cacheの値を100→1024に大幅に増加して設定してみる。
  • key_bufferの値は控えめに1024MB→256MBに設定してみる。
  • max_connectionsも100→50に減らしてみる。
  • query_cache_sizeの値も16MB→8MBに減らす。

このあたりの設定変更をして様子をみてみる。というか,根本的に何か間違っている予感・・・。

追記3

さらに設定見直し。今度はプログラムの方にも修正を入れることにした。雑に書いていたコード部分を整備して,変数宣言など余計なものをチェックして修正することで少しでもメモリの浪費を抑える。

で,今のところはかろうじて安定してきた。

-mysql

執筆者:


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

sennaのインストール

かなり嵌ったので備忘録。sennaをインストールする際、configureのオプションを指定しないと、デフォルトの文字コードはeuc-jpでconfigureをすることになる。mecabで文字コードを …

no image

ssdでデータベースサーバを構築してみた

現状ではまだ手を出すのは早いかもしれないssdでデータベースサーバを構築してみた。実験的な意味で。

no image

全文検索エンジンmroongaを使ってみた

sennaをビルドして使っていたのだけれど、レコード件数と速度に限界を感じてきていたのでその後継といわれるmroonga3.04を使ってみた。使ってみた感想は、mroongaストレージエンジンでの全文 …

no image

mysqlのmy.iniの標準値のメモ

mysqlのmy.iniファイルのサンプルの設定ファイルの値がどのように設定されているかチェック。mysqldの設定例を抜き出してみる。設定するときの参考にはなるだろうと思うので。

no image

mroongaよりsennaの方が検索速度が速い場合がある

DBのレコード件数1800~2000万件程度のテーブルで全文検索した場合に、mroongaを使って検索した時にやたら時間がかかった。大体3秒~10秒ほどselect count(*)を実行するのにかか …