如何测试sql语句执行时间

在MSSQL Server中通过查看SQL语句执行所用的时间,来衡量SQL语句的性能。

set statistics profile on
set statistics io on
set statistics time on
你执行的SQL语句
go
set statistics profile off
set statistics io off
set statistics time off

执行完后点消息即可。
补充说明:
set statistics io检查查询所产生的读和写
set statistics time检查查询的运行时间
当运行一sql语句,在消息中会显示如:
SQL Server分析和编译时间:CPU时间=0毫秒,占用时间=10毫秒。SQL Server分析和编译时间:CPU时间=0毫秒,占用时间=1毫秒。
(0行受影响)表't_login_session'。扫描计数1,逻辑读取2次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。
(3行受影响)
SQL Server执行时间:CPU时间=0毫秒,占用时间=11毫秒。SQL Server分析和编译时间:CPU时间=0毫秒,占用时间=1毫秒。
SQL Server执行时间:CPU时间=0毫秒,占用时间=1毫秒。
SQL Server执行时间:CPU时间=0毫秒,占用时间=1毫秒。
表't_login_session'。扫描计数1,逻辑读取2次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。
这个扫描统计告诉我们扫描执行的数量,逻辑读显示的是从缓存中读出来的页面的数量,物理读显示的是从磁盘中读的页面的数量,预读显示了放置在缓存中用于将来读操作的页面数量。
通过看这些信息我们能得到些什么呢?
◆这个查询没有扫描整个表,在表中的数据量超过1.5M字节,而仅仅执行了53个逻辑I/O操作就得到了结果。这表明该查询发现了一个可用来计算结果的索引,并且扫描索引比扫描所有数据页花费更少的I/O操作。
◆索引页几乎全部放在数据缓存中,所以物理读的值是零。这是因为我们之前不久是在employees表上执行了其他查询,此时表和它的索引已经被缓存。你的查询开销可能有不同。
◆Microsoft
报告没有read-ahead(预读)活动。在这种情况下,数据和索引页已经被缓存起来了。当对一个很大的表作表扫描时,read-ahead可能会半路
插入进来,并且在你的查询用到它们之前缓存起所需的页。当sql
server(WINDOWS平台上强大的数据库平台)确定你的事务是顺序读取数据库页并且认为它能预测到你下一步将用到的页面时,Real-ahead
会自动打开。实际上一个独立的sql
server(WINDOWS平台上强大的数据库平台)连接在你的进程之前已开始运行并为它缓存数据页。(配置和优化read-ahead参数已超出这篇
文章的讨论范围。
在这个例子中,该查询已经尽可能有效率地执行了,不必进一步优化。
SQL Server分析和编译时间:CPU时间=0毫秒,占用时间=10毫秒。
sql

server(WINDOWS平台上强大的数据库平台)仅仅花费10毫秒时间去分析和编译该查询。花费0毫秒去执行它(在查询结果可看到)。其真实的意思
是这个查询所花费的时间太短以至不能计量。最后的信息报告了这个SET STATISTICS TIME
OFF命令相关的分析及编译花费了1毫秒。你可以忽略这个信息。
SQL Server执行时间:CPU时间=0毫秒,占用时间=1毫秒。
是我们关注的运行时间

意实耗时间和CPU时间是以毫秒显示。这个数字在你的电脑上可能会改变(但是不要尝试与我们的笔记本电脑比较你机器的性能,因为这不是代表性的指标)。而
且,每次你执行这个脚本,考虑到你的sql
server(WINDOWS平台上强大的数据库平台)还在处理一些其他事务,你得到的统计信息都可能有一点不同。

2.简易得出SQL语句的执行时间的方法
select语句前加:declare @d datetime set @d=getdate()并在select语句后加:select[语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

----------------------------


做优化的时候关注3个:CPU、逻辑读和逻辑写。CPU主要是编译和重编译,而逻辑写主要出在insert的时候临时表查出来的数据量太大,建议缩减不必
要的部分,举个例子,insert into #temp select id ,name from
xxx表,而这个只是中间结果,只有在最终展示的时候才需要展示name,这次你就不应该把name字段insert进去。
然后就是逻辑读,如果
内存足够,那么几乎不引起物理读(除非维护所需,比如Checkpoint、lazy
Writer等),联机丛书上说,就算是写操作很频繁的系统,其读操作一般都还是比写操作高5~10倍,所以往往性能优化的书籍名字都是查询优化,而不是
更改优化等等的名字。逻辑读主要在内存发生。努力降低逻辑读,查询的速度会有明显提升,其实我觉得逻辑读还是会有很高成本,每一次读(SQLServer
按页来读),都要8K的空间,内存足够的时候,就是8K内存,内存不够,就是8K物理读,也就是硬盘空间,逻辑读越高,搜索的内存面积越广。降低逻辑读的
主要手段我个人认为有两个:
1、改写写法,把不必要的部分不查出来或者真正需要的时候才查出来。
2、调整索引,索引合理,你需要搜索的页面就少。这也是为什么有索引的查询会很快,很多查询光调整索引和where的顺序,就能从小时降到秒级别。

SQL Server CPU时间和占用时间及优化的更多相关文章

  1. SQL Server Cpu 100% 的常见原因及优化

    SQL Server Cpu 100% 的情况并不太常见,一般引起 SQL Server 产生性能问题的,都是 阻塞.连接数.IO 磁盘等.所以,一般SQL Server 的使用率都是比较低的.但是, ...

  2. Sql Server CPU 性能排查及优化的相关 Sql

    Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...

  3. sql server 查看对象最后修改时间

    sql server 查看对象最后修改时间,根据最后修改时间排序 存储过程 SELECT * FROM sys.all_objects WHERE  TYPE='P' ORDER BY modify_ ...

  4. 修改SQL Server数据库表的创建时间最简单最直接有效的方法

    说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一 ...

  5. Sql Server 查看存储过程最后修改时间

    Sql Server 查看存储过程最后修改时间 select * from sys.procedures order by modify_date desc

  6. sql server小技巧-自动添加时间与主键自增长

    在敲机房收费系统的时候,遇到添加时间的时候总是通过vb端调用当前时间再添到sql server中,期间还有时因为添加时间格式的不统一导致一些小问题,现在才知道原来是自己孤陋寡闻,sql server ...

  7. SQL Server 恢复数据库至指定时间点

    发生数据库误删的情况下,及时恢复数据到误操作前的状态 工具/原料   SQL Server Management Studio 数据库完整备份及日志备份 必备条件   1 数据库右键属性,在选项中查看 ...

  8. [译]通过IIS Request Filtering解决SQL Server CPU高的问题

    原文http://www.peterviola.com/solving-sql-server-high-cpu-with-iis-request-filtering/ Top Queries by T ...

  9. SQL SERVER——CPU问题定位与解决

        CPU问题定位基本流程: 性能计数器诊断 主要用到的性能计数器 %Process Time 全实例 (主要用于查看当前服务器的CPU 情况) %Process Time sqlservr (主 ...

随机推荐

  1. javascript大神修炼记(4)——循环

    读者朋友们大家好,今天,我们继续接着前面的内容讲,前们我们已经讲了条件分支,今天我们就讲循环,顾名思义就是,重复执行相同的操作,正常循环是受程序控制的,不正常的情况,就会出现死循环,那就是我们的代码中 ...

  2. react native android 上传文件,Nodejs服务端获取上传的文件

    React Native端 使用react-native-image-picker 做出选择图片的操作,选择完成后,直接将图片Post至服务器,保存在服务器的某个地方(保存图片的路径需要公开显示),并 ...

  3. [js] 数据结构

    var dic = {"127.0.0.1":{"1440":[["keyx","keyy","clix&qu ...

  4. [thinkphp] 隐藏后台地址

    转自 http://document.thinkphp.cn/manual_3_2.html#module_deploy 如果不希望用户直接访问某个模块,可以设置模块映射(对后台的保护会比较实用). ...

  5. Hadoop中文编码乱码相关问题

    mapreduce程序处理GBK编码数据并输出GBK编码数据, hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,但是对于中文的输出window系统默认的是GBK,有些格式文件 ...

  6. git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法

    输 入 git add . 后出现 warning: LF will be replaced by CRLF in ...... The file will have its original lin ...

  7. putty对Linux上传下载文件或文件夹

    putty是一个开源软件,目前为止最新版本为0.70.对于文件或文件夹的上传下载,在Windows下它提供了pscp和psftp两个命令. (1).pscp pscp在命令提示符中使用,只要putty ...

  8. coreseek 段错误 (core dumped) 问题

    coreseek建立索引出现上面问题经过测试发现有下面几个原因: 1. 分词配置文件不存在  uni.lib 2. uni.lib配置文件格式不正确

  9. 【20181024T3】小C的宿舍【分治】

    题面 [错解] 好像就是\(|i-j|+|a_i - b_i|\)唉 嗯开始都加i-1,跑一遍,1~(i-1)加1,i~n 减1,线段树维护. 过样例了呢 哎大样例怎么多了那么多啊 跑了个暴力,多得更 ...

  10. BZOJ 4884 [Lydsy2017年5月月赛]太空猫(单调DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4884 [题目大意] 太空猫(SpaceCat)是一款画面精致.玩法有趣的休闲游戏, 你 ...