This website requires JavaScript.

MSSQL 读书笔记 查询性能分析(二)

本篇介绍使用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)

0条评论
avatar