MSSQL 读书笔记 查询性能分析(二)
SqlServer
2015-07-12
2622
0
本篇介绍使用SET选项分析查询和阅读执行计划。
SET 会话选项
SQL Server把数据存储在页上(pages),页是SQL Server 数据库存储在磁盘上的一个物理单元。 一页 8192字节(8K)。一个页只能属于一个对象,比如表,索引,或者索引视图。每8个页被分为逻辑组,称为区(extent)。区是可以混合的,如果其中的页属于不同的对象。
我们只要记住一点,越低的磁盘I/O我们查询就越快。这意味着读取的页越少越好。
以下语句可以检查我们的页读取
DBCC DROPCLEANBUFFERS; --清除缓存 SET STATISTICS IO ON; --开启统计信息 SELECT * FROM Sales.Customers; SELECT * FROM Sales.Orders;结果如下:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
(91 row(s) affected) Table 'Customers'. Scan count 1, logical reads 5, physical reads 1, read-ahead reads 3, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(830 row(s) affected) Table 'Orders'. Scan count 1, logical reads 21, physical reads 1, read-ahead reads 19, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Scan count: 索引或表格扫描的数量 Logical reads: 读取数据缓存的页数量。这个数字可以让你评估表格的大小 Physical reads: 从磁盘上读取的页数量。这个数字比实际小。因为很多页都被缓存了。 Read-ahead reads: SQL Server预读的页数量。 Lob logical reads: 这个记录了 LOB(Large Object )对象的数据缓存读取页数。 LOB列类型包括 VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX), TEXT, NTEXT, IMAGE, XML, or large CLR data types, including the system CLR spatial types GEOMETRY and GEOGRAPHY。 Lob physical reads: LOB对象磁盘读取页的数量。 Lob read-ahead reads:SQL Server对LOB对象预读页的数量。
执行计划
执行计划可以分为评估计划和实际计划,其中评估计划不会真的执行SQL语句,某些情况下无法给你与实际计划相同的信息。比如你的查询语句中有很多临时表,SQL Server就没办法优化数据访问临时表,因为语句没执行,临时表根本不存在。另外一些动态SQL语句也没法优化,因为只有执行的时候才能清楚的知道。
我们可以通过UI界面来开启执行计划的显示 (CTRL+L和Ctrl+M) ,也可以使用命令
SET SHOWPLAN_TEXT and SET SHOWPLAN_ALL for estimated plans SET STATISTICS PROFILE for actual plans
显示XML
SET SHOWPLAN_XML for estimated plans SET STATISTICS XML for actual plans
图形的执行计划图标官方有详细说明:
Graphical Execution Plan Icons (SQL ServerManagement Studio)