2016-05-02 3 views
0

特定のユーザーが実行するすべてのクエリを表示するSQL Server 2008 R2のDMVを探します。クエリの実行

私は今のところ、このコードを持っている:

SELECT * 
FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 

をそれは私がログイン名に結果をフィルタリングすることができます別のDMVに参加することは可能でしょうか?

+1

てみてくださいにhttp:// dba.stacke xchange.com/ –

+1

SQL Serverがどのクエリを実行しているかを追跡しているとは思わない。おそらく、おそらくSQLプロファイラを実行して、ユーザーが実行しているクエリを追跡することが最善の策です。 – MWillemse

+1

あなたは完全な履歴を保持したいのですか、現在実行中のものはありますか? –

答えて

2

これらのクエリは完全な履歴は得られませんが、キャッシュされた実行計画は空になります(通常はSQL Serverの再起動時に発生します)。

使用SQL Serverプロファイラ、すべてのユーザの活動

あなたが追跡するSQL Serverプロファイラのセッションを作成することができますを格納するために:あなたは、すべてのユーザーの活動を追跡したい場合は

は、あなたはいくつかのオプションを持っています必要なデータベースのイベントSQL:StmtStarting。ワイルドカードを使用して特定のクエリのみを追跡することもできます。 Profilingセッションの結果はテーブルに格納できます。サーバーの起動時にプロファイリングセッションが自動的に開始され、SQL Serverエージェントジョブを使用して常時起動することができます。

この主な欠点は、プロファイラがパフォーマンスに重大な影響を与えることです。

拡張イベントセッション

コンセプトは、あなたが拡張イベントと呼ばれる新しいメカニズムを使用しますを除いて、実際にプロファイラセッションに非常によく似ています。

関連イベントがsql_statement_startingされ、プロファイラのように、あなたは(照会することができた)ファイルにデータを保存することができ、制限を設定し、フィルタなど

拡張イベントのパフォーマンスが通常よりもずっといいですプロファイラアクティブな拡張イベント・トラッキング・セッションを実行するとサーバー全体のパフォーマンスに与える影響はずっと小さくなります。

あなたはデータベース - > [セキュリティ]> [データベースの下で、また、SQL Serverレベルの監査を作成し、オブジェクトエクスプローラで(SSMSでは、データベース内の監査の仕様を作成することができます

SQL Serverの監査監査仕様

あなたは、SELECTを監査などを削除し、あなたがデータ(ファイル/イベントログを...)保存する場所を選択することができ、このことができます

希望

+0

これらのキャッチされたクエリのユーザーを確認することは可能ですか? – PNPTestovir

+1

私が言及した方法のいずれかでは、すべてのクエリが実行され、どのユーザーが実行されるかを取得します。キャッシュされたクエリはキャッシュされ、最初に実行したユーザーには参照されません。現時点でどのクエリが実行されているのかを確認することができますが、これはユーザーが求めるものではありませんでした。 –