web-dev-qa-db-ja.com

プロファイラーの期間フィールド

25秒以上かかるスクリプトを監視したいと思います。フィルターを使用すると、スクリプトの所要時間を確認できません。クエリの実行にかかる時間を取得するにはどうすればよいですか。

私の要件は簡単です:
25秒以上かかるすべてのスクリプトを取得します(各ステートメントの実行にかかる時間が必要です)。

4
SenthilPrabhu

プロファイラGUIの25秒は25,000ミリ秒です。 WAITFOR DELAYを使用して、それが機能していることをテストします。

25 seconds to go go go

4
wBob

こんにちはSenthil Prabhu、

SQLプロファイラーを使用しているときは、

トレースのオーバーロードトレースの一部としてキャプチャする必要があるイベントまたはデータ列を簡単に決定する方法はありません。それは当面の問題に依存し、どのイベントが利用可能であり、それらのそれぞれが何をするのかをよく理解する必要があります。

SQLプロファイラーは最も強力ですが、分析ツールが複雑であるため

SQLプロファイラーに接続すると、T-SQL期間のテンプレートを作成できます。さらに、[イベント選択]タブでは、オブジェクト名やその他のフィルターをカスタマイズして、必要な詳細のみを見つけることができます。

TSQL_DURATION TSQL_Durationテンプレートは、クライアントからSQL Serverに送信されたすべてのT-SQLステートメントとその実行時間をキャプチャするために使用されます。結果を実行時間でグループ化します。

これがお役に立てば幸いです。

サムありがとう

3
Sagar Makhesana

プロファイラーを使用してシステムをライブでトレースする代わりに、DMVを使用してコストのかかったステートメントをSQL Serverに問い合わせることができます(実行カウント数、CPU使用率、論理ディスクまたは物理ディスクに基づいて必要な情報を見つけたら、実行されたクエリについて= IOまたは経過時間(期間)など)

したがって、クエリが既に一度実行されてキャッシュされている場合は、DMVのsys.dm_exec_query_statsとsys.dm_exec_procedure_statsでtotal_elapsed_timeを使用して、所要時間を確認できます。

ソース: http://www.sqlservercurry.com/2010/07/find-most-time-sumption-code-in-your.html

--Top 10 slowest queries that takes more than 25 seconds(25000000 micro seconds)
SELECT TOP 10
            source_code ,
            stats.total_elapsed_time / 1000000 AS seconds ,
            last_execution_time
    FROM    sys.dm_exec_query_stats AS stats
            CROSS APPLY ( SELECT    text AS source_code
                          FROM      sys.dm_exec_sql_text(sql_handle)
                        ) AS query_text
    WHERE stats.total_elapsed_time > 25000000
    ORDER BY total_elapsed_time DESC

または、以下のクエリを使用して、25秒(25000000マイクロ秒)以上かかる最も遅い10個のストアドプロシージャを見つけることができます。

ソース: http://sqlserverperformance.wordpress.com/2013/08/08/sql-server-diagnostic-information-queries-for-august-2013/

SELECT TOP ( 10 )
        p.name AS [SP Name] ,
        qs.total_elapsed_time / qs.execution_count AS [avg_elapsed_time] ,
        qs.total_elapsed_time ,
        qs.execution_count ,
        ISNULL(qs.execution_count / DATEDIFF(Second, qs.cached_time, GETDATE()),
               0) AS [Calls/Second] ,
        qs.total_worker_time / qs.execution_count AS [AvgWorkerTime] ,
        qs.total_worker_time AS [TotalWorkerTime] ,
        qs.cached_time
FROM    sys.procedures AS p WITH ( NOLOCK )
        INNER JOIN sys.dm_exec_procedure_stats AS qs WITH ( NOLOCK ) ON p.[object_id] = qs.[object_id]
WHERE   qs.database_id = DB_ID()
        AND qs.total_elapsed_time > 25000000
ORDER BY avg_elapsed_time DESC
OPTION  ( RECOMPILE );
2
DaniSQL