Naoki Kurosawa
naoki_kuros****@ybb*****
2003年 3月 23日 (日) 01:54:05 JST
黒澤です。 L> > 変更しておきました。 L> > ついでにベスト5からベスト10の表示に変更しました。 L> > ご意見などありましたらお願いします。 L> L> もしかして、皆さんも全く表示できないんでしょうか… L> 激重なのか、ランキングはなんど見ても L> Connection Timed Out L> になりますね。 L> こちらのサンプルでは表示されてたんですが、 L> データ量が多いとSQLのmax()って厳しいのかな。 BattleManagerBeanのgetRankingScoreにログ出力をはさんで時間を 計ってみました。 23:56:15,334 DEBUG [BattleManagerBean] getRankingScore[total_score] start. 23:56:17,079 DEBUG [BattleManagerBean] max query end. 23:56:25,066 DEBUG [BattleManagerBean] getRankingScore end. 23:56:25,070 DEBUG [BattleManagerBean] getRankingScore[bullet_dmg] start. 23:56:25,487 DEBUG [BattleManagerBean] max query end. 23:56:32,656 DEBUG [BattleManagerBean] getRankingScore end. 23:56:32,658 DEBUG [BattleManagerBean] getRankingScore[bullet_dmg_bonus] start. 23:56:33,077 DEBUG [BattleManagerBean] max query end. 23:56:40,300 DEBUG [BattleManagerBean] getRankingScore end. 23:56:40,303 DEBUG [BattleManagerBean] getRankingScore[ram_dmg] start. 23:56:40,721 DEBUG [BattleManagerBean] max query end. 23:56:47,613 DEBUG [BattleManagerBean] getRankingScore end. 23:56:47,616 DEBUG [BattleManagerBean] getRankingScore[ram_dmg_bonus] start. 23:56:48,033 DEBUG [BattleManagerBean] max query end. 23:56:56,208 DEBUG [BattleManagerBean] getRankingScore end. ということでクエリで31秒かかってます。 これにプラスしてJSP実行時間、ネットワーク転送時間がかかるわけですね。 「getRankingScore[...] start.」から「max query end」までが、 ランキングを出すクエリの時間で、 「max query end」から「getRankingScore end.」までが、 ランキングに載ったロボットの情報を取得するクエリ群です。 インデックスのないフィールドをWHERE条件にしたり、MAXを取ったりすれば 時間がかかります。 というわけで、 battle_robotsテーブルの total_score, bullet_dmg, bullet_dmg_bonus, ram_dmg, ram_dmg_bonus にインデックスを張ってみました。 すると、3秒になりました。 テストサイトもアップデートしておきましたので、 見れるようになったと思います。 00:26:27,722 DEBUG [BattleManagerBean] getRankingScore[total_score] start. 00:26:28,074 DEBUG [BattleManagerBean] max query end. 00:26:28,413 DEBUG [BattleManagerBean] getRankingScore end. ... 00:26:30,843 DEBUG [BattleManagerBean] getRankingScore end. が、データ量がどーんと増える(27MB→52MB)ので、この手は×です。 あらかじめ計算しておく仕組みが必要ですね。 -- Naoki Kurosawa <naoki_kuros****@ybb*****>