さすがにDBの規模が大きくなるとそうも言ってられないよなーと思い、クエリチューニングに乗り出す事にした。
(indexの最適な付け方も良くわからないし :D )
まずは現在のボトルネックを探す。
今までは体感とシステム上で時間を計測してたけど、DBの事はDBに聞けって事でログ解析をする事に。
(ここらへんを参考にした)
postgresのログ解析には pgfouine と pqa というのがあるらしい、前者は php、後者は ruby だ。
これはもちろん pgfouine だろう! php も ruby もよく知らないけど groovy 好きっ子としては ruby に行ったら負けかなと思っている。
ITProの記事を参考に、postgres のログを出力する設定をする
んで pgfouine を実行・・・!しようと思ったら動かない。GDというライブラリが必要らしい。
Macにデフォで入っている php にはこれが組み込まれていない。調べてみると MacPorts でインストールすると簡単らしい。
ということで MacPorts から php をインストール、、、長い、、、長い、、、しかもCPUフルに使いやがる、そういう事は先に言ってくれと。
無事インストールが終わった所で pgfouine を起動してみる。
php pgfouine.php -logtype stderr -file log/postgresql-xxxx-xx-xx_xxxxxx.log -format html-with-graphs -report vanfu_sql.html=overall,hourly,bytype,slowest,n-mosttime,n-mostfrequent,n-slowestaverage,n-mostfrequenterrors,tsung
とりあえず出力オプション全部付けてみた :p
おー、なんかかっこいいですね!
ちょっと試しで3分ほど適当にシステムを稼働させて集計した結果、SELECT件数が 4,179、、、うーんO/Rマッピングが遅いと言われるのがわかります。
まあ逆に考えれば1クエリ0.01秒の改善でも3分あたり40秒もの改善になるって事ですね。
とりあえず現状の確認方法まで
次回はGrails向けのチューニング方法をまとめようと思います。
0 件のコメント:
コメントを投稿