技术开发 频道

测量TSQL语句的性能


【IT168技术文档】

  你怎样确定你的应用程序执行的怎么样?你可以使用什么工具?每一个开发人员需要确定每一条应用程序TSQL语句是最优的。通过调整每一个查询你可以确定你的应用程序运行得尽可能的高效。你使用开发环境时更容易对应用程序的代码进行修改。一旦你的代码已成为了产品那么要做修改以优化你的代码就可能需要很长的时间,或甚至是不可能的。这就是为什么你需要在应用程序开发过程中定期检查你的应用程序代码的执行情况。本篇文章将讲述关于怎样确定运行较慢的查询的一些不同方法,并提供给你一些小技巧用于在你反复修改每一个查询来试图改进性能的时候监控你的查询性能。

  怎样确定运行较慢的查询

  有了SQL Server 2005你就有了两个不同的选择。第一个选择,就是在其它SQL Server版本中也可用的SQL Server Profiler。而使用SQL Server 2005你就有了“sys.dm_exec_query_stats” DMV。让我们看一下这两个选择怎样用来确定你的运行较慢的查询。

  SQL Server Profiler 是一个易于使用的GUI工具。Profiler 可以用来显示在一个SQL Server 实例上进行的CPU、I/O和SQL Server TSQL 语句的持续时间。为了使Profiler能够用于查找你运行较慢的查询,你需要创建和启动一个profiler跟踪。使用“新跟踪”项可以轻松地做到这一点。Profiler有一个“TSQL持续时间”模版,它可以用来查找你运行时间较长的查询。但是如果你想显示这些运行时间较长的查询所用的CPU和 I/O,你将需要创建你自己的Profiler跟踪,或者修改使用“TSQL持续时间”模版所选择的字段。你可以修改“TSQL持续时间”模版:点击“事件选择”标签,然后点击“CPU”,“读”,或“写字段下面的复选框来选择CPU和I/O。要查看更多的关于怎样使用SQL Server Profiler的信息请参考在线书籍。

  如果你有SQL Server 2005,你也可以使用“sys.dm_exec_query_stats” DMV 来确定运行时间较长的查询。这个DMV 可以用来返回缓存查询计划的统计信息。下面是一个关于怎样返回一些针对每一个缓存计划的不同性能测量的示例。
SELECT creation_time ,last_execution_time ,total_physical_reads ,total_logical_reads ,total_logical_writes , execution_count , total_worker_time , total_elapsed_time , total_elapsed_time / execution_count avg_elapsed_time ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st ORDER BY total_elapsed_time / execution_count DESC;
  我使用这个查询计算了平均实耗时间,然后制定输出,所以具有最差的平均实耗时间的查询显示在第一个。实耗时间是一个用于确定执行较差的查询的较好测量,因为这是处理一个查询所要花费的实际时钟时间。

  通过使用profiler 或DMV查询你可以基于持续时间/实耗时间来确定你的执行很差的查询。一旦你确定了执行较差的查询然后你就可以全力优化这些查询。通过优化较差的查询你将获得最好的性能和以最小代价来改进你的应用程序整个性能。

  帮助优化查询的工具

  当优化查询时你需要在每一次变更之后重复地检查性能信息。进行这项检查使你可以确定你的修改是否起到了改进作用或使你的查询性能更差了。在确定你的查询性能方面有三个有用的测量:实耗时间、I/O和CPU。让我们看看针对一个给定查询测量这三个中每一个的不同方法。

  实耗时间

  一个查询运行所花费的时间叫做实耗时间,也是大家所知道的时钟时间。很多东西会影响查询的实耗时间。实耗时间是测量一个查询执行的怎么样的极好的基准测量,因为它测量了一个用户在SQL server 处理一个特定的查询时要等多久。那么你有哪些不同的方法来测量一个TSQL语句的实耗时间呢?

  你可以使用的第一个方法是当执行一个批处理文件时“实耗时间”会在SQL Server管理套件的查询窗口中显示出来。
0
相关文章