전체 글 1383

성능분석 11탄 – 실행 계획 분석

성능분석 11탄 – 실행 계획 분석 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서는 쿼리에 대한 실제 실행 계획을 확인 할 수 있다. 실제 쿼리가 실행되는 과정을 XML 트리로 확인 할 수 있는 방법이 몇 가지 있다. SET SHOWPLAN_XML_ON : 해당 세션에서 SET SHOWPLAN_XML_ON 명령을 수행하고 쿼리를 실행 한다. set showplan_xml on go select * from [HumanResources].[EmployeeDepartmentHistory] XML을 클릭하면 그래픽의 실행계획을 확인 할 수 있으며 마우스 오른쪽 클릭을 사용하여 XML 트리를 확인 할 수 있다. Profiler 사용 : 프로파일러 Eve..

성능분석 10탄 – 쿼리 실행 대기 시간 분석(xevent)

성능분석 10탄 – 쿼리 실행 대기 시간 분석(xevent) Version : SQL Server 2005, 2008, 2008R2, 2012 쿼리 또는 저장프로시저에 대한 가장 좋은 대기 유형 정보는 실행 시간과 IO 정보이다. 이 정보는 확장이벤트(XEvent)를 사용하여 모니터링을 할 수 있다. 다음 스크립트는 Sqlos.wait_info 정보를 캡처하고 특정 실행 세션(SPID)에 대한 확장 이벤트 세션을 필터링하는 확장이벤트 세션 생성 작업이다. create event session session_waits on server add event sqlos.wait_info (WHERE sqlserver.session_id= 54/*execution_spid*/ and duration>0) , ad..

성능분석 9탄 – 쿼리 실행 분석

성능분석 9탄 – 쿼리 실행 분석 Version : SQL Server 2005, 2008, 2008R2, 2012 성능에 대한 쿼리를 분석할 때 참고 할 수 있는 통계를 살펴 보자. SET STATISTICS TIME ON 쿼리 분석 시간은 컴파일 시간 및 실행 시간을 포함한다. 여러 개의 문이 있는 일괄 처리 또는 저장 프로시저를 실행하는 경우 어떤 구문에서 비용이 발생하는지 확인 할 수 있다. 실행계획을 분석하면 더 많은 정보를 확인 할 수 있다. SET STATISTICS TIME ON select * from [dbo].[ErrorLog] SET STATISTICS IO ON IO 통계를 보여준다. 각 구분의 IO 실행 결과를 나타낸다. SET STATISTICS IO ON select * fr..

성능분석 8탄 – IO 통계 (DISK 활동 분석)

성능분석 8탄 – IO 통계 (DISK 활동 분석) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 디스크에서 데이터를 읽고 쓰기 작업을 한다. 모든 쓰기 작업은(insert, update, delete) 반드시 디스크에 기록되어야 한다. 쿼리는 항상 메모리 캐시(buffer pool)에서 데이터를 반환하지만 원하는 데이터가 캐시에 없는 경우 디스크로부터 데이터를 읽어 캐시에 적재 후 반환한다. 이때 IO 병목이 발생하며 성능 조사가 필요하다. SQL Serve는 데이터 및 로그 IO 요청에 대한 모든 정보를 수집하고 집계한다. 다음 DMV를 사용하여 쓰기 및 읽기의 수를 확인한다. select db_name(io.database_id) as dat..

성능분석 7탄 – 프로파일러 대기 유형 및 PREEMPTIVE_OS_WRITEFILEGATHER

성능분석 7탄 – 프로파일러 대기 유형 및 PREEMPTIVE_OS_WRITEFILEGATHER Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 발생하는 대기 유형 중 프로파일러 사용으로 인한 대기 유형 및 파일 작업으로 인한 대기 유형에 대해서 살펴 본다. TRACEWRITE 이 대기 유형은 SQL Profiler에 의해 차단되고 있음을 나타낸다. 서버에 연결된 프로파일이 있는 경우에만 발생한다. 너무 많은 프로파일 이벤트를 추적할 경우 자주 발생 한다. PREEMTIVE_OS_WRITEFILEGATHER 데이터베이스 파일의 자동증가 트리거가 설정되어 있을 경우 발생 한다. SQL Server에서 파일의 자동 증가는 매우 큰 비용을 발생하는 이벤..

성능분석 6탄 – CPU 경합 및 동시성 관련 대기 유형

성능분석 6탄 – CPU 경합 및 동시성 관련 대기 유형 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 발생하는 대기 유형 중 CPU 경합 및 동시성 관련 대기 유형에 대해서 살펴 본다. LCK_* LCK는 잠금으로 인한 대기 정지 작업을 나타낸다. LCK_M_S* 대기 유형은 데이터를 읽기 위해(공유 잠금) 잠금을 획득하려고 할 때 발생 한다. LCK_M_SCH* 대기 유형은 객체의 스키마 잠금을 표시한다. 대기 유형설명LCK_M_BU태스크가 대량 업데이트(BU) 잠금을 획득하려고 대기하는 경우에 발생한다. LCK_M_IS태스크가 내재된 공유(IS) 잠금을 획득하려고 대기하는 경우에 발생한다LCK_M_IU태스크가 의도 업데이트(IU) 잠금을 획..

성능분석 5탄 – 메모리 및 네트워크 관련 대기 유형

성능분석 5탄 – 메모리 및 네트워크 관련 대기 유형 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 발생하는 대기 유형 중 메모리 및 네트워크 관련 대기 유형에 대해서 살펴 본다. [메모리 관련 대기 유형] RESOURCE_SEMAPHORE 이 대기 유형은 쿼리가 메모리 부여를 기다리는 것을 나타낸다. 다른 동시 쿼리로 인해 쿼리 메모리 요청을 즉시 허용할 수 없는 경우에 발생 한다. 대기 수가 많고 대기 시간이 길면 동시 쿼리 수 또는 메모리의 양이 과도하게 많은 것이다. SOS_VIRTUALMEMORY_LOW 메모리 할당 리소스 관리자가 가상 메모리를 해제 할 때까지 대기 하는 경우에 발생 한다. 주로 32bit 환경에서 자주 발생 한다. L..

성능분석 4탄 – 디스크 및 IO 관련 대기 유형

성능분석 4탄 – 디스크 및 IO 관련 대기 유형 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 발생하는 대기 유형 중 DISK 및 I/O 관련 대기 유형에 대해서 살펴 본다. PAGEIOLATCH_* 전형적인 I/O 대기로 디스크에서 데이터를 읽고 쓰기 위한 대기이다. 데이터가 디스크에서 메모리로 캐시 (버퍼풀) 될 때까지 차단 작업이 발생 하면서 대기가 발생 한다. 대기 유형중 PAGELATCH_* 와 혼동하지 않도록 한다. 대기유형설명PAGEIOLATCH_DT태스크가 I/O 요청에 있는 버퍼를 래치에서 기다리는 경우에 발생한다. 래치 요청이 삭제 모드에 있다. 대기 수가 많으면 디스크 하위 시스템에 문제가 있을 수 있다.PAGEIOLATCH..

성능분석 3탄 – 집계 대기 통계

성능분석 3탄 – 집계 대기 통계 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 집계 통계(Aggregates Statistics)는 DMV 중 sys.dm_os_wait_stats을 통해서 확인 할 수 있다. sys.dm_os_wait_stats에서는 현재 실행 중인 요청 및 대기 작업을 보고 어떤 순간에 대기하고 있는지 보여주며 서버가 시작된 이후 누적된 값을 제공한다. DMV를 통하여 대기 통계를 확인하는 것은 간단하지만 결과를 해석하는 방법에는 약간 까다롭다. select * from sys.dm_os_wait_stats order by wait_time_ms desc; 결과를 살펴 보면 상단에 위치한 목록에 DIRTY_PAGE_POOL, R..

성능분석 2탄 – 실행 요청을 기다리는 작업 확인 및 분석 - 병렬 처리 대기 확인

성능분석 2탄 – 실행 요청을 기다리는 작업 확인 및 분석 병렬 처리 대기 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 지난 아티클에서 실행 요청을 기다리는 작업에 대해 확인 하는 방법에 대해서 알아 보았다. 성능분석 1탄 – 실행 요청을 기다리는 작업 확인 및 분석 : http://sqlmvp.kr/140207603501 또 다른 예제를 한번 살펴 보자. 세션 53의 상태는 COMMIT TRANSACTION 작업을 기다리고 있다. 세션 54의 상태는 SELECT 작업으로 세션 55에 의해 대기 하고 있다. 세션 55의 상태는 SELECT 작업으로 세션 53에 의해 대기 하고 있다. 세션 56의 상태는 SELECT 작업으로 세션 55에 의해 대기하고 있다. 세션..