T.Hayashi's Diary | 掲示板 | ML案内 | リンク | Yahoo! | 自作ソフト紹介 | 自己紹介
マウスコンピューター/G-Tune
日記
バイク・オートバイ
PC
クルマ
交通取締
ダイエット・健康
食べ歩き・うどん
映画・音楽・漫画

携帯電話版


デル株式会社 デル株式会社 デル株式会社 デル株式会社 デル株式会社


DBチューニング (2002/07/05 23:50)

 「最近,ウチのサイトが遅いんだよね」

 と,お世話になっているアノ人に相談されたのはもう先々週。

 「じゃ,ちょっと調べてみましょっか」

 と,安請け合いしたボク。

 webサーバはIIS5。データベースはMS−SQL7。言語はASPにVBスクリプト。勝手知ったる環境だけに,油断してた。半日かけて,インデックスページをいじくってみるが改善せず。

 ボク的には面目丸つぶれ。口だけ達者なコゾーやん。とほほ。

 こうなったら意地でも速くしたろうと,ソースとデータベース内容を自宅に送信。じっくりと解析させてもらおう。

 自宅のテスト環境でサイトを再現させてみるが,遅い現象がでない。スパスパと見られる。なんでだろ?

 よく見てみると,ちゃんと動いていないみたい。出なければいけないはずの数字が出ていない。ショッピングサイトなんだけど,商品点数がゼロになっている。

 フォルダにある多数のファイルを見ていると,「global.asa」ファイルを発見。おおお。このフォルダは別のwebアプリケーションなのね。最近の私の開発スタイルとして,下層フォルダにwebアプリケーションをなるべく作らないようにしているから,すっかり忘れていた。

 webアプリケーション設定を行ったら,ページを開くのに10秒ほどかかる現象を再現できた。ようやくスタート地点に立てたのね。

 インデックスページを開くのは遅いが,次からの商品ページは速くでる。不思議だなあ。

 インデックスページを削って削って,無駄に時間を食っている所を探そうとしたら,ページの中身が無くなってしまった。

 無駄な所は確かにあるが,10秒もかかるモンじゃ無いみたいね。

 色々と試していたら,いきなり商品ページに行った場合も遅い事に気がついた。もしかして…。

 global.asa の内容を調べてみる。データベースを参照してるやん。こんな所で…。気がつかなかったわい。

 ふむふむ,商品数を集計しているのね。

cmdTemp.CommandText = "SELECT * FROM hoge"
cmdTemp.CommandType = 1
Set cmdTemp.ActiveConnection = shop
oRsHoge.Open cmdTemp, , 1, 3
Session("max_hoge") = oRsHoge.RecordCount

 テーブル全体を取得するまでも無いよなぁ。「select count(*)」を用いて,SQLサーバ側で商品点数を集計させて,その結果だけ読むようにしたら速くなりそうだ。

 ん? RecordCountプロパティってなんだろ? もしかして…。DAOでも似たようなのがあったよな。

 MSDNライブラリのADOリファレンスで調べたら,気になる注意書きが記載されていた。

↓引用
Recordset オブジェクトがおよその位置付けをサポートしていない場合、すべてのレコードを取得して数えなければ正確な RecordCount 値がわからないので、リソースを大量に消費する可能性があります。
↑引用

 全ての商品情報について,ユーザさんが接続する度にwebサーバ側で参照し,数を数えてたのね。商品数は約2万もあるのに。

 たったこの1行で凄まじく重い処理になる訳だわい。納得。早速に書き直し。

cmdTemp.CommandText = "SELECT count(*) as max_hoge FROM hoge"
cmdTemp.CommandType = 1
Set cmdTemp.ActiveConnection = shop
oRsHoge.Open cmdTemp, , 0, 1
Session("max_hoge") = oRsHoge("max_hoge")

 パッと見ただけでは,何も変わっていない様に見える。味気ないモンだ。

 しかし,いい数字が出た。10秒かかっていたのが1秒弱になった。これが原因だったのか。判るまでに時間かかっちゃったなあ。でも,判ってしまえばなんて事は無い。

 クルマの運転に例えれば,ギアを1速のままでアクセル全開にして,速度が出ないと言っているようなモンだろか。

 MS−SQLに限らず,使っている道具の性能をちゃんと引き出しているかどうか,見直す姿勢が大事って事ね。

 修正ソースをメールでお送りした。


 クルマやバイクのチューニングに比べたら地味だよなあ。効率を上げるほどに目立たなくなるような気もする。

 でも,こういうのの積み重ねだよな。処理時間が短くなれば,そのぶん他の機能も盛り込めるし。同時にさばけるユーザ数も増える。売り上げもきっと増えるだろう。

 今日,様子を見にお邪魔した。早速に対策したみたい。表示がカルい。

 DBマシンの負荷は平均20%。以前は100%いきっぱなしだったから,ずいぶん楽になったみたいね。よかった。

 自己マンゾクと言われりゃそれまでなんだけど,スッキリしたねえ。






[←前の日記]  [次の日記→]
[←前のページ]  [次のページ→]

2002/07/05 23:50: DBチューニング ←(参照中)
2002/06/25 23:50: MS−SQL2000:ストアドプロシージャ初心者
2002/06/06 23:50: はじめてのVB.NET
2002/05/26 20:15: WSH:ファイル行毎の末尾の数字を読んで合計を出す
2002/05/25 09:04: IP携帯電話 いいなあ
2002/05/13 23:55: ヤマハルータ RTA54i 設定例集
2002/04/14 01:40: MSのISAサーバが気になる
2002/04/11 21:57: win2k Active Directory 入門記事
2002/03/27 23:17: 知的財産権裁判例の検索
2002/03/21 13:56: SQLServerマガジン

Page : 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14;


対策前



対策後






画面上へ 
当サイトの内容は全てフィクションです。内容に関して一切の責任を負いません。
当サイトに掲載の文章・写真の無断転載/著作権法に定められた範囲を超える引用を禁じます。
すべての内容は日本の著作権法並びに国際条約により保護されています。

ブログ  楽天 ライブドア エキサイト goo はてなダイアリー