sqlserver select 数值精度_SQL Server读懂语句运行 (二) SET STATISTICS IO ON

对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间、执行时间、做了多少次磁盘读等。

这些信息对分析问题很有价值。

1 SET STATISTICS TIME ON
2 SET STATISTICS IO ON
3 SET STATISTICS PROFILE ON

今天,看一下 SET STATISTICS IO ON的作用

先说结论,逻辑读取LOB逻辑读取是2个重要数值,在性能调优时,我们要重点围观。通常创建合适的索引或重写查询可以帮助我们彻底降低这2个值:

USE StatisticsDB
GO
SELECT * INTO SalesOrderDetail FROM AdventureWorks2008R2.Sales.SalesOrderDetail
GO
SET STATISTICS IO ON
DBCC dropcleanbuffers
DBCC freeproccache
GO
SELECT * FROM SalesOrderDetail
GO
SELECT * FROM SalesOrderDetail

17b5222cc72055cf02a469418e066e4b.png

Set Statistics IO的输出信息可以在消息TAB页里找到。同样的语句我们执行了2次,第一次是在清空缓存后执行,第2次没有。

我们来看下输出信息:

扫描计数(Scan count):

根据微软在线帮助,扫描计数是在任何方向都达到叶级别后启动的查询/扫描数,目的在于检索用于构造输出的最终数据集的所有值。

  • 如果使用的索引是主键的唯一索引或聚集索引并且您仅查找一个值,则扫描计数为 0。 例如 WHERE Primary_Key_Column = <value>。
  • 当您使用对非主键列定义的非唯一的聚集索引搜索一个值时,扫描计数为 1。 这是为了针对您正在搜索的键值检查重复值。 例如 WHERE Clustered_Index_Key_Column = <value>。
  • 当 N 为通过使用索引键定位键值后,在叶级别的左侧或右侧启动的不同查找/扫描数时,则扫描计数为 N。

这个数字告诉我们优化器所选择的计划,对这个对象的重复读取次数。很多人误以为这个是对整张表的读取次数,这是完全错误的。

我们通过一个例子来理解扫描计数。

CREATE TABLE ScanCount (Id INT IDENTITY(1,1),Value CHAR(1))
INSERT INTO ScanCount (Value ) VALUES ('A') ,('B'),('C'),('D'), ('E') , ('F')
CREATE UNIQUE CLUSTERED INDEX ix_ScanCount ON ScanCount(Id)SET STATISTICS IO ON
--Unique clustered Index used to search single value
SELECT * FROM ScanCount  WHERE Id =1
--Unique clustered Index used to search multiple value
SELECT * FROM ScanCount  WHERE Id IN(1,2,3,4,5,6)
--Unique clustered Index used to search multiple value
SELECT * FROM ScanCount  WHERE Id BETWEEN 1 AND 6

我们来看下上面3个查询语句的输出。

fc87af57c8ed2b1eb88ea2fb10313804.png

在第1个SELECT语句的输出里,扫描计数为0。这和MSDN里在线帮助“如果使用的索引是主键的唯一索引或聚集索引并且您仅查找一个值,则扫描计数为 0。”描述一致。因为它是唯一索引(聚集/非聚集索引),不需要在叶子层,进行进一步的向左或向右扫描,因为这里只有一个值来匹配。那也是在唯一索引上查找单一值,扫描计数为0的原因。扫描计数是1的话,会在非唯一索引(聚集或非聚集索引)上发生。

对于第2个SELECT语句,扫描计数是6.这是因为我们在找多个不同值。MSDN在线帮助对此有详细说明: “如果使用的索引是主键的唯一索引或非聚集索引,你在查找N个值,则扫描计数为N。”。

我们来看看执行计划里的SEEK谓语,将更清晰:

aaa3124d67c616b3433029bc6dabadef.png

即使只有一个where条件,还是会分裂成多个谓语。对于每个SEEK谓语,它会生成1个扫描数。

对于最后一个SELECT语句,扫描计数为1,因为MSDN在线帮助说了: “当 N 为通过使用索引键定位键值后,在叶级别的左侧或右侧启动的不同查找/扫描数时,则扫描计数为 N。” 在叶子节点聚集索引结构用来找到1值后,叶子层的向左扫描开始,直到找到值6。我们看下执行计划里的SEEK 谓语,将更清晰:

c6fae06ff2451cac965da37f2e514cd4.png

逻辑读取(logical Read):

从数据缓存读取的页数。数字越小,性能越好。在性能调优中这个数字非常重要。因为它不会随着执行又执行而改变,除非数据或查询语句有变动。在进行性能调优时,这个可以作为性能提升的重要参考。

从数据缓存读取的页数。页数越多,说明查询要访问的数据量就越大,内存消耗量越大,查询也就越昂贵。可以检查是否应该调整索引,减少扫描的次数,缩小扫描范围

物理读取(physical reads):

