使用
跟踪系统并进
行优化
Profiler
4
数据库应用与性能优化
SQL Server Profiler 记录数据库服务器中所发生活动的详细信息。可以配置 Profiler 以便用大量的可配置性能信息监视并记录在 SQL Server 中执行查询的一个或多个用户。可在 Profiler 中记录的性能信息有:I/O 统计信息、CPU 统计信息、锁定请求、T-SQL 和 RPC 统计信息、索引和表扫描、警告和引发的错误、数据库对象的创建/除去、连接/断开、存储过程操作、游标操作等等。有关 SQL Profiler 可记录的全部信息,可以在 SQL Server 联机说明书中搜索字符串“Profiler”。 为了便于理解SQL Server Profiler的作用,这里将以一个使用SQL Server Profiler进行完整跟踪并解决问题的案例来加以详细说明。基本步骤如下:
1.首先在SQL Server2005数据库系统中创建benet数据库,并在数据库中创建名为testtable的表。表结构如图4.1:
图4.1 testtable的表结构
2.向testtable数据库中输入10000条数据。在SQL Server的系统管理器中新建查询,并输入如下代码:
declare @counter int set @counter = 1 while (@counter <= 2000) begin
insert testtable (ckey1) values ('a') insert testtable (ckey1) values ('b') insert testtable (ckey1) values ('c') insert testtable (ckey1) values ('d') insert testtable (ckey1) values ('e') set @counter = @counter + 1 end
3.为已经插入数据的testtable表的nkey1列创建非聚集索引,为列ckey1创建聚集索引。如图4.2:
图4.2 分别为ID列创建索引
2
数据库应用与性能优化
5
4.启用SQL Server Profiler。从 SQL Server Enterprise Manager 菜单中选择 “工具”/SQL Server Profiler 启动 Profiler,按CTRL+N组合键新建Profiler跟踪,并为跟踪命名为new profiler,同时选择捕获到文件,并单击“运行”,如图4.3:
图4.3 设置Profiler的属性
5.在新建查询窗口中分别输入如下代码:
select ckey1,col2 from testtable where ckey1 = 'a' select nkey1,col2 from testtable where nkey1 = 5000
在获得查询结果后,可以停止SQL Server Profiler的跟踪过程。
6.从 Profiler 菜单中选择“工具”-“数据库引擎优化顾问”。已启动数据库引擎优化顾问向导。在引擎优化顾问中选择需要分析的数据库“benet”和需要分析的表“testtable”,同时选择需要分析的跟踪文件,单击“开始分析”,如图4.4所示:
图4.4 分析生成的跟踪文件
3
4
数据库应用与性能优化
7.在开始分析后,需要有一个过程,大概持续10-15分钟(视计算机配置而定)。如图4.5:
图4.5 数据库优化引擎分析过程
8.在分析完成后,将会看到没有任何优化的建议。从这里可以的出目前创建的索引是已经起到了提升数据库查询效率的作用了,不再需要进行任何优化。如图4.6和4.7所示
图4.6 优化引擎给出的优化建议
4
数据库应用与性能优化
图4.7 数据库优化引擎分析后得出的结果
5
这里要查询的数据为什么不再需要进行优化了呢?因为在前面用户已经为数据做了索引的操作。从数据的组成可以看出。ckey1 只有 5个唯一值,且每一个值都有 2,000 行。假定其中的一个示例查询 (select ckey1, col2 from testtable where ckey1 = 'a') 要求根据 ckey1 中的某个值对表进行检索,那么在 ckey1 列中创建聚集索引就可以起到提升查询效率的目的。第二个查询 (select nkey1, col2 from testtable where nkey1 = 5000) 根据列 nkey1 的值提取一行。Nkey1 唯一,且有 10,000 行,因此在该列创建非聚集的索引是可以提升查询效率的。
为了验证索引的创建是有必要的,这时候可以将nkey1的非聚集索引删除掉。再执行上述的的查询、跟踪和分析过程,可以得到如图4.8所示的结果。从图中可以很清楚的看出,数据库优化引擎会提出一条优化建议,要求用户在nkey1上创建新的索引,并同时给出创建索引的SQL语句。如图4.9:
图4.8 建议创建基于nkey1列的索引
图4.9 提示创建非聚集索引的SQL脚本
通过上述的操作,数据库管理员的工作量会大大减低。同时也降低了查询分析数据库的难度。SQL Server Profiler还具有通过跟踪发现硬件故障的功能。需要用户在使用中慢慢摸索。
5

