ネットサービスの開発に役立ちそうな話題を中心にお届けします。
F.Ko-Jiの「一秒後は未来」 > MySQL > MySQLのスロークエリが解消しないのでメモリ設定を調整
2010年08月02日 13:48
556日前に投稿

MySQLのスロークエリが解消しないのでメモリ設定を調整

  • ... PV
  • このエントリーをはてなブックマークに追加

スポンサード リンク

MySQLのスロークエリを解消するには EXPLAIN でクエリが利用するインデックスを見たり、using filesort が出ていないかをチェックしたりして、テーブルにインデックスを追加したりSQLを見直したりするのが通例です。

しかしそれでも解消しないスロークエリがあったので、メモリ使用量の設定を変更することにしました。

チューニング - データベース ( MySQL ) - 自宅サーバーの構築 - 自宅サーバーでやってみよう!!」によると、

/usr/lib/mysql

の下に、サーバーが搭載するメモリ量に応じたmy.cnfのサンプルファイルがある模様。

利用しているサーバー(VPS)は1GBまでメモリを使えるみたいなので、512MB以内のメモリ用のmy-large.cnfを参考にすることに。MySQLだけでメモリを食いつぶすわけにはいかないので一段階下の設定を選択しました。

my-large.cnfのものそのままですが、 [mysqld] の項に追加した設定は以下。

key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
read_buffer_size = 1M
thread_cache_size = 8
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
query_cache_size= 16M

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

ここで気をつけないといけないのは、innodb_log_file_sizeを変更したら ib_logfile0 と ib_logfile1 を削除して mysqld を再起動しないといけないという点。

これをやらないと、

100730 05:42:44 [ERROR] /usr/libexec/mysqld: Incorrect information in file: ...

のようなエラーが出てデータが取得できなくなってしまいます。一時的に MySQL を停止して作業することになるので、影響が少ない時間帯などにやる必要がありそうです。

設定項目の詳細は「DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!」が参考になります。

ひとまずこれでスロークエリが出なくなったので一安心。

スポンサード リンク

Written by
Meity.jp - Twitterなかまでプライベートなオフ会を開催したいなら


トラックバック

このエントリーのトラックバックURL:

MySQL

English version

前のエントリー: « Meityに「メンバーを引き継いで新しいメッセージを作成する機能」を追加しました
次のエントリー: 4匹の子猫がエサを求めてミャーミャーしてる動画 »

コピペにご利用ください。

タイトル:

URL:

リンク用HTMLタグ: