web-dev-qa-db-ja.com

SQL Server Management Studio内で実行されたクエリを表示するにはどうすればよいですか?

私はSQL Server Management Studioを初めて使用しますが、データベースに対して実行されたクエリを確認する方法はありますか?

アクティビティモニターには「最近の高価なクエリ」レポートがありますが、実行したクエリが表示されないため、すべてのクエリではないと推測しています。

SQL Server Express 2008 v 10.0.1600.22を実行しています。

27
bsh152s

SQL Profiler を使用し、フィルターを使用して、最も高価なクエリを取得します。

19

アクティビティモニターを使用します。これは、トップバーの最後のツールバーです。 「最近の高価なクエリ」のリストが表示されます。それらをダブルクリックして、実行計画などを表示できます。

17
John Saunders

すでに実行されているクエリを表示する場合、これを行うためのサポートされているデフォルトの方法はありません。いくつかの回避策を試すことができますが、すべてを見つけることは期待できません。

SELECTステートメントを確実に表示することはできませんが、トランザクションログを読み取ることで他のDMLおよびDDLコマンドを表示する方法があります(データベースが完全復旧モードであると想定)。

これは、DBCC LOGまたはfn_dblogコマンド、または ApexSQL Log などのサードパーティのログリーダーを使用して実行できます(ツールには価格が付属しています)

将来実行されるステートメントの監査を計画している場合、SQLプロファイラーを使用してすべてをキャッチできます。

15
Dwoolk

実際にはSQL Management Studioの外部で実行されるSQLプロファイラーが必要です。 SQL Serverの有料版(開発者版など)がある場合は、別のユーティリティとしてその中に含める必要があります。

無料版(SQL Express)を使用している場合は、ダウンロード可能なフリーウェアプロファイルがあります。 AnjLabのプロファイラー( http://sites.google.com/site/sqlprofiler で入手可能)を使用しましたが、うまく機能しているようです。

10
Mike Mooney

実行中のプロセスでManagement Studioから次のクエリを実行します。

DBCC inputbuffer( spid# )

これにより、指定されたSPIDのデータベースに対して現在実行されているSQLが返されます。このコマンドを実行するには適切な権限が必要であることに注意してください。

これは、特定のSPIDを対象とするため、トレースを実行するよりも優れています。 CPUTimeとDiskIOに基づいて、長時間実行されているかどうかを確認できます。

SPID 64の詳細を取得する例:

DBCC inputbuffer(64)
4
Shez
     SELECT *  FROM sys.dm_exec_sessions es
  INNER JOIN sys.dm_exec_connections ec
      ON es.session_id = ec.session_id
  CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) where es.session_id=65 under see text contain...
4
arnav

SSMSでクエリ履歴を保持する場合は、 SSMS Tool Packアドオン を使用します。

現在実行中のクエリについてSQL Serverを監視する場合は、他の既に提案されているようにSQL PRofilerを使用します。

3
Remus Rusanu

StudioのSQLクエリを対象とするより明確なクエリは次のとおりです。

SELECT text  FROM sys.dm_exec_sessions es
  INNER JOIN sys.dm_exec_connections ec
      ON es.session_id = ec.session_id
  CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) 
  where program_name like '%Query'
3
zhrist