日期:2014-04-02  浏览次数:20348 次

SQL Server 事件探查器对于协助 DBA 优化他们的 T-SQL 代码而言是真正的不可多得的财富。但是,过度的富有(这让我想起了《一千零一夜》中的阿拉丁)可能会令人不知所措。最近,在我首次尝试弄懂客户端服务器上按跟踪收集的大量数据时,感到了一种“孤立无助”的感觉。在该特定客户端上,联机事务处理系统每小时执行的数据库事务超过四百万个。这意味着,实际上捕获“SQL Batch Completed”事件的 30 分钟跟踪将生成长达两百万行的表格。当然,不利用一些自动化操作来处理这么多的记录是不可行的,即使选择耗时最长或成本最高的事务也未必会有助于标识瓶颈。毕竟,每分钟执行数千次耗时短的事务,可能会导致性能有所下降。[订阅者可能希望重新阅读 Linchi Shea 于 2002 年 06 月为其 Perl 代码撰写的文章“Distill SQL Server Log Files”。Linchi 的 PDF 和 Perl代码均包含在本文的下载中 — 编者注。]www.c hinaitpower.comlfrcxzbU

跟踪清理规则www.c hinaitpower.comlfrcxzbU

我的直觉告诉我使用聚合。但是,由于执行查询中的轻微变化,不用多长时间我就发现按事务类型分组和聚合跟踪文件并不凑效。每个存储过程调用都具有不同的参数,并且查询都是通过不同的搜索参数和稍许不同的 WHERE 子句条件来执行。某些事务包含注释或在其他相同的代码中具有不同数量的空格、制表符或换行符。某些查询使用关键字的同义词。www.c hinaitpower.comlfrcxzbU

为了解决大型跟踪分析的问题,我开发了一个跟踪清理进程,以除去所有跟踪记录的不太重要的细节,并允许按事务类型进行分组。例如,如果我的跟踪文件包含 50,000 条有关相同存储过程执行的记录(每条都带有不同的参数),那么,我的进程会按持续时间、CPU、读取和写入(所有的总计和平均数)对它们进行排列。这使我可以快速标识负责大部分整体系统利用的事务类型。www.c hinaitpower.comlfrcxzbU

跟踪清理的实现要求 1) 分析所有按跟踪记录的 T-SQL 语句,以及 2) 消除变量参数,如以下示例所示。假设此处所列的三个事务均是按跟踪捕获的。 www.c hinaitpower.comlfrcxzbU

1. Proc_A



123,



'alpha',



0x0a9fff8b



2. EXECUTE [Proc_A] -345, 'beta', null /*comment*/



3. EXEC    dbo.Proc_A  9876543, default    -- test



虽然所有三个事务都执行存储过程 Proc_A,但是执行、参数、换行符、制表符、空格以及注释中的变化使它们看起来非常不同。我的清理算法会将它们聚合至一个事务类型存储为“Proc_A%”的报告中。www.c hinaitpower.comlfrcxzbU

例如,为了识别这数个事务是否执行同样的存储过程,或将 INSERT 插入带有不同值的相同表格,该清理算法将执行以下操作:www.c hinaitpower.comlfrcxzbU

友情链接: 爱易网 云虚拟主机技术 云服务器技术 程序设计技术 开发网站 APP开发教程
Copyright © 2013-2024 爱易网页 当前在线:719人  网站在49秒内访问总人数:719人 当前 19.70%  粤ICP备18100884号-2

消除 EXEC 和 EXECUTE 关键字。 www.c hinaitpower.comlfrcxzbU

将所有的换行符和制表符替换为空格。 www.c hinaitpower.comlfrcxzbU

将多个空格视为一个整体。 www.c hinaitpower.comlfrcxzbU

消除任何数字常量、十六进制的值、文字字符串以及 NULL 关键字。 www.c hinaitpower.comlfrcxzbU

移除两种类型(“double-dash”和 /*...*/)的注释。 www.c hinaitpower.comlfrcxzbU

移除已消除的参数间的逗号。 www.c hinaitpower.comlfrcxzbU

删除“dbo”所有者名称,该名称也许会用于许多对象名称之前,并在多数情况中为默认值。 www.c hinaitpower.comlfrcxzbU