SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

ソート時の tempdb の利用と Sort Warning

leave a comment

前回の投稿ではソート時に tempdb が利用されたことを、実行プランから確認しました。

今回は拡張イベントでソート時の tempdb の利用を確認してみたいと思います。

■Sort Warning イベントの発生


ソート時に tempdb が利用されると実行プランに警告が表示されます。
image

この時、[Sort Warning] というイベントが発生しています。

tempdb を使用したソートが行われたかどうかはこのイベントを取得することで確認ができます。
確認の方法としては、SQL Server Profiler / 拡張イベントがあります。

SQL Server Profiler で確認する場合は Errors and Warnings の Sort Warnings というイベントを取得すること確認ができます。
image

拡張イベントの場合は、sort_warning のイベントを取得することで確認ができます。
image

今回は拡張イベントを使用して情報を取得してみたいと思います。
先ほどのイベントを使用した拡張イベントを作成してライブデータを取得すると以下のような情報が取得できます。
image

拡張イベントのデータはログに取得することができますので、後追いでどのクエリのソートで tempdb が使用されたかを確認することができます。

イベントにはほかにも種類がいくつかあり、Hash Warning というイベントもあります。
これはハッシュ結合時にワークスペース領域のメモリが不足し、tempdb が利用された場合に発生するイベントとなっています。
image

tempdb の負荷が高い場合は一時テーブルや行バージョニングの利用以外にも、これらの結果セットを作成するために負荷が高くなっている可能性がありますので、いろいろな見方を検討する必要が出てきます。
tempdb がどの用途で利用されているかは、sys.dm_db_file_space_usage で確認をすることができますので、定期的に確認をするとよいかもしれないですね。
Server 2008 R2 までは、上記の DMV は tempdb の情報取得用だったのですが、SQL Server 2012 では全データベースで使用ができるようになりましたので、USE tempdb やtempdb.sys.dm_db_file_space_usage というように明示的に tempdb を指定する必要がありますので少し注意が必要になってきます。
# ハッシュ結合時のハッシュテーブルの作成は、internal_object_reserved_page_count に上がってきたはずです。

他のイベントの発生条件を調べてみると状態管理の運用をする時に役に立つかもしれないですね。

Written by masayuki.ozawa

2月 22nd, 2012 at 8:10 am

Posted in SQL Server

Tagged with

Leave a Reply

*