私はSQL Server Management Studioを初めて使用しますが、データベースに対して実行されたクエリを確認する方法はありますか?
アクティビティモニターには「最近の高価なクエリ」レポートがありますが、実行したクエリが表示されないため、すべてのクエリではないと推測しています。
SQL Server Express 2008 v 10.0.1600.22を実行しています。
SQL Profiler を使用し、フィルターを使用して、最も高価なクエリを取得します。
アクティビティモニターを使用します。これは、トップバーの最後のツールバーです。 「最近の高価なクエリ」のリストが表示されます。それらをダブルクリックして、実行計画などを表示できます。
すでに実行されているクエリを表示する場合、これを行うためのサポートされているデフォルトの方法はありません。いくつかの回避策を試すことができますが、すべてを見つけることは期待できません。
SELECTステートメントを確実に表示することはできませんが、トランザクションログを読み取ることで他のDMLおよびDDLコマンドを表示する方法があります(データベースが完全復旧モードであると想定)。
これは、DBCC LOGまたはfn_dblogコマンド、または ApexSQL Log などのサードパーティのログリーダーを使用して実行できます(ツールには価格が付属しています)
将来実行されるステートメントの監査を計画している場合、SQLプロファイラーを使用してすべてをキャッチできます。
実際にはSQL Management Studioの外部で実行されるSQLプロファイラーが必要です。 SQL Serverの有料版(開発者版など)がある場合は、別のユーティリティとしてその中に含める必要があります。
無料版(SQL Express)を使用している場合は、ダウンロード可能なフリーウェアプロファイルがあります。 AnjLabのプロファイラー( http://sites.google.com/site/sqlprofiler で入手可能)を使用しましたが、うまく機能しているようです。
実行中のプロセスでManagement Studioから次のクエリを実行します。
DBCC inputbuffer( spid# )
これにより、指定されたSPIDのデータベースに対して現在実行されているSQLが返されます。このコマンドを実行するには適切な権限が必要であることに注意してください。
これは、特定のSPIDを対象とするため、トレースを実行するよりも優れています。 CPUTimeとDiskIOに基づいて、長時間実行されているかどうかを確認できます。
SPID 64の詳細を取得する例:
DBCC inputbuffer(64)
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...
SSMSでクエリ履歴を保持する場合は、 SSMS Tool Packアドオン を使用します。
現在実行中のクエリについてSQL Serverを監視する場合は、他の既に提案されているようにSQL PRofilerを使用します。
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'