SQLチューニングの基礎の"き"(SQLServer編)

はじめまして!! 三和システムおちゃらけ担当のuozy☆です!
いつもふざけてばかりなのですが、実は小心なので、いつ怒られるのかとびくびくしながら過ごしております(つω⊂)

さてちょっと真面目な話をしておくと、 uozy☆の本当の担当はDB関係とかデータ分析とかです。 なのでuozy☆の記事では、技術的なDB情報やゴルフ場に関係するデータ分析の情報、 その他各種最新情報なんかもキャッチアップして記事にしていけたらなと思ってます。 どうぞよろしくお願いします。

今回のテーマについて

最初だから今回はおちゃらけませんw
アプリを運用していると「パフォーマンスが劣化してきて・・・」なんて事がよくあると思います。 その場合の、発生カ所の特定方法と対処方法についてです。
今回の環境はSQLServer2008R2を使用します。

最初に何をするか?

まずはどの部分が遅くなっているのかを確定させなきゃいけません。
通信なのかロジックなのかDBなのかってところを切り分けなければなりません。
とはいえ、経験上ほとんどの場合はDBですね。うむうむ。 そしたら、次に遅いクエリの特定をしなければなりません。
そこで登場するのが「SQLServerProfiler」です、じゃーん!

f:id:uozy:20150113214156p:plain

SQLServerManagementeStudioのツールの中から起動する事が出来ます。
この人は何とも便利で、DB上で実行されているクエリを取得できちゃいます。
しかもアプリから実際に実行されている形のクエリを取得する事が出来ます。
(もちろんパラメータもついてます)

いざ実行してみると・・・ どぅわっと、と山のようにクエリが出てきますねw

これ設定画面でいろいろフィルター出来るので目的のapplicattionnameあたりで絞っておいてくださいね~。

Duration列の値が高いものが実行に時間のかかったクエリなので こいつをピックアップしていきましょう。

あと注意点としてはDBサーバー上でGUIを実行すると負荷がかかるので 別のマシンで実行してDBに繋ぐという方法をとるのがよいかと思います。

特定できましたか?

そしたら次はSQLServerManagementStudioからクエリエディタを起動しましょう。
そして先ほどピックアップしたいけてないクエリ君を貼り付けてF5で実行です!
※更新系のクエリは実行する際に十分注意してください。
 &先頭と最後のbegin tranとrollback tranをつけておくのをおすすめします。

うーん・・・やっぱり遅い!!。

よしじゃあ次はクエリエディタ上で右クリックをして「実際の実行プランを含める」をクリックしてF5です! すると、結果タブの横に「実行プラン」タブが出現します。 ここにグラフィカル表示されてるのがDBがどうやってデータを処理しているかの処理ロジックです。

f:id:uozy:20150113215357p:plain

遅いクエリはこいつがイケてないので、
こいつをイケてるように変えるのがSQLチューニングの第一歩です。

とまあ、こんな感じで今日はここまで!

次回は

実行プランを変える方法論をお送りしようと思っています。

バイバーイ\(^o^)/