前面的推文我们掌握了SQL数据库监控与调优技术。今天给大家分享索引调优技术。后续文章都会系统分享干货,带大家从0到1学会性能测试。
01用DTA调校索引
Database Engine Tuning Advisor是一个物理数据库设计工具,它是建立在SQL Server 2000的Index Tuning Wizard的技术上,并取而代之,它接收形式为包含一组Select、delete、update语句的T-SQL脚本的工作负荷或SQL Profiler跟踪作为输入,而且会输出一个由对索引、索引的视图和统计进行创建、删除和划分的建议组成的T-SQL脚本,它还会给出性能改进的估计,DTA的结构图如图11-42所示
DTA可以对单个查询进行分析也可以对SQL Server Profiler Trace文件进行分析,分析后DTA会显示优化查询性能的建议,根据DTA提供的优化建议可以对查询语句进行优化,优化后再次对查询进行度量,直到达到性能要求为止。
对单个查询进行调校,包含两个步骤:
一是:统计查询执行期间的等待时间;
二是:使用DTA进行调校;
在开始调校之前,需要捕获开始度量,为了得到一致的结果,需要捕获一个冷时间和多个热时间并对这些热时间求平均值。冷时间是指SQL Server第一次运行一个查询所需要的时间,执行计划和数据不在缓存中,因此所有的工作必须从零开始,查询后续运行将会由于缓存的缘故快很多(已热身),这样更能够代表一个活动的系统,评估相对于平均热时间的性能收益将会提供一个繁忙系统上对性能收益的期望。
实例:在数据库people中创建people和boysnames两张表,代码如下:
CREATE DATABASE [people] ON PRIMARY
( NAME = N'people',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\people.mdf' ,
SIZE = 409600KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB )
LOG ON
( NAME = N'people_log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\people_log.ldf' ,
SIZE = 10240KB , MAXSIZE = 102400KB , FILEGROWTH = 10240KB )
GO
CREATE TABLE people
(
personId UNIQUEIDENTIFIER DEFAULT newsequentialid(),
firstname VARCHAR(80) not null,
lastname VARCHAR(80) not null,
dob DATETIME not null,
dod DATETIME null,
sex CHAR(1) not null
)
go
CREATE TABLE boysnames
(
ID INT IDENTITY(0,1) not null,
[name] VARCHAR(80) not null
)
Go
分别为这两张表插入10000条记录,代码如下:
declare @i int
set @i=1
while @i <10000
begin
insert into people values(@i,'abc','123','1')
set @i=@i+1
end
declare @i int
set @i=1
while @i <10000
begin
insert into boy