SE の雑記

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

特定の操作を含むクエリ情報を取得

one comment

ちょっとしたメモですが特定の操作を含むクエリ情報の取得のパターンをいくつか。
それっぽい情報は取れていると思いますが、XML の操作あまりわかっていません…。
そのうち 修羅イバーさんか 修羅イバーブログ で取り上げてくれると信じています。

XML の操作については Basic SQL Server XML Querying / Manipulating XML Data in SQL Server が参考になりました。

■Clusterd Index Scan が含まれるクエリの取得


Clusterd Index Scan はテーブルの全件スキャンとなり、データ件数が多い場合はコストが高い可能性があるので、チューニング対象となるケースが多いです。

WITH XMLNAMESPACES 
('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS ns) 

SELECT 
    text 
    , query_plan 
    , creation_time 
    , min_elapsed_time 
    , max_elapsed_time 
    , min_logical_reads 
    , max_logical_reads 
    , min_logical_writes 
    , max_logical_writes 
FROM 
    sys.dm_exec_query_stats 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) 
WHERE 
	query_plan.exist('//ns:RelOp[@PhysicalOp=''Clustered Index Scan'']') = 1

■暗黙の方変換が実行されているクエリの取得


暗黙の方変換が行われた場合、データの件数が多いとオーバーヘッドになることがありますので。

WITH XMLNAMESPACES 
('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS ns) 

SELECT 
    text 
    , query_plan 
    , creation_time 
    , min_elapsed_time 
    , max_elapsed_time 
    , min_logical_reads 
    , max_logical_reads 
    , min_logical_writes 
    , max_logical_writes 
FROM 
    sys.dm_exec_query_stats 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) 
WHERE 
	query_plan.exist('//ns:ScalarOperator[contains(@ScalarString, ''CONVERT_IMPLICIT'')]') = 1

■Nested Loop Join が含まれるクエリの取得


JOIN が Nested Loop で行われているクエリの取得です。

オプティマイザが選択した JOIN 方法を使用することが一般的ですが、JOIN 句のチューニングが必要かどうかの判断に使えるのかなと。

WITH XMLNAMESPACES 
('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS ns) 

SELECT 
    text 
    , query_plan 
    , creation_time 
    , min_elapsed_time 
    , max_elapsed_time 
    , min_logical_reads 
    , max_logical_reads 
    , min_logical_writes 
    , max_logical_writes 
FROM 
    sys.dm_exec_query_stats 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle) 
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) 
WHERE 
	query_plan.exist('//ns:RelOp[@PhysicalOp=''Nested Loops'']') = 1

Written by masayuki.ozawa

8月 21st, 2014 at 9:09 pm

Posted in SQL Server

Tagged with

One Response to '特定の操作を含むクエリ情報を取得'

Subscribe to comments with RSS or TrackBack to '特定の操作を含むクエリ情報を取得'.

  1. […] 特定の操作を含むクエリ情報を取得 | SE の雑記 […]

Leave a Reply

*