上次执行的特定数据库查询


72

我知道如何使用SSMS中的以下SQL获取最后执行的查询-

SELECT deqs.last_execution_time AS [Time], dest.text AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

但是我想为特定的数据库找到它们。如果不需要,我不想使用SQL Profiler。另外,我认为SQL Profiler不允许我查看在未启用概要分析的情况下已经运行的查询。我需要从SSMS执行此操作。


10
它不会总是被填充,因此您可能会错过东西,但是作为开始,您可以过滤WHERE dest.dbid = DB_ID('your database name')。如果要追溯前进,不,除非你想让你的监控,实际上促成了性能问题使用探查。使用服务器端跟踪,扩展事件或第三方工具(我知道一个很好的工具)。
亚伦·伯特兰

当执行时,它不会得到我的任何一行。我还有其他几个数据库。没有任何显示。也许不是DB_ID('数据库名称').. ID是否不同?
Mukus,2012年

上面的查询无法确定所有执行的操作,因为我什至看不到数据库的某些数据库ID。我用了'SELECT name,database_id FROM sys.databases;'
Mukus 2012年

@AaronBertrand为什么不发表评论作为答案?您在以下答案之前六个月回答了。我会接受你的。
Mukus 2014年

如何使用server-side traceextended events??记录查询执行数据 能否请您简要介绍一下。
Moumit 2014年

Answers:


86

这对我来说可以在实例中的任何数据库上查找查询。我是该实例的sysadmin(请检查您的权限):

SELECT deqs.last_execution_time AS [Time], dest.text AS [Query], dest.*
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE dest.dbid = DB_ID('msdb')
ORDER BY deqs.last_execution_time DESC

这是与Aaron Bertrand提供的答案相同的,但并未放在答案中。


10
这将查询过程高速缓存并仅显示CREATE PROCEDURE or FUNCTION语句,这很有用,但并不完整。见dba.stackexchange.com/questions/35703/...
Vojtěch多纳尔

2
但这向我显示了没有提交值的原始sql字符串。有没有办法显示提供给已执行查询的参数值?
MAF博士2015年

im sysadmin。我从C#sqldataadapter执行查询。但是没有结果吗?
bh_earth0

1
哪个数据库用于执行查询?大师,msdb,tempdb吗?
Kiquenet

这部作品在SQL Server 2012中,而不是在SQL Server 2008中
Endri
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.