データベースで最近実行されたすべてのクエリを見つける


21

[私は初心者レベルのT-SQLプログラマーです]
[..できれば、適切なスタック交換サイトにいます]

私が実行したすべてのクエリのリストを取得したいと思います(少なくとも、朝から今日実行したクエリ)。クエリの実行時間に関するレポートを作成する必要があります。

オンライン検索で役に立つ情報はあまり得られませんでした。私がオンラインで見つけた非常に近いと思われるクエリは

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

このクエリはいくつかの奇妙な結果を返しました(そのほとんどは多数のsprocでした)。さらに、これらの結果はすべて、今日の午後から実行されたクエリを示しています(午前中にクエリが必要です)。

以前の質問には何も見つかりませんでした(同様の質問が既に質問されている場合は、それを指摘してください)。

SQLプロファイラーに関するいくつかの提案を見ましたが、プロファイラーは既にトレースを開始している場合にのみ役立つと思います(間違っている場合は修正してください)。

誰かが私に朝からデータベースで実行されたすべてのクエリのリストを取得する方法を提案できますか(クエリ実行時間を含む)。

[クエリを実行したユーザーのユーザー名も何らかの方法で取得できると便利です(要件ではありません)]

回答:


12

このクエリは、いくつかの奇妙な結果を返しました(そのほとんどはsprocの束でした)。さらに、これらの結果はすべて、今日の午後以降に実行されたクエリを示しています(午前からクエリが必要です)。

これは、プロシージャキャッシュを確認しているため、午前中に使用された計画がメモリプレッシャー、サーバー/インスタンスの再起動、プロシージャキャッシュの手動クリアなどのためにそこに存在しない可能性があるためです。

インスタンス(またはより具体的にはデータベース)に対して実行されるクエリを取得する実際の方法は、SQLトレースまたは拡張イベントセッションを作成することです。適切に作成されたこれらのいずれも、探している情報を提供します。

今朝、今朝のみの実行統計を探している場合(つまり、前述の監視実装を事前対応タスクとto-do-next-timeタスクとして設定するだけでは不十分です)、それが既に作成されていない限り、道ネイティブにこの情報を取得します。

後で参照するために、SQL:StmtCompletedイベントをキャプチャするSQLトレースから始めます。XEでは、sql_statement_completedイベントになります。

私の意見では、クエリ実行統計の残りを検索し続ける代わりに、測定しようとしているワークロードを再実行する方法を見つけることに時間を費やし始めます。しかし、今回はその前に、適切なトレース/監視を設定します。


SQL:StmtCompletedデータ列でフィルタリングできますか?
キケネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.