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

问题描述 投票:0回答:9

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

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

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

ssms sql-server-express
9个回答
22
投票

使用 SQL Profiler 并使用过滤器来获取最昂贵的查询。


18
投票

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


15
投票

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

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

您可以使用 DBCC LOG 或 fn_dblog 命令或第三方日志阅读器(例如 ApexSQL Log)来完成此操作(请注意,该工具是有价格的)

现在,如果您计划审计将来要执行的语句,那么您可以使用 SQL Profiler 来捕获所有内容。


10
投票

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

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


4
投票

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

DBCC inputbuffer( spid# )

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

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

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

DBCC inputbuffer(64)

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

3
投票

如果您希望 SSMS 维护查询历史记录,请使用 SSMS 工具包插件

如果您想监视 SQL Server 当前正在运行的查询,请使用 SQL PROfiler,正如其他人已经建议的那样。


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'

0
投票

好吧,不要参与其中

we are not good to say this

© www.soinside.com 2019 - 2024. All rights reserved.