如何测试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. ofbiz 之minilang解析

    编写一个simple method 首先我们需要对输入参数进行验证 ,判断参数是否完整. 1. 验证 1.1. Login-required :这是一个simple-method的属性,对是否需要登陆 ...

  2. bzoj 1407 扩展欧几里德

    思路:枚举洞穴个数,用扩展欧几里德暴力判断没两个人的周期. #include<bits/stdc++.h> #define LL long long #define fi first #d ...

  3. 编写简单的spring mvc程序,在tomcat上部署

    编写简单的spring mvc程序,在tomcat上部署 1 用java 配置spring mvc ,可以省去web.xmlpackage hello;import org.springframewo ...

  4. OSError: libgfortran.so.3: cannot open shared object file: No such file or directory

    运行程序遇到下面问题 OSError: libgfortran.so.3: cannot open shared object file: No such file or directory 安装yu ...

  5. pgAdmin III 是 postgresql 的管理工具

    ubuntu postgresql 的管理工具

  6. HDU 4891 The Great Pan

    模拟题. #include<map> #include<set> #include<ctime> #include<cmath> #include< ...

  7. java过滤敏感词汇

    前言 现在几乎所有的网站再发布带有文字信息的内容时都会要求过滤掉发动的.不健康的.影响社会安定的等敏感词汇,这里为大家提供了可以是现在这种功能的解决方案 第一种方式 创建敏感词汇文件:首先需要准备一个 ...

  8. 子查询在UPDATE 语句中的应用

    在UPDATE语句中可以在更新列表中以及WHERE语句使用子查询.下面演示一个将图书的出版日期全部更新为所有图书中的最新出版日期,SQL语句如下: UPDATE T_Book SET FYearPub ...

  9. VB程序打包方法之如何在发布安装之后不带源码

    很久之前,我发表了一片博客是VB程序如何打包,在那里面我总结了两个方法.有兴趣可以看看我的这篇博客http://blog.csdn.net/lu930124/article/details/88467 ...

  10. 【计算几何】【二分】【随机增量法】hdu6167 Missile Interception

    n个半径为R的圆是否有公共部分,等价于询问是否存在一个半径小于R的圆,能覆盖所有n个圆的圆心. 对这n个点求最小圆覆盖即可.从网上扒了个随机增量法的代码. 这样算上二分,复杂度就是nlogn了. #i ...