Hi,
我想在生产数据库上,查看当前数据库中:
1、运行占用IO最多的语句
2、被运行次数最多的语句
3、被重用最少的语句等可以帮助系统找出现性能最差的SQL的脚本。

解决方案 »

  1.   

    计算执行SQL语句查询时间 
    declare @d datetime 
    set @d=getdate() 
    select * from SYS_ColumnProperties select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 
      

  2.   

    1:跟踪
    2:查询动态管理试图 ( sys.dm_exec_query_stats)
      

  3.   

    跟踪了几能看到每一条执行的SQL,但每条语句的执行整体情况不清楚啊
      

  4.   


    -- 具体的字段含义参考 book online
    select [text],plan_generation_num,execution_count,max_physical_reads,max_logical_reads
    from sys.dm_exec_query_stats cross apply sys.dm_exec_sql_text(sql_handle)
      

  5.   

    1、运行占用IO最多的语句 
    看reads、writes
    2、被运行次数最多的语句 
    这个直接group by出来
    3、被重用最少的语句 
    这个也直接group by出来
      

  6.   


    --占用IO 最多的10条SQL
    SELECT TOP 10
        sql_text.text,
        sql_handle,
        plan_generation_num,
        execution_count,
        dbid,
        objectid,
        [Total_IO]=total_logical_reads+total_logical_writes
    FROM 
        sys.dm_exec_query_stats a
        cross apply sys.dm_exec_sql_text(sql_handle) AS sql_text
    ORDER BY total_logical_reads+total_logical_writes DESC--运行次数最多的10条SQL
    SELECT TOP 10
        sql_text.text,
        sql_handle,
        plan_generation_num,
        execution_count,
        dbid,
        objectid,
        [Total_IO]=total_logical_reads+total_logical_writes
    FROM 
        sys.dm_exec_query_stats a
        cross apply sys.dm_exec_sql_text(sql_handle) AS sql_text
    ORDER BY execution_count DESC--re-compile(重复编译)次数最多的10条SQL
    SELECT TOP 10
        sql_text.text,
        sql_handle,
        plan_generation_num,
        execution_count,
        dbid,
        objectid,
        [Total_IO]=total_logical_reads+total_logical_writes
    FROM 
        sys.dm_exec_query_stats a
        cross apply sys.dm_exec_sql_text(sql_handle) AS sql_text
    ORDER BY plan_generation_num DESC
      

  7.   

    在query_hash或query_plan_hash字段上分组聚合一下,效果更好哦:-)