SQL Server监测查询性能
SQL Server提供了以下工具(SET选项)来支持查询的监测:
IO统计
TIME统计
PROFILER统计
XML统计
1. IO统计
当这个选项开启的时,对一批查询中的每一个数据对象访问的查询都有单独一行的输出(不进行数据访问的查询语句不会产生任何输出,比如PRINT、SELECT变量的值或调用系统的方法)
当IO统计选项启用时,会输出逻辑读的次数、物理读的次数、预读的次数和扫描计数。
启用IO统计:SET STATISTICS IO ON;
禁用IO统计:SET STATISTICS IO OFF;
逻辑读
指处理查询所需访问页的次数,对于任何给定的读取操作,数据缓存中的每一页都会被读取,所以如果查询是SELECT * FROM Tbl10 WHERE ID < 5时逻辑读也是10,因为这10页数据已经在缓存中了,因为数据缓存中的页来自磁盘,此值总是至少和物理读的值一样大,但通常比物理读的值大。
物理读
指从磁盘读取的页数,该值总是小于或等于逻辑读的值。
缓存命中率 = (逻辑读-物理读)/逻辑读
物理读的次数可以差别很大,第二次以及后续执行时物理读的次数会大幅减少,因为缓存在第一次执行时就完成了加载。
预读
值在处理某个查询时,运用预读机制读到缓存的页数。
扫描计数
显示了表被访问的次数
可以通过select * from sys.dm_exec_requests where session_id = @@SPID查询granted_query_memory的值。
IO统计优化示例:
创建示例表,表被设计成每一行占用一页。
IF OBJECT_ID('dbo.Tbl1000') IS NOT NULL DROP TABLE dbo.Tbl1000;
CREATE TABLE dbo.Tbl1000(
Id INT IDENTITY(1,1),
Val INT,
Fill CHAR(7000) NOT NULL DEFAULT REPLICATE('Fill',1750)
);
INSERT INTO dbo.Tbl1000(Val)
SELECT TOP(1000) 1+ROW_NUMBER()OVER(ORDER BY (SELECT 1))%100
FROM sys.all_columns A, sys.all_columns B, sys.all_columns C;
启用IO统计,执行查询:
SET STATISTICS IO ON;
GO SELECT * FROM Tbl1000 WHERE ID < 6
GO SET STATISTICS IO OFF;
GO
IO统计,表被扫描一次,逻辑读为1000,因为表一共有1000页。
(1000 row(s) affected)
Table 'Tbl10'. Scan count 1, logical reads 1000, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
由于表没有索引,所以做了一次全表扫描,创建一个聚集索引
CREATE CLUSTERED INDEX Tbl1000_Id ON Tbl1000(Id);
重新执行SELECT * FROM Tbl1000 WHERE ID < 6;
(5 row(s) affected)
Table 'Tbl1000'. Scan count 1, logical reads 9, physical reads 0, read-ahead reads 6, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
逻辑读为9,这说明添加合适的聚集索引减少了很大一部分的不必要读。
2. TIME统计
SET STATISTICS TIME ON
显示分析、编译和执行各语句所需的毫秒数。
下面的示例显示服务器的执行、分析和编译时间。
USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
下面是结果集:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms. (269 row(s) affected) SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 2 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server监测查询性能的更多相关文章
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
- Performance Monitor4:监控SQL Server的IO性能
SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...
- Sql Server参数化查询之where in和like实现详解
where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 string userIds = "1,2,3,4"; using (Sql ...
- 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参
转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...
- 【转】Sql Server参数化查询之where in和like实现详解
转载至:http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html 文章导读 拼SQL实现where in查询 使用CHARINDE ...
- SQL Server添加MDW性能监控报表(转载)
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...
- 优化SQL Server数据库查询方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...
- 转载 50种方法优化SQL Server数据库查询
原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...
- 【转载】Sql Server参数化查询之where in和like实现详解
文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where ...
随机推荐
- c/c++字符串处理大集合
rember this strncpy(a,b,5); a[5]='\0'; char a[10]; memset(a,'#',sizeof(a)); a[10]='\0'; 刚开始学C/C++时,一 ...
- CSS基础(01)
1. Css基础 1.1 CSS(层叠样式表 Multiple Styles) CSS 是 Cascading Style Sheets(层叠样式表)的简称. CSS 语言是一种标记语言,它不需要 ...
- C#多线程开发
1.进程与线程的区别 通俗的讲,进行就是任务管理器中进行列表中看到的正在运行的程序,它是一个动态的概念,活动的实体. 线程是程序执行流的最小单元,是线程中一个实体,是系统独立调度和分派CPU基本单位. ...
- [置顶] stax解析xml文档的6种方式
原文链接:http://blog.csdn.net/u011593278/article/details/9745271 stax解析xml文档的方式: 基于光标的查询: 基于迭代模型的查找: 基于过 ...
- windows 下实现函数打桩:拦截API方式
windows 下实现函数打桩:拦截API方式 近期由于工作须要,開始研究函数打桩的方法. 由于不想对project做过多的改动,于是放弃了使用Google gmock的想法. ...
- 2015 NOIP day2 t2 信息传递 tarjan
信息传递 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.luogu.org/problem/show?pid=2661 Descrip ...
- 1039. Course List for Student (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1039 题目: 1039. Course List for Student (25) 时间限制 2 ...
- Spring MVC 接收Json格式参数
今天做了一个关于表格排序的功能,可以通过右边的箭头做排序操作,每次操作需要通过Ajax将每条记录的Id数组作为参数去发送请求, 后台Spring MVC接到参数后作更改序号操作. 前端页面发送请求的代 ...
- Ping pong
Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- html笔记02:html,body { ……}
html,body { margin:0px; height:100%; } html元素可告知浏览器其自身是一个 HTML 文档.body 元素定义文档的主体.它包含文档的所有内容(比如文本.图像. ...