2008-11-03 2 views
62

sql2k8의 활동 모니터를 통해 가장 비싼 쿼리를 볼 수 있습니다. 좋아요. 근사하지만,이 정보를 기록하거나 쿼리 분석기를 통해이 정보를 얻을 수있는 방법이 있습니까? SQL 관리 콘솔을 열어 두지 않고 활동 모니터 대시 보드를보고 싶습니다.가장 비싼 검색어를 기록하고 찾을 수있는 방법은 무엇입니까?

내가 쿼리가 잘못 작성된되는 파악하려는

은/스키마는 제대로, 어떤 도움 등

감사 힙을 설계!

답변

60
  1. (SSMS에서 도구 메뉴)를 사용하여 SQL Server 프로파일 러는 이러한 이벤트를 기록 추적을 만들 수 있습니다. 특정 Db에 대한 것이거나 DatabaseID 열을 포함하고 DB (SELECT DB_ID('dbname'))에 필터를 설정하는 경우 특정 데이터베이스 또는 전체 서버에 대한 것인지 여부를 지정하지 않았습니다. 논리 읽기 데이터 열이 각 이벤트에 포함되어 있는지 확인하십시오. 파일에 기록하도록 추적을 설정하십시오. 백그라운드에서이 추적을 무인으로 두려면 여유 공간이 충분한 경우 최대 추적 파일 크기를 500MB 또는 1GB로 설정하는 것이 좋습니다 (모든 활동이 서버에 얼마나 많은지에 따라 다릅니다. 당신은 그것을 빨아 봐야 할 것이다).

  2. 잠시 추적을 시작한 다음 일시 중지하십시오. 파일 -> 내보내기 -> 스크립트 추적 정의로 이동하여 DB 버전을 선택하고 파일에 저장하십시오. 이제 프로파일 러 GUI를 실행하는 것보다 오버 헤드가 훨씬 적은 추적을 생성하는 sql 스크립트가 있습니다. 이 스크립트를 실행하면 추적 ID (일반적으로 @ID=2)가 출력됩니다. 이것을 메모하십시오.

  3. 당신이 추적 파일 (.trc입니다) (추적 중 하나가 인해 최대 파일 크기에 도달하기 완료 또는

    EXEC의 sp_trace_setstatus의 @ID를 사용하여 실행 추적을 중지, 0
    EXEC의 sp_trace_setstatus이 있으면 @ID 2

당신은 프로파일 러로 추적을로드 할 수 있습니다, 또는 ClearTrace (매우 편리합니다)를 사용하거나과 같이 테이블에로드 :

SELECT * INTO TraceTable 
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default) 
,

은 그럼 당신은 이곳과 같은 데이터를 집계하는 쿼리를 실행할 수 있습니다 당신은 비용이 많이 드는 쿼리를 식별 한 후에

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000)) 
,SUM(Duration) AS DurationTotal 
,SUM(CPU) AS CPUTotal 
,SUM(Reads) AS ReadsTotal 
,SUM(Writes) AS WritesTotal 
FROM TraceTable 
GROUP BY EventClass, CAST(TextData as nvarchar(2000)) 
ORDER BY ReadsTotal DESC 

, 당신은 실제 실행 계획을 생성하고 검사 할 수 있습니다.

+0

건배! 내가 생각했던 것보다 더 복잡하게 들린다. 그러나 나는 그것을 확실히 준다 :) 환호! –

+0

플랫 아웃 - nov의 끝으로 갈 기회가 생길 것으로 기대하고 있습니다. 그런 다음 질문을 표시하거나 q를 더 묻습니다. –

2

SQL Server 프로파일 러가 필요한 작업을 수행합니까? 나는 2008 년을 아직 사용하지 않았기 때문에 도구가 아직 있는지는 모르겠다. 그러나 만약 당신이 특정 기준을 만족하는 쿼리를 기록하도록 추적을 설정할 수 있다고 생각한다면 (위의 CPU를 실행하고 구동시키는 것과 같은) 특정 임계 값).

우리는이 프로젝트에서이 도구를 사용했는데 성능이 좋지 않은 쿼리의 문제를 해결하는 데 도움을주었습니다.하지만 성능 상태 추적을 위해 일반 Windows 성능 카운터에 의존하면서 풀 타임으로 두지 마십시오.

RPC:Completed 
SP:Completed 
SP:StmtCompleted 
SQL:BatchCompleted 
SQL:StmtCompleted 
  • 당신은 표준 추적 템플릿으로 시작하고 가지 치기 할 수 있습니다

  • +0

    음 ... 프로파일 러 힙을 사용했지만 정보를 요약하지 않았습니다. 이것은 쿼리 유형별로 한 줄입니다. –

    4

    Microsoft는 이전에이 도구에 대해 들어 본 적이 없었지만 Microsoft는 가장 느린 쿼리를 포함하여 정확하게이 작업을 수행하는 훌륭한 보고서를 제공합니다. 그들의 Performance Dashboard Reports을 확인하십시오.

    SQL 2008과 호환되는지는 확실하지 않지만 체크 아웃 할 가치가 있습니다.

    2

    새 도구 인 Performance Studio이 서버 성능에 대한 개요를 제공하는 서버에서 자동으로 유지 관리되는 동적 관리 뷰를 기반으로하여 SQL Server 2008에 추가되었습니다. 체크 아웃 할 가치가있어.

    20

    다음 스크립트는 결과를 제공합니다.

    SELECT TOP 10 
    SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, 
    ((CASE qs.statement_end_offset 
    WHEN -1 THEN DATALENGTH(qt.TEXT) 
    ELSE qs.statement_end_offset 
    END - qs.statement_start_offset)/2)+1), 
    qs.execution_count, 
    qs.total_logical_reads, 
    qs.last_logical_reads, 
    qs.total_logical_writes, qs.last_logical_writes, 
    qs.total_worker_time, 
    qs.last_worker_time, 
    qs.total_elapsed_time/1000000 total_elapsed_time_in_S, 
    qs.last_elapsed_time/1000000 last_elapsed_time_in_S, 
    qs.last_execution_time,qp.query_plan 
    FROM sys.dm_exec_query_stats qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt 
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
    ORDER BY qs.total_logical_reads DESC 
    
    +1

    이것은 정확히 내가 원했던 것입니다. 그것을 구제하는 직업을 쉽게 만들 수 있습니다. 감사. – Jbecwar

    +17

    여기가 여기에서 가져온 것입니까? => http://blog.sqlauthority.com/2010/05/14/sql-server-find-most-expensive-queries-using-dmv/ 그렇다면 그것을 언급하는 것이 더 좋은 스타일입니다 ... – YvesR

    관련 문제