0

SQL クエリを実行する .NET クライアント アプリケーションがあり、そのクエリが ADO​​.NET によってタイムアウトになることがあります。タイムアウトになると、クエリ プランが dm_exec_query_stats にキャッシュされていることがわかりません。クエリが完了すると、プランキャッシュされます。

アプリケーションの例外ハンドラで、タイムアウトになった特定のクラスのクエリのクエリ プランをプログラムでキャプチャしたいと考えています。これはトラブルシューティングに役立ちます。これは可能ですか?タイムアウトの可能性がある各クエリは一意の名前を持つテーブルを参照するため、クエリ テキストをスキャンして適切なプランを見つけることができます。

私は、私の例外ハンドラーで、実行できることを望んでいました:

SELECT TOP 1 p.query_plan, t.text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text (qs.plan_handle) AS t
CROSS APPLY sys.dm_exec_query_plan (qs.plan_handle) AS p
WHERE t.text LIKE '%UNIQUETABLE%'
ORDER BY last_execution_time DESC;

しかし、これには探しているクエリが含まれていません。おそらくタイムアウトしたためでしょうか?

中止されたクエリを開始するために使用されたクエリ プランを取得することは可能ですか?

(実行される SQL は動的です。ストアド プロシージャを使用すると楽になりますが、残念ながらそれは利用できません!)

4

2 に答える 2

1

データベースはアドホック ワークロード用に最適化されている可能性がありますか?

sp_CONFIGURE 'optimize for ad hoc workloads'
于 2013-09-26T14:48:00.067 に答える