从磁盘读取的页数。这个会随着执行又执行而改变。大多数情况下,连续第2次的执行时,它的物理读取值为0(可以参考上面连续查询的物理读取数变化)。

b0fd09d6eb40e9acbbfd3a1e0ab06695.png

如果连续执行后,物理读取次数下降了,我们可以假定是服务器上内存使用配置的错误,或者服务器工作量饱和,有内存压力。你需要在服务器级别思考问题的原因。在查询调优时,这个数字不太重要,因为它一直在变,对于下降这个值,你不能对它做出太多控制。

预读 (read-ahead reads):

为进行查询而放入缓存的页数。这个值告诉我们物理页读取数,即SQL Server执行的,作为预读机制的一部分。在查询执行请求那些可能用到页之前,SQL Server把物理数据页读入缓存,用于完成接下来查询的页需要。

0891a461ee5f3df48538998b598b38b3.png

可以看到,物理读取是2次,预读是946次。这就是说,查询执行请求了2个页,并预读了946个页到数据缓存,SQL Server估计下次查询可能要用到这些页。和物理读取一样,这个值对在查询调优里并不重要。

lob 逻辑读取(lob logical reads):

从数据缓存读取的 text、ntext、image 或大值类型 (varchar(max)、nvarchar(max)、varbinary(max)) 页的数目。这个和逻辑读一样重要,我们要非常重视

lob 物理读取(lob physical reads):

从磁盘读取的 text、ntext、image 或大值类型页的数目。

lob 预读(lob read-ahead reads):

为进行查询而放入缓存的 text、ntext、image 或大值类型页的数目。

转自:

性能调优:理解Set Statistics IO输出​www.cnblogs.com
d49cc6ecae4d233e23065e09b2658fd0.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net webservice studio调用方法传参_springboot整合WebService简单版

一.什么是webservice这里给大家分享一下我们的专栏《Java 进阶集中营》&#xff0c;每天都会给大家分享一个最新的java技术内容&#xff0c;有优秀的技术讯息&#xff0c;也欢迎分享在我的专栏里。JAVA 进阶集中营​zhuanlan.zhihu.com二.springboot整合webservice 整合webserv…

如何用html5编写彩色同心圆,HTML5 canvas 同心圆动画

原创。产生的动画效果&#xff1a;* 生成文字渐变颜色随时间的变化。* 使得一组同心圆的取色&#xff0c;随时间而变化1.[图片] open_source.png2.[代码][JavaScript]代码var cnew Array("red","blue","cyan","darkGray","green&…

swiper如何防止冲突_冲突管理:化冲突为机会的8个谈话技巧,从此告别争吵和冷战...

书语人间&#xff1a;每天10分钟&#xff0c;读懂1本好书&#xff0c;点击文章右边的「关注」&#xff0c;一起成长大家好呀~今天&#xff0c;灵遥将继续为你带来《解决冲突的关键技巧&#xff1a;如何增加你的有效社交》一书的共读。上一篇里&#xff0c;我们读到了让聆听和谈…

spss非线性回归分析步骤_SPSS与简单线性回归分析

对数据进行简单线性回归分析常按照以下步骤&#xff1a;1根据研究目的确定因变量和自变量现研究某服装店销售额和客流量的关系&#xff0c;销售额为因变量&#xff0c;客流量为自变量&#xff0c;共计36条数据。2 判断有无异常值判断方法&#xff1a;⑴通过绘制散点图直观观察&…

通过OAuth 2.0和Okta构建具有安全的服务器到服务器通信的Spring Boot应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 大多数OAuth 2.0指南都围绕用户的上下文&#xff0c;即使用Google&#xff0c;Github…

springboot java获取版本号_深入实践Spring Boot 实战篇,大佬整理出的PDF文档

如何使用Spring Boot 本文章将会详细介绍如何使用Spring Boot。它覆盖了构建系统&#xff0c;自动配置和运行/部署选项等主题。我们也覆盖了一些Spring Boot最佳实践。尽管Spring Boot没有什么特别的(只是一个你能消费的库)&#xff0c;但仍有一些建议&#xff0c;如果你遵循的…

6 redis 编译失败_Centos7.8环境搭建Redis主从复制和哨兵模式

本节我们搭建Redis主从复制和哨兵模式集群&#xff0c;集群的好处是把数据分散不不同的服务器上&#xff0c;解决网站中的很多高并发&#xff0c;高负载等问题&#xff0c;很好的提高网站的性能&#xff0c;也能解决mysql的数据读写问题&#xff0c;所以我们搭建集群非常有必要…

springboot异步注解_Spring Boot 2 :Spring Boot 中的响应式编程和 WebFlux 入门

【小宅按】Spring 5.0 中发布了重量级组件 Webflux&#xff0c;拉起了响应式编程的规模使用序幕。WebFlux 使用的场景是异步非阻塞的&#xff0c;使用 Webflux 作为系统解决方案&#xff0c;在大多数场景下可以提高系统吞吐量。Spring Boot 2.0 是基于 Spring5 构建而成&#x…

