Sql server 2008 在Management Studio中查询执行时间&;剖析器。它测量什么?

Sql server 2008 在Management Studio中查询执行时间&;剖析器。它测量什么?,sql-server-2008,profiling,performance,ssms,Sql Server 2008,Profiling,Performance,Ssms,我的生产SQL Server位于远程数据中心(web服务器位于同一数据中心)。在开发过程中,我们发现在本地开发SQL Server中执行一个特定视图需要很长时间(大约60-80秒),我们对此没有意见。它被提升到生产环境,当我从本地管理工作室对生产数据库(位于数据中心)运行同一查询时,我发现查询大约需要7分钟,运行时间为17秒(可在management studio的右下角找到)。当我运行探查器时,我看到执行该查询所需的时间为437101微秒,尽管它在management studio中显示为7:

我的生产SQL Server位于远程数据中心(web服务器位于同一数据中心)。在开发过程中,我们发现在本地开发SQL Server中执行一个特定视图需要很长时间(大约60-80秒),我们对此没有意见。它被提升到生产环境,当我从本地管理工作室对生产数据库(位于数据中心)运行同一查询时,我发现查询大约需要7分钟,运行时间为17秒(可在management studio的右下角找到)。当我运行探查器时,我看到执行该查询所需的时间为437101微秒,尽管它在management studio中显示为7:17,实际上是437101毫秒。我的DBA说,在prod中,视图只需60到80秒,尽管我看到的数据与profiler和management studio不同。有人能告诉我profiler和management studio中这些持续时间的含义吗

我的猜测:从发送最后一个请求字节到从服务器接收最后一个响应字节之间的持续时间。客户统计数据如下: 客户处理时间:90393 总执行时间:92221 服务器答复的等待时间:1828

我对探查器上的“持续时间”的最佳猜测是“SQL Server(优化引擎解析查询、生成查询计划或使用现有查询计划+从不同页面获取记录)生成结果集所花费的时间,该结果集不包括数据通过线路传输到客户端所花费的时间”

编辑:我发现这两个时间差不多(ManagementStudio与profiler)。它们与我在客户统计中看到的时间有什么关系


有人能更清楚地解释一下吗?

如果我正确理解了您的问题,您首先要问的是探查器报告的持续时间与SSMS中显示的统计数据之间的差异(在常规时间的右下角和/或通过设置统计时间)。除此之外,您似乎不相信生产DBA的评论,即视图正在约60秒的预期持续时间内执行

首先,从联机丛书中,SSMS将通过设置统计时间报告的静态数据:

“显示毫秒数 需要解析、编译和 执行每个语句。”

你很适合做这件事。对于Profiler中的持续时间,描述如下:

“事件的持续时间(以微秒为单位) 事件。”

从我所坐的位置来看,这两个函数在功能上应该是等价的(而且,我相信您已经注意到,如果您使用的是SQL 2005或更高版本,Profiler将在微秒内报告)。我之所以这样说,是因为本例中的“事件”(关于Profiler中的持续时间)是select的执行,其中包括向客户机的交付;这在两种情况下都是一致的

似乎您怀疑地理位置是远程执行查询时持续时间过长的罪魁祸首。很可能是这样。您可以通过在一个查询窗口中对视图执行select,然后生成另一个查询窗口并查看查询的等待类型来进行测试:

select
    a.session_id
    ,a.start_time
    ,a.status
    ,a.command
    ,db_name(a.database_id) as database_name
    ,a.blocking_session_id
    ,a.wait_type
    ,a.wait_time
    ,a.cpu_time
    ,a.total_elapsed_time
    ,b.text
from sys.dm_exec_requests a
    cross apply sys.dm_exec_sql_text(a.sql_handle) b
where a.session_id != @@spid;
我怀疑,如果地理位置是个问题,您可能会看到类似ASYNC_NETWORK_IO的东西作为等待类型——否则,请查看这会产生什么结果。如果您正在评测远程执行的查询,则持续时间将反映您在SSMS中看到的时间统计信息。但是,如果您正在使用探查器,并且发现在与SQL Server位于同一数据中心的某个web服务器上执行此查询的持续时间仍然需要7分钟,那么DBA就是一个大骗子:)。我会使用Profiler记录耗时超过1分钟的查询,尝试筛选视图,并取平均值,以查看性能是否达到目标


因为没有其他的答案发布,我担心我在这里偏离了底线——但是已经很晚了,而且我对这一点还不熟悉,所以我想我应该试一试

我一直在努力解决这个问题,直到我发现了这个

此外,如果您打开查询的属性选项卡,您可能会发现一些神奇的“已用时间”,这可能会给您一些执行时间。。。 希望它能帮助…

尝试以下方法:

DECLARE @time AS DATETIME = CURRENT_TIMESTAMP

-- Your Query

SELECT CAST(DATEDIFF(SECOND, @time, CURRENT_TIMESTAMP) AS VARCHAR)
    + ','
    + CAST(DATEDIFF(MICROSECOND, @time, CURRENT_TIMESTAMP) AS VARCHAR)
    AS 'Execution Time'

假设您在测试/开发和生产环境中拥有相似数量的数据,您的假设听起来是正确的。探查器和管理工作室大约同时展出(437101毫秒vs 7:17)