代码之家  ›  专栏  ›  技术社区  ›  ram

在managementstudio&profiler中查询执行时间。它测量什么?

  •  8
  • ram  · 技术社区  · 15 年前

    我的生产SQL Server位于远程数据中心(web服务器位于同一数据中心)。在开发过程中,我们观察到在本地开发SQL Server中执行一个特定视图需要很长时间(大约60-80秒),我们对此没有意见。该视图已升级为生产视图,当我从本地管理工作室对生产数据库(位于数据中心)运行同一查询时,我发现该查询大约需要7分钟,运行17秒(可从managementstudio的右下角获得),当我运行一个profiler时,我看到执行查询所用的时间是437101 微秒 毫秒, ,实际上是437101毫秒。我的DBA说在prod中,视图只需要60到80秒,尽管我看到的是profiler和managementstudio的不同数字。有人能告诉我profiler和managementstudio中这些持续时间是什么意思吗?

    我猜:从发送最后一个请求字节到从服务器接收最后一个响应字节之间的持续时间。客户统计如下: 客户端处理时间:90393 执行总量time:92221

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

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

    有人能给这些多点线索吗?

    3 回复  |  直到 15 年前
        1
  •  9
  •   Bradley Grainger    13 年前

    如果我对你的问题理解正确,你首先要问的是Profiler报告的持续时间和SSMS中显示的统计数据之间的差异(在右下角的general time和/或SET statistics time ON)。除此之外,您似乎不相信生产DBA的评论,即视图是在大约60秒的预期持续时间内执行的。

    首先,从Books Online,SSMS将通过设置时间统计报告的静态数据:

    解析、编译和

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

    “事件。”

    似乎您怀疑地理位置是远程执行查询时持续时间过长的罪魁祸首。很可能是这样。您可以通过在一个查询窗口中对视图执行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;
    

    从其中一个web服务器执行时

    因为没有其他的答案张贴,我担心我的方式离开基地在这里-但现在已经晚了,我是新的,所以我想我会给它一个机会!

        2
  •  0
  •   Ymagine First    12 年前

    我一直在挣扎,直到我找到这个。。。

    http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

    另外,如果你打开查询的属性标签,你可能会发现一些神奇的“经过的时间”,可能会给你一些执行时间。。。

        3
  •  0
  •   Eduardo Cuomo Sajjad Ali Khan    11 年前

    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'