분류 전체보기 1385

성능분석 13탄 – 누락된 인덱스(missing index)

성능분석 13탄 – 누락된 인덱스(missing index) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 누락된 인덱스는 성능 문제를 일으킬 수 있다. 누락된 인덱스(missing index)는 인덱스가 생성되어 있지만 사용되지 않는 인덱스이다. SQL Server 2005 부터는 누락된 인덱스를 확인하기 위한 DMV가 제공되고 있다. 다음 DMV를 활용하여 누락된 인덱스의 정보를 확인 할 수 있다. Sys.dm_db_missing_index_details : 누락된 인덱스에 대한 상세 정보 반환 Sys.dm_db_missing_index_group_stats : 누락 된 인덱스 그룹에 대한 요약 정보 반환 Sys.dm_db_missing_in..

성능분석 12탄 – 문제 쿼리 식별

성능분석 12탄 – 문제 쿼리 식별 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서는 sys.dm_exec_query_stats DMV를 사용하여 실행된 쿼리에 대한 통계를 확인 할 수 있다. DMV에서는 몇 개의 쿼리가 실행 되었는지, 전체, 최대, 최소. 마지막 활성 CPU 시간 등을 확인 할 수 있으며 전체, 최대, 최소, 마지막 읽기 쓰기에 대한 정보를 확인 할 수 있어 문제를 식별하는데 매우 좋은 정보이다. select* from sys.dm_exec_query_stats Large execute count 많은 실행 횟수는 자주 실행되는 쿼리로 성능에 가장 민감하다. 빈도가 높은 만큼 작은 개선이 전반적으로 상당한 성능에 이점을 가져올 ..

성능분석 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..