2009-06-05 5 views
1

사용하고보고하는 보고서에 시간이 오래 걸립니다. 나는 이것이 너무 길다고 느꼈고 이것에 대해 이전에 물었다. SQL 성능을 논의하는 다양한 웹 사이트를 오래 살펴 본 후에 그들은 모두 DBA가되는 자세를 취합니다. 그러나 나는 아니고 제 동료도 아닙니다 (DBA가 있다면이 문제가 없을 것입니다).SQL Server 2000의 쉬운 성능 메트릭

내가 원하는 것은 상위 10 개 정도의 실행 및 최악의 실행 스크립트를 반환하는 간단한 방법입니다. 나는 좋은 SET METRICS ON 스위치가 있기를 바랄 것이지만, 그렇다면 사이트가 프로필을 기록하는 것에 관해서는 가지 않을 것입니다.

내가하고 싶은 일은 성능을 더욱 떨어 뜨리고 성능 기록을 소리내는 것이 성능 저하 현상을 일으키는 것입니다.

+0

SQL Server 2008로 업그레이드 할 수 없으므로 불편을 끼쳐 드려 죄송합니다. Activity Monitor는 몇 가지 기준으로 상위 쿼리를 표시하므로 쿼리 및 실행 계획을 볼 수 있습니다. 보고서는 여러 가지 기준 등으로 최상위 쿼리, 테이블 및 인덱스에서 사용할 수 있습니다. –

답변

1

적어도 다음 옵션이 있습니다.

  • 잘못된 수행 쿼리의 계획을 SQL Analyzer에서보고 쿼리 최적화를 시도하십시오.
  • 조언을 제공하는 스크립트 (아래 참조)를 사용하면 만들 수있는 색인에 대한 SQLServer 통계를 분석 할 수 있습니다. 당신은 결국

을 소화 할 수있는 것보다 당신이

  • 를 쿼리를 빠르게하거나 더 많은 정보를 제공하는 redgate's SQL Response 같은 도구를 사용하는
  • 또는 제안 할 Database Engine Tuning Advisor를 사용 및/또는 인덱스를 생성, 자동 도구는 당신에게 먼 길을 가져다 줄 것입니다. 귀하의 경우에는 충분할 수도 있지만 자동화 된 도구로 쿼리를 다시 작성할 수 없다는 사실을 숙련 된 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 
    
  • +0

    이렇게하면 잘못된 개체와 관련하여 4 가지 오류가 발생합니다. 예 : "잘못된 개체 이름 'sys.dm_db_missing_index_details'." –

    +0

    dm_db_missing_index_groups는 SQL2005입니다. ( 업그레이드 기회가 있습니다.) –

    +0

    @ graham.reeds : 죄송 합니다만, 실제로 SQL2005입니다. –

    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; 
    

    역사적으로 쿼리의 소요 시간에 대한 기본적인 타이밍 정보를 제공합니다.

    +0

    내 여행에서 본 또 다른 쿼리와 비슷합니다. "행 16 : 'APPLY'근처의 구문이 잘못되었습니다." –

    +0

    내 잘못 ... CROSS APPLY가 SQL2005입니다. 나는 교차 결합으로 그것을 다시 쓸 수 없다면 나는 알 것이다 ... –