メインメニュー
最近の投稿
記事カテゴリ一覧
検索
Apple Store(Japan) Apple Store(Japan)

2007年4月25日(水曜日)

MySQLとApacheの調整

カテゴリー: - spiky @ 02時08分27秒 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

 

先日mysqldの調整をしました。
まぁ調整と言っても、システムのメモリサイズに応じて用意されている設定ファイルのテンプレートを変更しただけなのですが、それでもまだ遅い感じなので、個々のパラメータも若干弄ってみる事にしました。

 

最初に当方環境を書いておきます。

  • MySQL : MySQL 4.0.25
  • Apache: Apache 1.3.33
かなり古いですね(汗)
MySQLに関しては、xoopsの関係で4.1にあげずに使っています。またApacheに関しては、ほんとはApache2にしたいのですが、MacOS Xで標準インストールされているApacheと共存させるのにけっこうめんどくさいので、そのまま使っています。

 

まずmysqldです。
教科書的なことを言えば、調整に際し、以下のログ

/usr/local/mysql/data/slow.log

を見て、どのテーブルに対する、どのSQLコマンドが遅いのか?を確認してから適切なパラメータを調整する必要がある訳ですが、今回はそこまではせずに、直接webページを表示してみて、表示速度に変化があるかどうかで簡単に確認する事にしました。

 

まずmysqldの調整にあたって下記のサイトを参考に致しました。

 

  blogのチューニング

 

上記サイトでは、my.cnfの下記のパラメータの調整に付いて説明してあります。

query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=32M
query_cache_type=1

このうち、当方のmysqldではquery_cache_min_res_unitのパラメータが存在しないふるいバージョンの様でエラーとなってしまいましたので、これは指定しませんでした。その他を下記のように設定しました。

query_cache_limit=4M ←1Mから変更
query_cache_size=64M ←32Mから変更
query_cache_type=1

さて、これでmysqldを再起動します。

% /usr/local/mysql/support-files/my.server stop
% /usr/local/mysql/support-files/my.server start

うん、また少し早くなったようです。いったん描画を始めると早いのですが、一番最初に画面に書き始める所でまだもたつきます。xoopsの画面は、すべてMySQLに格納されたデータを毎回SQL文で検索して読み出してからhtmlを生成するので、MySQLへのSQL文実行に関わる部分を調整してみるのが効果の期待できるところなのですが、それ以外にもアフィリエイト関係でその他のサイトのテキストやバナーイメージを引っ張ってきているので,サイトのサーバの調整だけでは力の及ばない所があるというのが実際の所です。

 

その他に何かmysqlに対してできることはないか、と調べていると、mysqldを起動するときのパラメータとして

–skip-name-resolve

を指定するのが効果ありそうです。–skip-name-resolveは、mysqlがアクセスしてきたクライアントのIPアドレスからホスト名を引く処理をスキップするオプションで、当方立ち上げているxoopsのサイトでは、mysqldにアクセスしてくるクライアントは、基本的に同じマシン上で動いているwebサーバであるApacheとxoopsを構成しているphpのみです。従っていちいちmysqldへアクセスがあるたびに名前解決をする処理は必要ありません。従って、このオプションを

/usr/local/mysql/support-files/mysql.server

スクリプトの、起動時のパラメータ指定の所に追記しました。(赤字の所が追記部分)

case “$mode” in
’start’)

# Start daemon

if test -x $bindir/mysqld_safe then

# Give extra arguments to mysqld with the my.cnf file. This script may
# be overwritten at next upgrade.

$bindir/mysqld_safe –datadir=$datadir –pid-file=$pid_file –skip-name-resolve >/dev/null 2>&1 &

# Make lock for RedHat / SuSE

if test -w /var/lock/subsys then
touch /var/lock/subsys/mysql fi else echo “Can’t execute $bindir/mysqld_safe from dir $basedir” fi ;;

