SQL Server CPU时间和占用时间及优化
如何测试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时间和占用时间及优化的更多相关文章
- SQL Server Cpu 100% 的常见原因及优化
SQL Server Cpu 100% 的情况并不太常见,一般引起 SQL Server 产生性能问题的,都是 阻塞.连接数.IO 磁盘等.所以,一般SQL Server 的使用率都是比较低的.但是, ...
- Sql Server CPU 性能排查及优化的相关 Sql
Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...
- sql server 查看对象最后修改时间
sql server 查看对象最后修改时间,根据最后修改时间排序 存储过程 SELECT * FROM sys.all_objects WHERE TYPE='P' ORDER BY modify_ ...
- 修改SQL Server数据库表的创建时间最简单最直接有效的方法
说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一 ...
- Sql Server 查看存储过程最后修改时间
Sql Server 查看存储过程最后修改时间 select * from sys.procedures order by modify_date desc
- sql server小技巧-自动添加时间与主键自增长
在敲机房收费系统的时候,遇到添加时间的时候总是通过vb端调用当前时间再添到sql server中,期间还有时因为添加时间格式的不统一导致一些小问题,现在才知道原来是自己孤陋寡闻,sql server ...
- SQL Server 恢复数据库至指定时间点
发生数据库误删的情况下,及时恢复数据到误操作前的状态 工具/原料 SQL Server Management Studio 数据库完整备份及日志备份 必备条件 1 数据库右键属性,在选项中查看 ...
- [译]通过IIS Request Filtering解决SQL Server CPU高的问题
原文http://www.peterviola.com/solving-sql-server-high-cpu-with-iis-request-filtering/ Top Queries by T ...
- SQL SERVER——CPU问题定位与解决
CPU问题定位基本流程: 性能计数器诊断 主要用到的性能计数器 %Process Time 全实例 (主要用于查看当前服务器的CPU 情况) %Process Time sqlservr (主 ...
随机推荐
- 半透明AlphaBlend
AlphaBlend 函数功能:该函数用来显示透明或半透明像素的位图. 函数原型: BOOL AlphaBlend( HDC hdcDest, // handle to destination DC ...
- 234. Palindrome Linked List【Easy】【判断链表是否回文】
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- EL使用技巧
☞控制页面元素显示与否 实现效果: 实现方案: ...... <div style="display:${empty param.hideTitle ? 'auto' : 'none' ...
- 每日一刷(2018多校水题+2016icpc水题)
11.9 线段树 http://acm.hdu.edu.cn/showproblem.php?pid=6315 求逆序对个数 http://acm.hdu.edu.cn/showproblem.php ...
- Queries for Number of Palindromes (区间DP)
Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabytes ...
- 发现一个FreeSWITCH bug
在研究FreeSWITCH视频会议的混屏问题时候发现一个bug. 已提交jira. 附上代码,问题很明显,不解释 =========================================== ...
- Spring和依赖注入的价值
javaeye上看到有帖子,置疑spring和依赖注入的价值,回复内容整理如下: 依赖注入对设计有利,而spring则促进了依赖注入的使用. 如果业务处理类,它所使用的倚赖,都是依靠在这个类内部实现或 ...
- 【51Nod 1239】欧拉函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 还是模板题. 杜教筛:\[S(n)=\frac{n(n+1)}{2 ...
- AC自动机专题总结
最近学习了AC自动机,做了notonlysuccess大牛里面的题,也该来个总结了. AC自动机(Aho-Corasick Automaton)在1975年产生于贝尔实验室,是著名的多模匹配算法之一. ...
- AGC 026 C - String Coloring
题面在这里! 比较简单的折半搜索,推一下hash函数,要求正反最后相等就行了. #include<bits/stdc++.h> #define ll unsigned long long ...