测量查询性能:“执行计划查询成本”与“所用时间”

2024-02-27

我正在尝试确定两个不同查询的相对性能,并且有两种可用的方法来衡量它:
1. 运行两个查询并对每个查询计时
2. 运行两者并从实际执行计划中获取“查询成本”

这是我运行的用于计时查询的代码......

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1a
SELECT getDate() - @start AS Execution_Time
GO

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1b
SELECT getDate() - @start AS Execution_Time
GO

我得到的是以下内容:

Stored_Proc     Execution_Time     Query Cost (Relative To Batch)

test_1a         1.673 seconds      17%
test_1b         1.033 seconds      83%

执行时间的结果与查询成本的结果直接矛盾,但我很难确定“查询成本”的实际含义。我最好的猜测是它是读取/写入/CPU_Time/等的集合,所以我想我有几个问题:

  1. 是否有明确的来源来解释这项措施的含义?

  2. 人们还使用哪些其他“查询性能”指标,它们的相对优点是什么?


值得注意的是,这是一个中型 SQL Server,在 MS Server 2003 企业版上运行 MS SQL Server 2005,具有多个处理器和 100 多个并发用户。

EDIT:

经过一番麻烦之后,我设法获得了 SQL Server 上的 Profiler 访问权限,并且可以提供额外的信息(它支持与系统资源相关的查询成本,而不是执行时间本身......)

Stored_Proc    CPU      Reads    Writes   Duration   

test_1a        1313     3975     93       1386
test_1b        2297     49839    93       1207

令人印象深刻的是,使用更多的 CPU 和更多的读取花费的时间更少:)


分析器跟踪将其置于正确的位置。

  • 查询 A:1.3 秒 CPU,1.4 秒持续时间
  • 查询 B:2.3 秒 CPU,1.2 秒持续时间

查询 B 使用并行性:CPU > 持续时间 例如查询使用 2 个 CPU,平均每个 1.15 秒

查询 A 可能不是:CPU

这解释了相对于批处理的成本:较简单的非并行查询计划的成本为 17%。

优化器发现查询 B 的成本更高,并且会从并行性中受益,尽管这样做需要额外的努力。

但请记住,查询 B 使用 2 个 CPU 的 100%(因此 4 个 CPU 为 50%)持续一秒左右。查询 A 使用 100% 的单个 CPU 时间为 1.5 秒。

