SQL Server 2000的简易性能指标

时间:2009-06-05 11:18:13

标签: performance sql-server-2000 metrics

我使用(和更新)的报告需要很长时间(有些需要数小时)。我觉得这太久了,以前就此问过。在深入研究讨论SQL性能的各种网站之后,他们都采取了DBA的立场。但是我不是,也不是我的同事(我想如果我们有DBA那么我们就不会有这个问题了。)

我想要的是一种简单的方法来返回前10个左右的大多数运行和最差的脚本。我希望有一个很好的SET METRICS ON开关,但我想如果是这样的话那么这些网站将不会继续关于录制配置文件。

我要做的最后一件事就是让性能进一步降低,录制个人资料听起来就像是性能杀手。

2 个答案:

答案 0 :(得分:1)

您至少有以下选项。

  • 查看SQL Analyzer中效果不佳的查询计划并尝试对其进行优化,然后通过查询进行查询。
  • 或使用脚本(见下文)通过分析SQLServer关于您可以创建哪些索引的统计信息来为您提供建议
  • 或使用Database Engine Tuning Advisor为您建议和/或创建索引以加快查询速度
  • 或使用redgate's SQL Response之类的工具为您提供比消化更多的信息

最后,自动化工具将为您提供很长的路要走。在您的情况下甚至可能已足够,但请记住,没有自动化工具能够胜过熟练的DBA,因为自动化工具无法重写您的查询。


SET CONCAT_NULL_YIELDS_NULL OFF
--Joining the views gives a nice picture of what indexes 
--would help and how much they would help
SELECT 
  'CREATE INDEX IX_' + UPPER(REPLACE(REPLACE(COALESCE(equality_columns, inequality_columns), '[', ''), ']', ''))
    + ' ON ' + d.statement + '(' + COALESCE(equality_columns, inequality_columns) 
  + CASE WHEN equality_columns IS NOT NULL THEN  
        CASE WHEN inequality_columns IS NOT NULL THEN ', ' + inequality_columns 
        END END 
    + ')' + CASE WHEN included_columns IS NOT NULL THEN ' INCLUDE (' + included_columns + ')' END
  , object_name(object_id)
  , d.*
  , s.*
FROM    sys.dm_db_missing_index_details d 
      LEFT OUTER JOIN sys.dm_db_missing_index_groups g ON   d.index_handle = g.index_handle
      LEFT OUTER JOIN sys.dm_db_missing_index_group_stats s ON  g.index_group_handle = s.group_handle
WHERE   database_id = db_id()
ORDER BY avg_total_user_cost DESC

答案 1 :(得分:1)

您应该能够通过sys.dm_exec_query_stats表,该表保存有关数据库的所有查询的信息。

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 last_execution_time,total_elapsed_time / execution_count DESC;

为您提供有关历史记录查询花费时间的基本时间信息。