web-dev-qa-db-ja.com

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

[私は初心者レベルの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プロファイラーに関するいくつかの提案を見ましたが、プロファイラーは、トレースを既に開始している場合にのみ役立つと思います(間違っている場合は修正してください)。

誰かが朝からデータベースで実行されたすべてのクエリ(クエリ実行時間を含む)のリストを取得する方法を教えてもらえますか?.

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

21

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

これは、プロシージャキャッシュを調べており、午前中に使用されたプランがそこに存在しない可能性があるためです(メモリの負荷、サーバー/インスタンスの再起動、手動でのprocキャッシュのクリアなど)。

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

今朝、今朝のみの実行統計を探している場合(つまり、前述の監視実装を予防的かつ次のタスクとして設定するだけでは十分ではありません)、それがすでに作成されていない限り、この情報を取得する方法natrative

将来の参考のために、 SQL:StmtCompleted イベントをキャプチャするSQLトレースから始めます。 XEではsql_statement_completedイベント。

私の意見では、クエリ実行統計の残りの検索を続ける代わりに、測定しようとしているワークロードを再実行する方法を考え出すことに時間を費やすことになります。ただし、今回はその前に、適切なトレース/モニタリングをセットアップします。

12
Thomas Stringer