さて取り敢えずの所、MySQLでできる調整はこの辺までです。

 

さて、もう一つ関係しているのが、webサーバ"Apache"です。
Apacheに関しては、下記の@ITのサイトを参考にしました。

 

  第15回 Apacheパフォーマンス・チューニングのポイント
  最終回 Apacheパフォーマンス・チューニングの実践

 

Apacheの設定ファイルは下記にあります。

/etc/httpd/httpd.conf

上記のサイトの説明を参考に下記を変更しました。これらは主として、Apacheの子プロセスに関する設定です。

MaxClients 300 ←150から変更
MinSpareServers 5 ←1から変更
MaxSpareServers 10 ←5から変更
MacRequestsPerChild 1000 ←100000から変更

MaxClientsは同時アクセスできるクライアント数の上限です。すなわち、最大で300の子プロセスhttpdが起動する事になります。そしてこれらが個々にクライアントとセッションを張るので、イコールコネクションの最大数となります。

これは実際に仕事をするプロセスですが、これ以外に子プロセスが起動するのに生ずるオーバーヘッドを抑制するため、余分にプロセスを起動して待機しています。これらの数を指定するのがMinSpareServersとMaxSpareServersです。MinSpareServersは最小待機プロセス数で、MaxSpareServersは最大待機プロセス数です。通常は待機プロセスとしてMinSpareServers分のプロセスが待機していますが、この待機プロセスは稼働状況に応じて最大で10まで増えます。結果として、システムで起動するhttpdの数は

MaxClients + MaxSpareServers = 300 + 10 = 310

となります。これらの値はCPUの負荷とかメモリの利用状況をみながら調整する必要があります。

あと、MaxRequestsPerChildは、起動している子プロセスの生存期間です。あまり同じプロセスが起動しっぱなしになっていると、メモリリークなどが発生したりしてシステムに悪い影響を及ぼす可能性もあります。したがって、或る程度クライアントの処理をこなしたらプロセスに終了してもらい、新たに別の子プロセスを起動するようにするためのものです。当初100000という、かなりのセッションをこなせるようになっていましたが、これを1000回処理したら終わるように変更しています。

変更が終了したらApacheを再起動します。

% apachectl restart

さて、ここまで変更が終わったらサイトにアクセスしてみます。

 

うんうん、劇的といえるほど早くはなってませんが、それでもだいぶ改善されたように思います。まだ若干最初の表示開始までの時間がかかっているのが気になりますが、また改めて調整をして行きたいと思います。■

 

↓↓↓ 「いいね!」と感じたら、クリックしてBlogRanking投票お願いします(^o^)/


このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

コメント

このコメントのRSS

TrackBack URL : http://www.sailweb.net/modules/wordpress/2007/04/25/101/trackback/

  1. –skip-name-resolve
    でなく
    -–skip-name-resolve

    でした.
    http://dev.mysql.com/doc/refman/4.1/ja/dns.html

    Comment by torachi — 2007年5月15日(火曜日) @ 19時50分10秒

  2. torachiさん、ご指摘ありがとうございました!

    Comment by spiky — 2007年5月15日(火曜日) @ 22時10分41秒

 

 

コメントの投稿

改行や段落は自動です
URLとメールアドレスは自動的にリンクされますので、<a>タグは不要です。
以下のHTMLタグが使用可能です。
<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <br> <code> <em> <i> <strike> <strong>

 


ご注意 : セッティングにより、コメント投稿から実際に閲覧できるようになるまで暫く時間が掛かる場合があります。 再投稿の必要はありませんので、表示されるまでお待ち下さい。

43 queries. 0.187 sec.
Powered by WordPress Module based on WordPress ME & WordPress

Apple Store(Japan)
月別過去記事
なかのひと

ホーム -  ブログ -  フォトギャラリー -  リンク -  お問い合わせ
Powered by sailweb.net ? 2005-2007 sailweb.net
Theme Designed by OCEAN-NET