実行プランの読み方をまとめてみる - その9 ( Scan しているオペレーターがないからといって、安心してはいけません ) -
年末・年始にかけてお仕事でした。ゴールデンウィークがお仕事でなくなるのも少し萎えますが、年末・年始がなくなるのはかなり萎えますね。やはりきちんと休みを取りたいものです。来年以降もこのような状態が続きそうです... この状態から脱却するには、会社・業界を変えるしかないんでしょうね(笑)
さて、今回は実行プランを見ながらどのようにチューニングを行うか簡単に説明します。下図の実行プランを見てください。一見、Scan もありませんし問題のない実行プランに見えます。この実行プランのクエリを実際運用環境で実行させると、平均 15 秒程度かかっていました。下図の実行プランが示す通り単純な検索ではありませんが、遅いですよね。
よく見ると、キー参照のコストが 62% とかなり高いです。Index Seek と合わせると、全体の 90% を占めることになります。他にも負荷の高い処理を実行しているにもかかわらず、このコストの高さは少し変です。
①と Hash 結合して、②の結果件数がかなり減少しているため、キー参照前に ① の条件が適用できないかインデックスの並びを調整します。
インデックスの並びを変えることによって、全体のプランは下図のように変化しました。
キー参照前に、的確にデータを絞り込めるようになったため、キー参照のコストが 2% まで減少しています。
上記のチューニングの結果、どの程度の改善があったかを簡単に確認してみましょう。結果は明らかですね。改善後は 2 秒程度で処理されるようになりました。
- 改善前
- 改善後
実行プランから SQL Server がどのようにデータを取得し、処理しているかを的確に判断し、最適なインデックスを作成するようにしましょう。(簡単に言ってしまいましたが、そんなことが簡単にできるならデータベースチューニングなんて仕事必要ないんでしょう.....)
大分県の銘菓ザビエル。美味しいですよ。
- 出版社/メーカー: (株)ざびえる本舗
- メディア: その他
- この商品を含むブログを見る
別府温泉行きたかった.....
るるぶ大分 別府 湯布院 くじゅう'16~'17 (国内シリーズ)
- 出版社/メーカー: ジェイティビィパブリッシング
- 発売日: 2016/01/18
- メディア: ムック
- この商品を含むブログを見る
そうなんだぁと思ったことを記事にしてみた
大晦日からずっと仕事なんですが、結構暇です。時間があったので、色々と調べていたら下記の記事がひっかかりました。担当しているシステムで試したくなったのでやってみましたwww
SQL Server: パフォーマンスの問題を掘り下げる
OS のパフォーマンス チューニングの 1 つ目のスクリプト例では、実行済みスレッドで発生したすべての待機に関する情報を返す sys.dm_os_wait_stats DMV を使用します。このさまざまな情報が集約されたビューを使用して、SQL Server 全体および特定のクエリやバッチに関するパフォーマンスの問題を診断できます。
次のシンプルなクエリを使用すると、全体の待機時間に対するシグナルの待機とリソースの待機の割合を算出して、潜在的な CPU の負荷を診断できます。
ということで、下記のクエリを担当しているシステムで実行してみました。
SELECT CAST(100.0 * SUM(signal_wait_time_ms) / SUM(wait_time_ms) AS NUMERIC(20, 2)) AS [%signal(cpu) waits], CAST(100.0 * SUM(wait_time_ms - signal_wait_time_ms) / SUM(wait_time_ms) AS NUMERIC(20, 2)) AS [%resource waits] FROM sys.dm_os_wait_stats
このクエリは、CPU に負荷がかかっていることを確認するのに有効です。シグナルの待機は、CPU がスレッドにサービスを提供するまでの待機時間なので、シグナルの待機の合計が 10 ~ 15% 以上になると、CPU に負荷がかかっている目安となります。この待機の統計データは、SQL Server が最後に再起動されたときから蓄積されているので、シグナルの待機の基準値を把握し、長い時間をかけて、その動向を観察する必要があります。
ちょっと面白そうなので、しばらく観察してみよう。上記のクエリ以外にも面白そうなのがおおいなぁ。試してみよう!この手のやつは実環境と照らし合わせながらじゃないとわかんないですよね。
風邪を引いたとき、寝るときには必須です。これが一番合うかなー。
(PM2.5対応)フィッティ 密着ガードマスク ふつうサイズ 5枚入
- 出版社/メーカー: 玉川衛材
- メディア: ヘルスケア&ケア用品
- この商品を含むブログを見る
新年の挨拶してみる
新年あけましておめでとうございます。旧年は大変お世話になりました。今年も【都内で働くSEの技術的なひとりごと】のご購読よろしくお願いいたします。
- 出版社/メーカー: SP SAUCE
- メディア: その他
- この商品を含むブログを見る
今年書いた記事を振り返ってみる
怒涛の忘年会から、数年ぶりのインフルエンザまで、12月後半は色々と大変でした。更に、大晦日から正月明けまでお仕事です。それでは、今年一年の投稿された記事をざっくり振り返ってみます。
- この投稿をもって目標にしていた月 10 記事、年 120 記事を達成します。
- 毎月 10 記事書くのは結構大変ですね。
ryuchan.hatenablog.com
- 記事内容思いつかなかったり、内容が薄めになったりww SQL Server とあまり関係ない記事増やしたりww 来年は記事数を目標にするのはやめます。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
- シアトルは良い思い出でになりました。色々な事由により、もう行くことはないような気もします。(環境が変われば...)
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
- デッドロックについても、中途半端に終わってますね。インデックス間でデッドロックとか、その他色々な事例を踏まえて説明する必要がありますね。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
- Cognitive が一回で終わってる。今後の重要な技術要素の一つだと思うので来年からはもっと勉強します。
ryuchan.hatenablog.com
- NoSQL も重要な技術要素ですよね。RDBMS と共存するような使い方ができれば良いですね。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
- .NET 関係ももう少し記事かかないとなぁ。プログラミングスキルがどんどん落ちていく...
ryuchan.hatenablog.com
- カラムストアも中途半端に終わってる。業務でバリバリに使わないと中々取り組まないですね。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
- 今年も沖縄によく行ったなぁ。観光はほとんどしていませんが...
ryuchan.hatenablog.com
- ブログを書く理由は?
ryuchan.hatenablog.com
- 実行プランの読み方ももっと書くことあるから続けないと。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
- SQL Server に関して衝撃的な発表もありました。まさかの Linux 対応!
ryuchan.hatenablog.com
- チューニングについても続けます。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
ryuchan.hatenablog.com
まだまだ、纏めなければいけない情報はありますね。それでは、みなさまよいお年を♪ 来年も購読をよろしくお願いします。
反省します。
- アーティスト: 西沢和弥
- 出版社/メーカー: DANCING PIG
- 発売日: 2014/03/03
- メディア: CD
- この商品を含むブログを見る
今年たてた抱負をみてみる
こんな事書いてました。
ryuchan.hatenablog.com
ふぅ。相変わらず達成していないものが多いです。MCP も MCITP から全然更新していないなぁ。来年の抱負は少し少な目にしようww 一つづつ確認してみると、
- 将来のことを考えてみたい。
働き方を変えたいのと、自分の好きなことをもっと生かせるようにしたい。 - 自分にあった仕事は何か考えてみる。
エンジニアであることは間違いないです。 - マイクロソフトの技術に強くなる。
あんまり変わってないかなぁ。本当進歩がないです。 - MCP を更新する。( MCITP とかそのまま放置してる。)
2016 出ましたが、まだ考えてないです。 - インフラ関係に強くなる。
ネットワーク、仮想化関係は若干強くなったかな?と思います。 - ブログを継続する
継続した。 - 勉強会も二回以上は開催する。
二回は開催してません....
ある程度達成可能なものにしよう。数減らそう。
- 作者: 大倉燁子
- 発売日: 2015/01/10
- メディア: Kindle版
- この商品を含むブログを見る
SQL Server v.Next CTP1.0 で追加された DMF をお試してみる
もう一つ dmf をお試ししてみます。sys.dm_exec_query_statistics_xml です。
ryuchan.hatenablog.com
sys.dm_exec_query_statistics_xml は、実行中リクエストのクエリ実行プランを返します。一時的な統計情報を含む showplan XML を取得することが可能です。下記のクエリを SQL Server Management Studio で実行してみましょう。(別セッションで何らかのクエリを実行させ続けてください。) ん?結果が得られませんね。
SELECT er.*, eqsx.* FROM sys.dm_exec_requests er CROSS APPLY sys.dm_exec_query_statistics_xml(er.session_id) eqsx
トレースフラグを設定する必要がありそうです。下記のコマンドを SQL Server Management Studio で実行してみましょう。
DBCC TRACEON(7412,-1)
再度下記のクエリを SQL Server Management Studio で実行してみましょう。結果を得ることができました。
SELECT er.*, eqsx.* FROM sys.dm_exec_requests er CROSS APPLY sys.dm_exec_query_statistics_xml(er.session_id) eqsx
若干のオーバーヘッドはあるようですが、気にするほどでは無さそうです。
In TPC-C like workload tests, enabling the lightweight statistics profiling infrastructure adds a 1.5 to 2 percent overhead. In contrast, the legacy statistics profiling infrastructure can add up to 90 percent overhead for the same workload scenario.
インフルエンザ流行してきたと思ったら、ノロウィルスも来てますね。最近の餅つきイベントはその場でついた餅は破棄して、事前に衛生面が確保された場所で作られた餅を配ることが多いようです。こちらも対策が必要ですね。
- 出版社/メーカー: サラヤ
- メディア: ヘルスケア&ケア用品
- この商品を含むブログを見る