『心臓外科医の術式』Tweet前回のおさらい前回「SQL簡易パフォーマンス診断」では、情報が全くないなげっぱなしジャーマンからの無茶苦茶な依頼に対して、インスタンス起動時からのSQLカーソルに関する基本的なパフォーマンス統計情報を参照することができる「V$SQLSTATS」を用いて解決したというお話をしました。どんな内容だったかなぁ?というかたは、上記リンクから改めて確認してくださいね。Databaseに日々携わるたろーちゃん。そんなたろーちゃんのところに、アプリケーション開発者のAさんが訪ねてきました。Aさんは、たろーちゃんの同期社員です。何があったのでしょうか?Aさん「たろーちゃん、ちょっと時間ある?」たろー「うん、どうしたの?」Aさん「既にカットオーバーして動いているWEBシステムがあるんだけど、一部のエンドユーザ様から『ページが表示されるのが遅いときがある』ってクレームが来てるんだよ。」たろー「ありゃ」Aさん「ただ、何が原因なのかサッパリ分からなくて・・・。」たろー「アプリケーションのログから何か分からないの?」Aさん「そ、それが・・・あまり大きな声じゃ言えないんだけど、詳細なログを出力するような作りになっていなくてさ・・・。アプリケーションに問題があるのか?データベースに問題があるのか?サッパリ分からないんだよ。」たろー「原因が何なのか突き止めないといけないね。」Aさん「どうしたらいいかな?」たろー「まずアプリケーションのログに、どこで時間が掛かっているか?ハッキリと分かるよう処理時間を出力するような修正を加えてみては?」Aさん「いやー、それって、プログラムに手を入れるってことだよね?もうカットオーバーされちゃってるし、予算もないし、プログラムを修正できる人もいないんだよねー。」たろー「.........。「原因が分からないけどシステムが遅い」という漠然とした相談を受けるDBAの方もいらっしゃるのではないでしょうか?しかも今回は、原因切り分けのためのログ出力のアプリケーション修正すら出来ないというケース。「心臓外科医」のたろーちゃんは、このあと、どうするのでしょうか?WEBシステムの特徴たろー「WEBシステムってことは原則、24時間365日動いてるシステムなんだよね?」Aさん「うん、そうだよ。」たろー「とりあえずデータベースを調べてみるから、遅かった時間帯を教えてくれる?」Aさん「いや、それがマチマチなんだよ。」たろー「?」Aさん「このWEBシステムは、夜の22時頃がアクセスのピークで、朝方4時頃が一番アクセスが少ないんだ。それで?」Aさん「でも遅いと言われているのは時間帯に関係なく、夜の22時頃でも朝方4時頃でも起きているみたいなんだ。」たろー「なんだって?」Aさん「もう、わけがわからないよ。」たろー「とりあえずOSチームに依頼して、全時間帯の各サーバーのリソース状況を調べてもらおう。時間帯を絞るため、たろーちゃんはOSチームと連携を取り、WEBサーバ、アプリケーションサーバ、データベースサーバ、ストレージサーバのCPU使用率やメモリ使用量の確認を行うことにしました。リソースに問題?OSチームから連携された資料を、たろーちゃんとAさんは共に確認していきます。ー「1日を通して、どのサーバも山谷はあるけど、頭打ちはしてないな。ピークの22時にどのサーバもCPUが多く使われているけど、100%使い切ってるわけじゃない。メモリにも余裕があるよ。」たろー「アクセスの少ない朝4時なんか、CPUスカスカだね。」Aさん「もしかしてネットワークトラフィックの問題かな?」たろー「それも考慮して、ネットワークチームにも調査を依頼してきたよ。回線は輻輳(混雑)していなかった。」Aさん「どうしてこれで、『遅い』って現象が発生するんだ??」たろー「...うーむ。」Aさん「特定のページが遅いっていうなら分かるんだけど、色んなページで『遅い』って言われてるんだよねー。」たろー「え?特定のページだけじゃないの?」Aさん「うん。検索画面だとかトップ画面だとか、来てるクレームはマチマチなんだ。」たろー「ということは、発行されてるSQLも・・・。この時点で、前回ご紹介したV$SQLSTATSを確認しても突出して遅いSQLは見当たりませんでした。10gより提供された新機能です。10gの実際の使用履歴そのものを自動的に取得し、リポジトリに格納しています。)が使えるので、たろーちゃんは24時間分のAWRレポートの確認を始めることに・・・。)Aさん「このHTMLは何だい?」たろー「これはAWRレポートと言って、データベースのパフォーマンス状況を分析できるんだよ。」Aさん「そんな便利な物があるのか。」たろー「これを見れば大抵のことは分かるんだ。」Aさん「けれども?」たろー「今回はAWRレポートを見ても、これといっておかしな点が見つからないんだ。Time』ってセクションが時間がかかっているSQLの一覧なんだけど、突出したものがない。」Aさん「どれどれ・・・。あー、このSQLは検索画面だな。次はトップ画面のSQLだ。」Aさん(カタカタカタ)Aさん「いや、問題ない。