查询 A 的峰值较低,但代价是持续时间增加。 对于一个用户,谁在乎呢?有了100个,也许就会有所不同......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测量查询性能:“执行计划查询成本”与“所用时间” 的相关文章

  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • 我怎样才能知道oracle 9i中哪些值是数字

    我有这个包含 varchar 的数据库 我想知道哪些记录保存数值 我试过REGEXP COUNT和其他 但我在 9i 上运行 我认为这是针对 10g gt 我怎样才能实现这个目标 I tried select to number my co
  • SQL中的NULL和编程语言中的NULL之间的区别

    我刚刚遇到一个关于如何在 T SQL 可能还有其他形式的 SQL 中处理 NULL 的有趣场景 这个问题得到了很好的描述和回答这个问题 https stackoverflow com questions 2866714 how does a
  • 如何连接sql中具有相同值但在同一个表的不同列中的行?

    我正在尝试合并来自不同列的具有相同值的数据 并且仅停止显示没有连接值的记录 例如我有 ID TaxDecNo PrevTaxDec 1 5374 11135 2 9864 7394 3 11135 21784 4 7394 6872 5 2
  • requestAnimationFrame 垃圾回收

    我正在使用 Chrome 开发工具 v27 中的时间轴分析以下代码的内存使用情况
  • SQL 错误:“没有这样的表”

    我试图解决为什么我的代码为所有查询返回 null 的原因 最后发现 sql 查询什么也没有返回 我使用简约代码创建了一个新的 AIR 文档 s WindowedApplication
  • 使用包含和不包含的 Linq 查询

    我正在尝试从数据库中获取记录 它应该 getrecords 其中名称包含 searchKey 并且名称不在 exceptTerms 数组中 并以逗号分隔 我怎样才能在 Linq 中做到这一点 Rows from u in DB Client
  • 同时使用 GUID 和自动递增整数

    我一直在研究使用 GUID 作为数据库中的主键 到目前为止 利似乎大于弊 然而 我发现 GUID 可能不是我想要的 在我的应用程序中 用户应该能够根据用户友好的 ID 来识别对象 因此 例如 如果他们想要获取特定产品而不输入全名 则可以使用
  • SQL Server:从 OPENDATASOURCE 中删除

    这有效 SELECT FROM OPENDATASOURCE Microsoft ACE OLEDB 12 0 Data Source d JobFiles MyFile xlsx Extended properties Excel 8 0
  • Linq To SQL - 拥有和分组依据

    我下面这个查询工作正常 不过我想使用 Linq 来实现它 select u ID u NAME from Task t join BuildingUser bu ON bu ID BUILDING t ID BUILDING join Us
  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • T-SQL:用最新的非空值替换 NULL 的最佳方法?

    假设我有这张表 id value 1 5 2 4 3 1 4 NULL 5 NULL 6 14 7 NULL 8 0 9 3 10 NULL 我想编写一个查询来替换任何NULL值与表中最后一个不为空的值在那一栏里 我想要这个结果 id va
  • 通过 osql.exe 运行脚本时出现问题

    我尝试以这种格式运行我的软件的更新脚本 osql exe i path to script U 用户 P 密码 S sqlserver 位置 d 数据库名称 n b 大多数脚本的格式相同 并且都以 GO 结尾 其中很多都运行得很好 但随机脚
  • 检查两个“select”是否相等

    有没有办法检查两个 非平凡的 选择是否等效 最初我希望两个选择之间有形式上的等价 但是答案在证明 sql 查询等价性 https stackoverflow com questions 56895 proving sql query equ
  • 意外的查询结果

    为什么我从 sql server 得到以下结果 SELECT 12 C1 CONVERT int C2 CASE WHEN THEN equal ELSE not equal END C3 Sql Server Fiddle 演示 http
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • SQL返回两行之间的秒差

    这个问题与SQL Server有关 我有下表 id size batch code product code additiontime 1 91 55555 BigD Red 2017 05 15 13 00 00 2 91 55555 B
  • 数据库字段中的逗号分隔值

    我有一个产品表 该表中的每一行对应一个产品 并由唯一的 ID 标识 现在 每个产品都可以有多个与该产品关联的 代码 例如 Id Code 0001 IN ON ME OH 0002 ON VI AC ZO 0003 QA PS OO ME
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam

