如何测试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. 按书上的例子,写了个长的go代码

    用于实现快速排序和冒泡排序的东东. 包括了蛮多东西的实现,输入输出,字符串处理等.... bubblesort.go package bubblesort func BubbleSort(values ...

  2. 转:libFuzzer Tutorial(libFuzzer教程)

    转:https://github.com/google/fuzzer-test-suite/blob/master/tutorial/libFuzzerTutorial.md 本文在Ubuntu16下 ...

  3. STL容器 -- Stack

    核心:后进后出, LIFO. 头文件: #include <stack> 常用的构造方法: stack<int> st1; //构造一个空的存放 int 型的栈 stack&l ...

  4. maven 打包可运行jar包(转)

    目录 1.前提 2.方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 3.方法二:使用maven-assembly-plugin插件打包 4.方法三 ...

  5. Bzoj1015/洛谷P1197 [JSOI2008]星球大战(并查集)

    题面 Bzoj 洛谷 题解 考虑离线做法,逆序处理,一个一个星球的加入.用并查集维护一下连通性就好了. 具体来说,先将被消灭的星球储存下来,先将没有被消灭的星球用并查集并在一起,这样做可以路径压缩,然 ...

  6. Kali Linux WPScan更新到2.9.3

    Kali Linux WPScan更新到2.9.3   WPScan是Kali Linux内置的一款Web漏洞扫描工具,专门扫描WordPress模版构建的网站.该工具最近更新到2.9.3.在新版本中 ...

  7. spring面试题 对DI , AOP概念的理解

    1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监 ...

  8. Codeforces Round #476 (Div. 2) [Thanks, Telegram!] ABCDE

    修仙场,没脑子,C边界判错一直在写mdzz..D根本没怎么想. 第二天起来想了想D这不是水题吗立马A了.看了看E一开始想分配问题后来发觉想岔了,只需要每次都把树最后分配的点移到最前面就好了. A. P ...

  9. BZOJ 3594 [Scoi2014]方伯伯的玉米田(二维树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3594 [题目大意] 给出一个数列,选出k个区间使得区间内数全部加1, 求k次操作之后最 ...

  10. Problem B: 指针:调用自定义交换函数,完成5个浮点数从小到大排列

    #include<stdio.h> int swap(float *p1,float *p2) { float flag; if(*p1>*p2) { flag=*p1; *p1=* ...