SQLSERVER收集语句运行的统计信息并进行分析
SQL Server 分析和编译时间:
SQL Server 执行时间:
复制代码 代码如下:
SET STATISTICS TIME ONSET STATISTICS TIME ON
CPU 时间 = 156 毫秒,占用时间 = 169 毫秒。
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
GO
(4 行受影响)
还是以刚才那个查询作为例子
复制代码 代码如下:
GO为了不影响其他测试,请运行下面的语句关闭SET STATISTICS TIME ON
SET STATISTICS TIME ON
SET STATISTICS PROFILE ON
这次比上次快很多。输出时间统计信息是:
SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
DBCC freeproccache
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 分析和编译时间:
GO
SQL Server 分析和编译时间:
除了结果集之外,SQLSERVER还会返回下面这两段信息
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
GO
WHERE [ProductID]=777
复制代码 代码如下:
对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间、执行时间、做了多少次磁盘读等。--清除buffer pool里的所有缓存的执行计划
GO
SET STATISTICS TIME ON
GO
这些信息对分析问题很有价值。
根据表格的统计信息分析出比较合适的执行计划,然后编译语句,最后执行语句
USE [AdventureWorks]
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
请先来看看SET STATISTICS TIME ON会返回什么信息。先运行语句:
如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信息。
CPU 时间 = 171 毫秒,占用时间 = 1903 毫秒。
4、SQLSERVER执行时间: 语句真正运行的时间。由于语句是第一次运行,SQLSERVER需要把数据从磁盘读到内存里,这里语句的运行发生了比较长的I/O等待。所以这里的CPU时间和占用时间差别就很大了,一个是171毫秒,而另一个是1903毫秒
SET STATISTICS IO ON
由于执行计划被重用,“SQL分析和编译时间” CPU时间是0,占用时间是0
CPU 时间 = 15 毫秒,占用时间 = 104 毫秒。
GO
这里的编译时间就不为0了。由于编译主要是CPU的运算,所以一般CPU时间和占用时间是差不多的。如果这里相差比较大,就有必要看看SQLSERVER在系统资源上有没有瓶颈了。
SET STATISTICS TIME OFF
SQL Server 分析和编译时间:
复制代码 代码如下:
--清除buffer pool里的所有缓存数据GO
--------------------------------------------------------------------------------
SQL Server 执行时间:
GO
复制代码 代码如下:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
3、分析和编译时间:这一步,就是语句的编译时间。由于语句运行之前清空了所有执行计划,SQLSERVER必须要对他编译。
WHERE [ProductID]=777
现在再做一遍语句,但是不清除任何缓存
这里他们是一个15毫秒,一个是104毫秒
SET STATISTICS IO ON
总的来讲,这条语句花了104+1903+186=2193毫秒,其中CPU时间为15+171=186毫秒。语句的主要时间应该是都花在了I/O等待上
--------------------------------------------------------------------------------
SQL Server 分析和编译时间:
这个开关能够输出语句做的物理读和逻辑读的数目。对分析语句的复杂度有很重要的作用
SQL Server 分析和编译时间:
大家知道SQLSERVER执行语句是分以下阶段:分析-》编译-》执行
--------------------------------------------------------------------------------
SET STATISTICS TIME OFF
DBCC DROPCLEANBUFFERS
1、CPU时间 :这个值的含义指的是在这一步,SQLSERVER所花的纯CPU时间是多少。也就是说,语句花了多少CPU资源
SET STATISTICS TIME OFF
2、占用时间 :此值指这一步一共用了多少时间。也就是说,这是语句运行的时间长短,有些动作会发生I/O操作,产生了I/O等待,或者是遇到阻塞、产生了阻塞等待。总之时间用掉了,但是没有用CPU资源。所以占用时间比CPU时间长是很正常的 ,但是CPU时间是语句在所有CPU上的时间总和。如果语句使用了多颗CPU,而其他等待几乎没有,那么CPU时间大于占用时间也是正常的
复制代码 代码如下:
这里省下运行时间1903-169=1734毫秒,从这里可以再次看出,缓存对语句执行性能起着至关重要的作用
由于数据已经缓存在内存里,不需要从磁盘上读取,SQL执行时间 CPU时间是156,占用时间这次和CPU时间非常接近,是169。
复制代码 代码如下:
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/mssql/2677.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
sql server 关于设置null的一
时间:2020-12-28
-
详解SQL游标的用法
时间:2020-12-27
-
vs code连接sql server数据库步
时间:2020-12-27
-
图书管理系统的sqlserver数
时间:2020-12-25
-
详解SQL 通配符
时间:2020-12-25
-
sql四大排名函数之ROW_NUM
时间:2020-12-25
-
SQLServer数据库处于恢复挂
时间:2020-12-24
-
Win10 64位安装个人版SQL20
时间:2020-12-24
热门文章
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
-
SQL Server数据库入门学习总结
时间:2020-12-10
-
使用SqlBulkCopy时应注意Sqlserver表中使用缺
时间:2020-12-09
