跟踪清理工具
2008-04-02 10:38:47来源:互联网 阅读 ()
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
• |
消除 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 |
• |
将每个分析事务的代码减少至前 800 个字符。这允许我在多个长批处理的第一部分相同时,将他们视为同一事务类型(在按所述其他规则减少不太重要的元素之后)。 www.c hinaitpower.comlfrcxzbU |
• |
实现涉及到系统过程(例如 sp_cursoropen)的特别事务清理,这会将实际的执行查询作为文字参数传递至 SQL Server。对于这些情况,我从参数中提取了实际的查询,并丢弃 sp_cursoropen“包装”。 www.c hinaitpower.comlfrcxzbU |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: 如何查出前台正在发出的sql语句?
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash