본문 바로가기

연구개발/DBA

SQL Profiler

728x90
반응형

1) 오래 실행되는 SQL 문 찾기
     - 권장되는 추적 이벤트 :
       TSQL SQL:StmtCompleted, 저장 프로시저 RPC:Completed, (TSQL SQL:BatchCompleted)
     - 정렬 기준 컬럼 : Duration
     - 순수하게 쿼리의 성능(프로시저 포함) 개선을 위해서는
       TSQL SQL:StmtCompleted, 저장 프로시저 RPC:Completed만 포함시키고 다른 이벤트 제거


2) 과도한 자원 사용자 찾기 (CPU와 I/O 자원)
   
  - 권장되는 추적 이벤트 : TSQL, SQL:BatchCompleted
     - 정렬 기준 컬럼 : CPU, Reads, Writes

3) 잠금 및 교착 상태 알아내기

     - 권장되는 추적 이벤트 :
       TSQL, SQL:BatchStarting : 동작하는 SQL 일괄 처리(batch)
       Locks, Lock:Deadlock : 교착 상태 자체의 이벤트
       Locks, Lock:Deadlock Chain : 교착 상태에 이르는 이벤트 순서
       Locks, Lock:Timeout

4) 성능
    
Execution Plan
    
Show Plan All

5) Stored Procedure (트랜잭션)
   
SP:CacheHit
    
SP:ExecContextHit
    SP:Recompile 
     (이 이벤트는 저장 프로시저가 실행 중 다시 컴파일 되었음을 나타냅니다. 
      Recompile 이벤트 수가 많은 경우 SQL Server가 쿼리를 실행할 때보다는 쿼리 컴파일에 리소스를 
      더 많이 사용하고 있음을 나타냅니다. 
SP:Recompile 이벤트가 많아 CPU 사용이 많아지는 경우 재 컴파일 
      횟수가 가장 많은 프로시저를 찾아 해결해야 합니다. )
    SP:Completed  
      (EXECUTE 명령으로 실행되는 동적 SQL 문은 "Dynamic SQL" 텍스트가 있는 SP:Completed 이벤트로 
      나타납니다. 
SP:Completed 이벤트를 확장하고 "Dynamic SQL" 텍스트가 있는지 확인해야 합니다. 
      이러한 이벤트가 많으면 EXECUTE 문 대신 
sp_executesql을 사용하여 응용 프로그램 성능을 향상시킬 수도
      있습니다.)

6) TSQL
   
Exec Prepared SQL
    
Prepare SQL
    
→ 응용 프로그램은 SQL 문을 한 번만 준비하고 여러 번 실행하는 것이 가장 좋습니다.
        
Exec Prepared SQL 이벤트의 수가 Prepare SQL 이벤트의 수보다 훨씬 많아야 합니다.(적어도 3~5배)
        
(Prepare SQL 이벤트의 수가 Exec Prepared SQL 이벤트의 수와 거의 비슷한 경우 해당 응용 프로그램이
        준비/실행 모델을 제대로 사용하고 있지 못함.)

7) 응용 프로그램에서 시간 초과 오류를 일으키거나 응답을 하지 않고 또는 문제가 있는 명령문을 완료하지 
   못하는 등의 여러 이벤트가 발생하는 경우 
다음 이벤트도 포함 시킴.
    TSQL, SQL:BatchStarting
    
TSQL, SQL:StmtStarting
    
TSQL, RPC:Starting
    
Stored Procedures, SP:StmtStarting

8) Attention (이벤트: 오류 및 경고)
   
의미: 쿼리의 실행 속도가 느리다는 것을 나타냄.
   
- 클라이언트에서 쿼리를 취소 
     (원인: ①사용자가 명시적으로 쿼리를 취소했거나 응용 프로그램을 종료 ②쿼리 실행 시간이 초과)
   
- 상기 8)번 이벤트 조사

9) Missing Column Statistics (이벤트: 오류 및 경고)
   의미: 이 출력은 만들어진 쿼리 계획이 최적이 아닐 수도 있다.
   
- 적어도 한 테이블에 있는 유용한 인덱스가 쿼리에 포함되지 않았음을 나타냄. 
   
- 열에 대한 통계 정보까지 SQL Server에 없기 때문에 쿼리 계획에 대한 결정을 하지 못하는 상태.
   
- 실행 시간이 긴 쿼리와 관련된 것에 먼저 포커스
   
  + 기간 (Duration)별로 추적 출력 그룹화
     
+ 각 쿼리의 기간 (Duration)은 짧은데 SQL Compilations/sec 가 많이 나타나는 경우 쿼리에 대한
        procedure를 만들거나, 매개 변수 표식 또는 
sp_executesql을 고려해야 
        (* EXEC() 보다 sp_executesql의 성능이 일반적으로 좋음)
 
   

10) Execute 동적 SQL 문 튜닝
     SP:Starting
     
SP:Completed 
      
 - 두 이벤트 사이에 EXECUTE문으로 동적 SQL 쿼리 및 프로시저 나타남
        
- EXECUTE 명령으로 실행되는 동적 SQL 문은 "Dynamic SQL" 텍스트가 있는 SP:Completed 이벤트로
          나타납니다. 
SP:Completed 이벤트를 확장하고 "Dynamic SQL" 텍스트가 있는지 확인.
          이러한 이벤트가 많으면 EXECUTE 문 대신 
sp_executesql을 사용하여 응용 프로그램 성능을 향상시킬
          수도 있습니다.
          
(참고: 동적 쿼리의 해결사 sp_executesql vs. exec)
        
- 데이터 열: 응용 프로그램 이름, NT 사용자 이름

11) 이벤트 외 데이터 열
     
- CPU Usage
       
+ CPU로 그룹화
       
+ text 열에 "hash"나 "merge" 검색 - CPU와 메모리를 많이 사용
    
- Disk I/O 병목 상태
      
+ Reads 및 Writes로 그룹화
       
+ Application Name, NT User Name 및 SQL User Name 필드를 확인. 실행 시간이 긴 쿼리의 
          소스를 찾아냅니다.
     
- Exception 이벤트의 Integer Data 열
      
+ 클라이언트로 반환되는 오류를 나타냄 (해당 번호로 오류 내용 검색)

728x90
반응형

'연구개발 > DBA' 카테고리의 다른 글

MS-SQL 메모리 컨트럴  (0) 2010.07.02
추적파일 테이블로 변환  (0) 2010.06.30
인덱스 조각화 확인  (0) 2010.06.30
ms-sql 백업과 복원  (0) 2010.06.28
현재실행중인(부하를 많이 잡아 먹는)쿼리문 보기  (0) 2010.06.28