sql-server-2008 - Management Studio 和分析器中的查询执行时间。它测量什么?

标签 sql-server-2008 profiling performance ssms

我的生产 SQL Server 位于远程数据中心(并且 Web 服务器位于同一数据中心)。在开发过程中,我们观察到在我们本地开发的 SQL Server 中执行一个特定 View 需要很长时间(大约 60-80 秒),我们对此没有意见。它被提升到生产,当我在生产数据库上运行相同的查询时(位于数据中心)从我的本地管理工作室,我看到查询大约需要 7 分钟 17 秒才能运行(在管理工作室的右下角可用)。当我运行分析器时,我看到所用的时间执行该查询需要 437101 微秒毫秒,尽管它在管理工作室中显示为 7:17。 ,实际上大约是 437101 毫秒。我的 DBA 说在 prod 中, View 只需要大约 60 到 80 秒,尽管我看到 profiler 和 management studio 的不同数字。有人能告诉我这些持续时间在 Profiler 和 management studio 中意味着什么吗?

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

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

编辑:我发现这两个时间大致相同(管理工作室与分析器)。它们与我在客户统计中看到的时间有何关系?

有人可以对这些进行更多说明吗?

最佳答案

如果我正确理解您的问题,您首先会质疑 Profiler 报告的 Duration 与 SSMS 中显示的统计数据之间的差异(一般时间的右下角和/或 SET STATISTICS TIME ON)。除此之外,您似乎不相信生产 DBA 的评论,即 View 在大约 60 秒的预期持续时间内执行。

首先,从 Books Online 中,SSMS 将通过 SET STATISTICS TIME ON 报告的统计信息:

"Displays the number of milliseconds required to parse, compile, and execute each statement."



你是对的。至于 Profiler 中的 Duration,则描述为:

"The duration (in microseconds) of the event."



从我坐的位置来看,这两个在功能上应该是等效的(而且,我相信您已经注意到,如果您使用 SQL 2005 或更高版本,Profiler 会以微秒为单位报告)。我这样说是因为这种情况下的“事件”(关于 Profiler 中的 Duration)是选择的执行,包括传递给客户端;这在两种情况下都是一致的。

您似乎怀疑地理位置是远程执行查询时持续时间长的罪魁祸首。这很可能是。您可以通过在一个查询窗口中的 View 上执行选择然后生成另一个查询窗口并查看查询的等待类型来测试这一点:
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 这样的等待类型 - 否则,看看这是什么。如果您正在分析远程执行的查询,则持续时间将反射(reflect)您在 SSMS 中看到的时间统计信息。但是,如果您正在使用 Profiler 并发现从与 SQL Server 位于同一数据中心的其中一台 Web 服务器执行此查询的持续时间仍然需要 7 分钟,那么 DBA 就是一个大骗子:)。我会使用 Profiler 记录耗时超过 1 分钟的查询,尝试过滤您的 View 并取平均值以查看您是否达到了性能目标。

因为没有发布其他答案,我担心我在这里离基地很远 - 但是已经晚了而且我是新手,所以我想我会试一试!

关于sql-server-2008 - Management Studio 和分析器中的查询执行时间。它测量什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085864/

相关文章:

sql-server - 如何在不脱机的情况下对 SQL Server 数据库进行快照

c++ - 性能报告 (.vspx) 在 Visual Studio 2013 中未打开(显示损坏)

python - Django Rest Framework/Django 性能问题

sql - 批量删除(截断与删除)

java - 快速计算两个算术级数的交点

android - Android(模拟器)应用程序的性能调整/监控工具? (Java 的 VisualVm 等价物)

sql-server-2008 - 将 sql xml 数据类型转换为表

sql-server - 在 64 位 SQL Server 上运行 32 位程序集

sql-server-2008 - 来自 aspnet_regsql 的意外错误消息

go - 如何查看 runtime.futex 的来源?它只有 "System"作为父级