Subscribe to RSS Feed ログイン

CentOS設定メモ

MySQLメモリ最適化

MySQLを利用したWebサービスなど開発してると、データ量の増加にともなって劇的に遅くなることがあります。(1クエリで5秒超えるなど)
ほとんどの場合はインデックスが適切に張られていないか、メモリ割り当てが不適切でSWAPが発生しまくってる状態が多いようです。
今回は私が普段目安にしているMySQLのメモリ割り当てのメモ。

基本は
innodb_buffer_pool + key_buffer = MySQLに割り当て可能なメモリの2/5
(read_buffer+sort_buffer)×同時接続数 = MySQLに割り当て可能なメモリの2/5
table_cahce = 推奨値 テーブル数×同時接続数
その他項目の合計値 = 1/5

DBサーバーとしてMySQL以外にサービスを動かしていないサーバーでメモリ搭載量12GB(64bitOSじゃないと意味ないので注意)の場合は

MySQLメモリ割り当て = 10GB
同時接続数 = 200
テーブル数 = 50

innodb_buffer_pool + key_buffer = 4GB
innodb_buffer_pool = 2GB
key_buffer = 2GB
※innodbテーブルが多い場合は振り分けを変更

(read_buffer+sort_buffer)×200 = 4GB
read_buffer =20M
sort_buffer = 20M

tabe_cache = 10000 としたいところだが、推奨値が < 2048 なのでいったん
tabe_cache = 2048 で様子見

とします。
メモリ割り当て間違えるとこれまたSWAPが発生しまくって逆にパフォーマンスが下がるので注意。

コメント(0)続きを読む

MySQL unauthenticated user

MySQLを使用してWebサイトの開発を行っているとたまーに
「unauthenticated user」
に悩まされることがある。
show processlistでMySQLのプロセスを確認するとこの「unauthenticated user」でコネクションを使い果たし新たにコネクションがはれなくなってしまうのだ。

この原因はDNS逆引きの負荷によるコネクションあふれ。
解決方法としては二つ
・skip-name-resolveを設定
  そもそもDNS逆引きをさせない。この場合はホスト名での接続ができなくなるのでIPアドレスで接続管理を行う。my.cndにskip-name-resolveを入れてMySQL再起動
・/etc/hostsで名前解決
  ホスト名の解決をhostsで管理する。接続台数が多い場合はメンテナンスが面倒

私の場合は基本的にはskip-name-resolve方式で行い、どうしてもホスト名での構築が必要な場合のみhostsファイルを使っています。
ちなみに、skip-name-resolve、hosts、DNSでの性能比較を行っているサイトを発見

kip-name-resolveでMySQLへの接続がどの程度速くなるのか試してみた

ここを見た感じDNSを利用するのはやはり避けたほうがよさそう・

コメント(0)続きを読む

MySQL Slow Queryの設定

忘れるのでメモ


[root@localhost ]# vi /etc/my.cnf
#以下を追加
log_slow_queries = /var/lib/mysql/slow_query.log
long_query_time = 3
log-queries-not-using-indexes #index使ってないクエリを出力

[root@localhost ]# service mysqld restart

コメント(0)続きを読む