如何在SQL Server Management Studio中查看已执行的查询?

时间:2010-03-15 18:52:56

标签: ssms sql-server-express

我是SQL Server Management Studio的新手,我想知道:有没有办法查看针对数据库运行了哪些查询?

在活动监视器中,有一个“最近昂贵的查询”报告,但我猜这不是所有的查询,因为我没有看到我运行的那些。

我正在运行SQL Server Express 2008 v 10.0.1600.22。

8 个答案:

答案 0 :(得分:19)

使用SQL Profiler并在其上使用过滤器以获取最昂贵的查询。

答案 1 :(得分:16)

使用活动监视器。它是顶部栏中的最后一个工具栏。它将显示“最近的昂贵查询”列表。您可以双击它们以查看执行计划等。

答案 2 :(得分:15)

如果要查看已执行的查询,则不支持默认方式执行此操作。您可以尝试一些变通方法但不希望找到所有变通方法。

您无法确定查看SELECT语句,但可以通过读取事务日志来查看其他DML和DDL命令(假设数据库处于完全恢复模式)。

您可以使用DBCC LOG或fn_dblog命令或第三方日志阅读器(如ApexSQL Log执行此操作(请注意该工具需要付费)

现在,如果计划审核将来要执行的语句,那么可以使用SQL事件探查器来捕获所有内容。

答案 3 :(得分:10)

您需要一个SQL分析器,它实际上在SQL Management Studio之外运行。如果您有一个付费版本的SQL Server(如开发人员版),它应作为另一个实用程序包含在其中。

如果您使用的是免费版(SQL Express),则可以下载免费软件配置文件。我使用过AnjLab的分析器(可在http://sites.google.com/site/sqlprofiler获得),它似乎运行良好。

答案 4 :(得分:4)

在正在运行的进程上从Management Studio运行以下查询:

DBCC inputbuffer( spid# )

这将返回当前正在针对所提供的SPID的数据库运行的SQL。请注意,您需要适当的权限才能运行此命令。

这比运行跟踪更好,因为它针对特定的SPID。您可以根据其CPUTime和DiskIO查看它是否已运行很长时间。

获取SPID 64详细信息的示例:

DBCC inputbuffer(64)

答案 5 :(得分:4)

     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...

答案 6 :(得分:3)

如果您希望SSMS维护查询历史记录,请使用SSMS Tool Pack add on

如果要监视SQL Server以查找当前正在运行的查询,请使用SQL PRofiler,就像其他人已经建议的那样。

答案 7 :(得分:3)

更清晰的查询,定位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'