BACKEND/MSSQL
MSSQL :: SET STATISITCS
neeon
2024. 1. 5. 16:19
728x90
쿼리를 짜다보면 쿼리 성능 분석이 필요한 케이스가 생긴다.
그때 사용하는 것이 SET STATISTICS.
관련된 셋팅에 대해 알아보도록 하겠다.
실행 통계 정보와 관련된 IO
SET STATISTICS IO ON
SET STATISTICS IO OFF
Statistics 의 IO 옵션을 켜면 통계 정보가 표시된다.
이런 식으로 message 창에서 확인이 가능하다.
확인할 수 있는 정보
Table | 테이블 정보 |
Scan Count | 실행된 검색 수 |
Logical Reads | 리적 읽기 수. 데이터 캐시에서 읽은 페이지 수. |
Physical Reads | 물리적 읽기 수. 디스크에서 읽은 페이지 수. |
Read-ahead Reads | 미리 읽기 수. 쿼리에 대해 캐시에 넣어진 페이지 수 |
LOB Logical Reads | LOB 논리적 읽기 수. 데이터 캐시에서 읽은 text, ntext, image 또는 큰 값 유형(varchar(max), nvarchar(max), varbinary(max)의 페이지 수. |
LOB Physical Reads | LOB 물리적 읽기 수. 디스크에서 읽은 text, ntext, image 또는 큰 값 유형의 페이지 수 |
LOB Read-ahead Reads | LOB 미리 읽기 수. 쿼리에 대해 캐시에 넣어진 text, ntext, image 또는 큰 값 유형의 페이지 수. |
시간 통계 정보와 관련된 TIME
SET STATISTICS TIME ON
SET STATISTICS TIME OFF
statistics의 time 옵션을 켜면 시간 통계와 관련된 정보가 표시 된다.
위와 같이 Messages 창에서 확인이 가능하다.
확인할 수 있는 정보
CPU time | CPU 시간 |
elapsed time | 결과 시간 |
처리 과정 정보와 관련된 Profile
SET STATISTICS TIME ON;
SET STATISTICS TIME OFF;
statistics의 profile 옵션을 켜면 쿼리의 처리 과정에 대한 정보가 표시 된다.
위의 결과 값 과 함께 아래에 테이블 형태로 제공된다.
확인할 수 있는 정보
Rows | 각 연산자에서 만든 실제의 행 수. 오라클의 A-Row 와 같은 개념 |
Executes | 각 연산자가 몇 번 실행이 되었는지에 대한 정보 |
StmtText | * Statement Text 세부적으로 어떤 실행이 있었는지를 보여주거나 (Plan_Row) 실제로 실행된 쿼리를 보여줌 (Plan_Row가 아닌 행) 각 연산자에서 물리적(Nested Loops), 논리적(Inner Join)으로 어떤 동작이 있었는지를 볼 수 있음. |
StmtId | 일괄처리에 있는 문의 개수. 여러개의 쿼리가 실행되었을 경우 나중에 실행된 쿼리일수록 숫자가 높음. |
NodeId | 현재 쿼리의 Node Id. |
Parent | 현재 실행계획의 부모 단계 Node Id. |
PhysicalOp | 실제 물리적으로 어떤 구현이 있었는지에 대한 설명 Plan_Row에서만 제공. |
LogicalOp | 논리적(관계형)으로 어떤 연산이 있었는지에 대한 설명 Plan_Row에서만 제공 |
Argument | 수행되는 작업의 추가 정보를 제공(인수) TOP 절의 행 수, Group by 조건, Where 조건, Index Seek, Scan 사항 등이 이에 포함 |
DefinedVales | 해당 연산자가 사용하는 값에 대한 목록 현재 쿼리에 있는 '계산 식' 이나 쿼리 처리를 위해 사용한 쿼리프로세서 '내부 값'을 의미 |
EstimateRows | 현재 연산자가 생성한 출력의 예상 행 수 |
EstimateIO | 현재 연산자 작업에 대한 예상 IO 비용 |
EstimateCPU | 현재 연산자 작업에 대한 예상 CPU 비용 |
AvgRowSize | 현재 연산자를 통해 통과되는 행의 예상 크기(byte) |
TotalSubtressCost | 현재 작업과 하위 연산자를 통한 작업 비용의 예상 누적 비용 |
OutputList | 현재 연산자를 통해 어떤 열들이 산출되는 지에 대한 정보 |
Warnings | 현재 작업과 관련된 경고 메세지 목록 |
Type | 현재 연산 Node가 어떤 유형의 작업인지에 대한 정보 Plan_Row에 대한 구분은 이 열을 통해 가능함. |
Parallel | 연산이 병렬로 실행되었는지 아닌지에 대한 정보 0은 비 병렬처리. 1은 병렬처리. |
EstimateExecutions | 현재 쿼리 실행 동안 해당 연산자가 실행될 예상 횟수 |
실행계획들을 보면서
적당하게 쿼리 튜닝을 진행하는 것도 하나의 능력.
728x90