测量TSQL语句的性能

豆豆网   技术应用频道   2008年01月16日    社区交流

内容摘要:你怎样确定你的应用程序执行的怎么样?你可以使用什么工具?每一个开发人员需要确定每一条应用程序TSQL语句是最优的。本篇文章将讲述关于怎样确定运行较慢的查询的一些不同方法,并提供给你一些小技巧用于在你反复修改每一个查询来试图改进性能的时候监控你的查询性能。

  I/O使用

  像其它的性能测量一样,也有一些方法显示一个TSQL 语句所使用的I/O数量。在SQL Server 中跟踪的有两个不同类型的I/O:逻辑IO和物理IO。逻辑I/O考虑从内存中的缓冲池进行处理的数据,因此叫做逻辑I/O。物理I/O是从SQL Server用来存储数据库的物理磁盘直接访问数据所关联的I/O。物理I/O是更加昂贵的I/O,意思是说它们花费更长的时间来处理。一般情况下I/O是最昂贵的单一操作,它影响一个TSQL语句的整个性能。所以当你调整你的查询时,你要将执行以生成一个结果集的逻辑I/O和物理I/O操作的数目降低到最小。

  一个显示某TSQL 语句或语句批处理文件所关联的I/O 数量的方法是使用“SET STATISTICS IO ON”语句打开I/O 统计信息收集过程。当你在连接时执行这条语句,你将输出用于解决你的TSQL 语句的I/O 数目。下面的例子是我使用“SET STASTISTICS IO ON”语句来显示解决一个对AdventureWorks数据库的简单查询所需要的I/O 数目:

测量TSQL语句的性能

  在这你可以看到我的SELECT 语句执行2 “logical reads”,和2 “physical reads”。现在当我第二次运行这个语句批处理时我会得到下面的输出:

测量TSQL语句的性能

  这里你将注意到第二次我执行我的TSQL SELECT语句时它只要求2 “logical reads”和0 “physical reads”,这是因为保持了这个查询的AdventureWorks 页面已经缓存在了缓冲池中。如果你进行重复测试试图改进你的查询性能,你需要确保你除去了因为你的查询已经存在于缓冲器缓存中而在页面请求时会发生的I/O计数差异。为了消除这个计数问题,你可以在运行每一个测试之前执行“DBCC DROPCLEANBUFFER”命令。这将使你的查询运行时具有一个干净的缓冲池而不必停止和重启SQL server。

  另一个跟踪查询I/O的方法是使用SQL Server Profiler。要这么做,只要在确定你的跟踪所要监控的事件和字段时确保你包含了I/O相关的字段。

  总结

  能够跟踪你不同查询的资源消耗情况是监控你的应用程序的一个关键之处。知道什么TSQL语句在使用最多的资源可以帮助你确定在优化你的应用程序时要关注什么。“sys.dm_exec_query_stats” DMV 帮助数据库管理员快速确定这些使用最多资源的TSQL语句。使用各种“SET”语句、系统变量和/或SQL Server Profiler 事件/字段可以帮助你测量你的问题TSQL语句的CPU、I/O和消耗时间。确定、测量和改进你的应用程序查询性能将帮助你优化你应用程序背后的代码。

来源:IT专家网    作者:戴羽    责编:豆豆技术应用

正在加载评论...