随机推荐

  • 为什么在此示例中并行版本比顺序版本慢?

    在过去的几天里 我学习了一些关于并行性的知识 并且遇到了this http msdn microsoft com en us library dd460703 aspx例子 我将它与顺序 for 循环并排放置 如下所示 private st
  • Jenkins 作业窗口批量执行比 cmd.exe 中执行慢 20 倍

    我刚刚在 Windows 2012 Server o 上安装了 Jenkins 2 46 2 它作为系统服务运行 我创建了一个执行 Windows 批处理 bat 脚本来构建代码项目的作业 此批处理会执行 2 个 mingw32 make
  • 如何按数字对文件进行排序?

    我正在处理目录中的一些文件 需要对文件进行数字排序 我发现了一些关于排序的例子 特别是使用lambda模式 在wiki python org http wiki python org moin HowTo Sorting 我把它放在一起 i
  • 为什么 html5 视频循环每次迭代都会创建请求

    I have 禁用缓存勾选已删除 但每次视频循环迭代仍发出请求 仅在 chrome 上 What Initiator Otherchrome 检查器网络部分的意思是什么 第一次从主机加载视频 但之后所有请求都从主机加载Other 每次迭代视
  • SAPUI5图标存储在哪里?

    我有一个基于 SAPUI5 的应用程序 在其中使用 SAP 站点下图标的 url 设置按钮图标https sapui5 hana ondemand com iconExplorer html https sapui5 hana ondema
  • 将父元素替换为其内容

    我正在尝试做与这个问题类似 相同的事情 如何在JavaScript中仅删除父元素而不删除其子元素 https stackoverflow com questions 170004 how to remove only the parent
  • React router dom:路由和路由器根本不工作

    我对反应相当陌生 并尝试使用react router dom进行重定向 我按照文档做了所有事情 但我的代码似乎不起作用 我收到一条关于找不到元素的错误 我不明白是什么原因造成的 另外 我现在只是尝试使用地址栏访问该页面 而不是使用任何按钮或
  • Jquery datepicker beforeShowDay 初始化后

    当我在初始化后设置 beforeShowDay 时 它不起作用 dater datepicker dater datepicker beforeShowDay renderCalendarCallback 当我第一次更改并在 ShowDay
  • Laravel 从公共目录中删除目录

    如何从公用文件夹中删除目录 现在我尝试这个 Storage deleteDirectory directory 但这看起来在存储文件夹中 您可以使用Illuminate Filesystem Filesystem为了这 Laravel 提供
  • 消除作为模板参数传递的重载成员函数指针的歧义

    我正在尝试重新创建观察者模式我可以完美地将参数转发给观察者的给定成员函数 如果我尝试传递一个地址成员函数其中有多次覆盖 它无法根据参数推导出正确的成员函数 include
  • python的跨平台usb模块?

    我有兴趣在 python 中使用 USB 设备进行一些跨平台工作 关于可以执行此类操作的模块有任何提示或建议吗 我浏览了 SF 和 googlecode 但运气不佳 thanks ct PyUSB http pyusb berlios de
  • QPainterPath 与直线的交点(通过 x 求 QPainterPath y)

    我有 QPainterPath 我需要通过 x 找到 QPainterPath 的 y 坐标 我在 QPainterPath 中找到了 intersected 方法 因此 我创建了新的 QPainterPath 它是具有 x 坐标的从路径边
  • 如何使用java获取weka中的最近邻居

    我一直在尝试使用与 weka 机器学习库一起使用的 Ibk 最近邻算法 我知道如何对实例进行分类 但我想实现协同过滤功能 因此我需要实际获取最接近感兴趣对象的实际对象列表 在 weka 中我实际上该如何使用它的 java API 来做到这一
  • 在Erlang中如何获取客户端的ip和端口?

    在下面的代码中 服务器正在侦听端口 2345 接受客户端的连接后 它返回 ok Socket start gt ok Listen gen tcp listen 2345 binary packet 4 reuseaddr true act
  • 如何在继续之前等待经过dispatch_async?

    我正在执行一系列的dispatch async 我只想在它们全部完成后更新UI 问题是dispatch async 中的方法在单独的线程中调用某些内容 因此它会在数据完全加载之前返回 并且在加载所有内容之前调用dispatch group
  • PHP-正则表达式检查字符串是否有中文字符

    我有字符串 str我想检查它的内容是否有汉字 true false str 赕就可消垻 只有当所有方块都被消垻时才可以过关 你能帮我么 谢谢 阿德里安 您可以使用 unicode 字符类http www regular expression
  • 求解三次方程以找到曲线上距某点最近的点

    Ok 我有一个射弹 其位置定义为 a x initialX initialDX time a y initialY initialDY time 0 5 gravtiy time 2 我希望能够预测该射弹将与我的环境中的哪些障碍物发生碰撞
  • 如果未在命令行上指定,则仅在 psql-script 中设置变量

    我想给option在命令行上为我的 psql 脚本指定一些变量 psql v myVar myValue 但是我发现无法在 sql 脚本本身中为这些变量提供默认值 语法 set MyVar defaultValue 覆盖值myValue在
  • 在python中将一维列表转换为具有给定行长度的二维列表[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以将一维列表转换为具有给定行长度的二维列表 假设我有一个这样的列表 myList 1 2 3 4 5 6 7 8 9 我想将上面的列表转换为 3 x 3 的表格 如下所示 myList 1
  • 测量查询性能:“执行计划查询成本”与“所用时间”

    我正在尝试确定两个不同查询的相对性能 并且有两种可用的方法来衡量它 1 运行两个查询并对每个查询计时2 运行两者并从实际执行计划中获取 查询成本 这是我运行的用于计时查询的代码 DBCC FREEPROCCACHE GO DBCC DROP