结尾的单词_22个以“ez”结尾的西语单词,你掌握了吗?

22 palabras que terminan en -ez22个以“-ez”结尾的西语单词ntido → nitidez 清澈&#xff0c;透明lcido → lucidez 光亮&#xff1b;清楚plido → palidez 苍白&#xff1b;暗淡rpido → rapidez 迅速cido → acidez 酸性estrecho → estrechez 狭窄esbelto → esb…

python xlwt xlrd模块详解_python操作excel之xlrd、xlwt模块详解

python操作excel主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读excel&#xff0c;xlwt是写excel的库。 可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel. python读excel——xlrd 这个过程有几个比较麻烦的问题&#xff0c;比如读取日期、读合并单…

python应届生找工作在深圳_应届毕业程序员找工作,企业最看重你们这些地方

这篇文章来谈一下应届生找工作的问题&#xff0c;最近有很多在校大学生跟我咨询很多企业很多工作要求有工作经验&#xff0c;那这样没工作经验的人都去哪学经验&#xff0c;要求工作经验真的有必要吗&#xff1f;应届生毕业找工作&#xff0c;一直有一个困惑是什么&#xff0c;…

PHP密码问题陈婷代码_PHP实现登录注册

一、首先实现一个PHP的简单登录注册的话 我们要简单的与后端定义一下接口和传输数据的方式 并且我们要有一个phpStudy服务器。第一步&#xff1a;当我们点击注册按钮的时候数据库要接收到客户端请求的数据 第二步&#xff1a;接收到数据以后服务器要处理数据&#xff1a;1.确定…

在Spring Boot中使用Vaadin的简介

介绍 Vaadin的工作方式依赖于服务器端渲染&#xff0c;因此可以自然地集成到诸如Spring之类的框架中。 Vaadin的Spring集成已经存在了一段时间&#xff0c;并且提供了用于在Spring容器中配置和管理Vaadin的工具&#xff0c;如果您希望将Vaadin与Spring Boot结合使用&#xff0c…

excel转las文件_这3种Word、Excel格式不变的互转方法,实在太好用了

日常工作中用Word写总结、写报告&#xff0c;写分析&#xff0c;一定离不开数据支持。但在制作的过程中你一定碰到过这些问题&#xff1a;Excel里做的表格、图表&#xff0c;一复制到word就变的乱七八糟&#xff01;那么&#xff0c;有没有什么好的方法&#xff0c;即省时&…

stm32编码器正反转计数程序_光电编码器接线图分析

编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。光电编码器如果按信号原理来分类的话&#xff0c;可以分为增量型编码器和绝对型编码器。旋转编码器是一种光电式旋转测量装置&#xff0c;它将被测的角位移直接转换成数字信号…

jieba库词频统计_如何用python对《三国演义》、《红楼梦》等名著开展词云分析及字频统计、出场统计等工作。...

以下以《红楼梦》为例进行设计。在制作词云图及统计之前&#xff0c;需要下载python的几个库&#xff0c;wordcloud、jieba以及imageio等&#xff0c;我的操作系统为Windows10&#xff0c;IDE环境为idle&#xff0c;下载方式就直接搜索cmd&#xff0c;打开命令提示符窗口&#…

数学史思维导图_【学科活动】思维导图展风采,数学文化提素养——庆云县第四中学(北校区)四年级数学组活动小记...

思维无限 导我所想思维的火花跨越时空&#xff0c;照亮昨天、今天和明天。人类从茹毛饮血、采集狩猎到今天足不出户购遍全球&#xff0c;人工智能、大数据信息处理融入每个人的生活。这其中&#xff0c;最大的改变就是思维方式的改变。——题记思维导图又叫心智导图&#xff0c…

k2677场效应管参数引脚_共射极放大电路,场效应管放大电路,运算放大电路

电子技术、无线电维修及SMT电子制造工艺技术绝不是一门容易学好、短时间内就能够掌握的学科。这门学科所涉及的方方面面很多&#xff0c;各方面又相互联系&#xff0c;作为初学者&#xff0c;首先要在整体上了解、初步掌握它。无论是无线电爱好者还是维修技术人员&#xff0c;你…

加载类_JVM类加载详解

类的加载器概述类加载器是JVM执行类加载机制的前提。ClassLoader的作用&#xff1a;ClassLoader是Java的核心组件&#xff0c;所有的Class都是由ClassLoader进行加载的&#xff0c;ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部&#xff0c;转换为一个与目…

group by用法多个字段_select的用法

select的用法 --每个员工的所有信息 select * from emp; --每个人的部门编号&#xff0c;姓名&#xff0c;薪水 select empno, ename, sal from emp; --每个人的年薪 select ename, sal*12 from emp; --计算2*3的值 select 2*3 from emp; --计算2*3的值(dual) select 2*3 from …