STATISTICS IO 결과 용어 설명
테이블 | 테이블 이름 |
검색 수 | 테이블 에서 스캔 또는 탐색이 시작된 횟수 |
논리적 읽기 수 | 메모리 내 캐시(버퍼 풀)에서 읽은 데이터 수 |
물리적 읽기 수 | (디스크에서 읽은 페이지 수) 디스크로부터 버퍼풀에 전송된 페이지 수(데이터 전송이 완료 될 때까지 블록 또는 대기가 발생) |
미리 읽기 수 | 비동기적으로 디스크로부터 데이터를 읽어 버퍼풀에 넣는 페이지 수(쿼리에 대해 캐시에 넣어진 페이지 수) |
LOB 논리적 읽기 수 | LOB 데이터를 읽은 페이지 수 (데이터 캐시에서 읽은 text, ntext, image 또는 큰 값 유형(varchar(max), nvarchar(max), varbinary(max))의 페이지 수) |
LOB 물리적 읽기 수 | 디스크에서 읽은 text, ntext, image 또는 큰 값 유형의 페이지 수 |
LOB 미리 읽기 수 | LOB 데이터를 읽은 페이지 수( 쿼리에 대해 캐시에 넣어진 text, ntext, image 또는 큰 값 유형의 페이지 수) |
논리적 읽기 수가 많으면 쿼리의 성능이 낮아져 실행 속도가 느려진다.
논리적 읽기 수가 많으면 긴 실행 시간과 높은 CPU 소비가 발생하는데
쿼리 튜닝이 필요한 시간이 오래 걸리는 쿼리를 위의 구문과 함께 실행하여 논리적 읽기 수가 높은 테이블을 중점적으로 튜닝하면 쿼리 성능 개선에 도움을 줄 수 있다.
1. Insert
Insert 논리 연산자는 계산된, 혹은 입력된 값을 지정된 열에 지정된 개체에 삽입합니다.
Insert.1 – 테이블에 Clustered Index가 없는 경우
Insert.2- 테이블에 Clustered Index가 있는 경우
2. Clustered Index Insert
Clustered Index Insert 실행 계획 연산자는 입력된 값을 클러스터형 인덱스에 삽입합니다.
3. Top
Top 연산자는 지정된 정렬 순서 등을 기준으로 하여, 지정된 개수만큼의 행을 반환합니다.
Top.1
4. Index Seek
Index Seek (NonClustered) 연산자는 인덱스 검색 기능을 사용하여 비클러스터형 인덱스
에서 행을 검색합니다.
주로 Seek을 하기에 적합한 Where 조건자를 입력 하였거나, Join을 위한 조건열이 인덱스로
잘 구성 되어있을 때 볼 수 있습니다.
Index Seek.1 Where 조건자를 검색하기 위한 Index Seek
Index Seek.2 Join을 위한 Index Seek
5. Segment
Segment 연산자는 하나 이상의 열 값에 따라 입력 집합을 Segment(부분)로 나눕니다.
그런 다음 연산자는 한 번에 한 Segment(부분)씩 출력합니다.
저의 실행계획에서는 ROW_NUMBER()를 구하는 과정에서 나왔습니다.
Segment.1
6. Sequence Project(Compute Scalar)
Sequence Project(Compute Scalar) 연산자는 정렬된 집합에 대한 계산을 수행합니다.
이 연산자는 하나 이상의 열 값에 따라 입력 집합을 Segment(부분)으로 나누고,
한 번에 한 Segment(부분)씩 출력합니다.
저의 실행계획에서는 ROW_NUMBER()를 구하는 과정에서 나왔습니다.
7. Filter
Filter 연산자는 입력을 검색하고 Argument 열에 표시되는 필터 식(조건자)에 부합되는
행만 반환합니다.
저의 실행 계획에서는 페이징을 위한 Row_Number() 산출 후 범위 지정하는
Where문 때문에 발생 하였습니다.
Filter.1
8. Clustered Index Seek
Index Seek(Clustered) 연산자는 인덱스 검색 기능을 사용하여 클러스터형 인덱스에서 행을
검색합니다. Argument 열에는 사용할 클러스터형 인덱스의 이름 및 SEEK 조건자가 있습니다.
9. Nested Loops
Nested Loops (중첩 루프 조인) 연산자는
-내부 조인(Inner Join),
-왼쪽 우선 외부 조인(Left Outer Join),
-왼쪽 세미 조인(Left Semi Join) 및
-왼쪽 앤티 세미조인(Left anti semi join) 논리 연산을 수행합니다.
중첩 루프 조인은 일반적으로 인덱스를 사용하여 외부 테이블의 각 행에 대해 내부 테이블을
검색합니다.
Microsoft SQL Server는 내부 입력에 대한 인덱스 검색의 효율을 높이기 위해 예상 비용을
기준으로 외부 입력의 정렬 여부를 결정합니다.
수행 중인 논리 연산에 따라 Argument 열의 조건자(선택 사항)를 충족하는 모든 행이
반환됩니다.
Nested Loops.1 테이블에 아무런 인덱스도 없는 경우
Nested Loops.2 조인 조건 열이 클러스터드 인덱스로 구성 된 경우
10. Compute Scalar
Compute Scalar 연산자는 식을 계산하여 계산된 스칼라(방향의 구별은 없고, 하나의 수치로 완전히 표시 되어지는 양) 값을 만듭니다. 이 값은
-사용자에 반환되거나
-그 외에 쿼리에서 참조되거나
-둘 다일 수 있습니다.
Compute Scalar.1 SeqNo*2를 하기 위한 과정의 Compute Scalar
11. Concatenation
Concatenation 연산자는 여러 개의 입력을 검색하고 검색된 각 행을 반환합니다.
Concatenation은 일반적으로 Transact-SQL UNION ALL 구조를 구현하는 데 사용됩니다.
Concatenation 연산자에는 두 개 이상의 입력과 한 개의 출력이 있습니다.
Concatenation은 첫 번째 입력 Stream
(흐름 데이터 세트 간에서 데이터의 전송이 실행 되고 있는 것)
에서 출력 Stream 으로 행을 복사한 다음 이 연산을 각 추가 입력 스트림에 대해 반복합니다.
->SSMS 설명>여러 입력 테이블을 추가하여 출력 테이블을 구성합니다.
Concatenation.1 두 개의 쿼리를 UNOIN 하기 위한 Concatenation
12. Sort
Sort 연산자는 모든 들어오는 행을 정렬합니다.
Sort 작업으로 인해 중복요소가 제거 되면, Argument 열에
DISTINCT 혹은 ORDER BY 조건자가 포함 되며,
ASC나 DESC 정렬되는 경우에는 ASC나 DESC값이
Argument열의 접두사로 포함 되어 집니다.
13. Table Valued Function
Table Valued Function 연산자는 테이블 반환 함수를 계산하고,
결과 행을 [tempdb]에 저장합니다..
부모 반복자 (Node Id가 Parent에 해당하는) 에서 행을 요청하면
테이블 반환 함수는 [tempdb]에서 해당 행을 반환합니다.
SSMS 그래픽 실행계획에서는 테이블 반환 함수입니다. 라고 설명하고 있습니다.
14. Merge Join
Merge Join 연산자는 (일반적으로 Inner 혹은 Outer)조인 및 합집합(Union) 논리 연산을
수행합니다.
Merge Join은 명시적인 정렬이 필요하지 않은 경우
-예를 들면 데이터베이스에 Merge Join에 적합한 인덱스가 있는 경우에
특히 효과적입니다.
Merge Join.1 정렬이 잘 되어 있는 경우
Merge Join.2 Join대상 테이블에 정렬이 잘 되어 있지 않은 경우
– Sort 하는 과정을 거칩니다
15. Stream Aggregate
Stream Aggregate 연산자는 하나 이상의 열로 행을 그룹화한 후 행 그룹에 대한 요약 값을
계산합니다.
이 연산자에 의한 출력은 다음 연산자에 의해 사용되거나, 사용자에게 반환되거나
할 수 있습니다.
Stream Aggregate 연산자를 사용하려면 입력이 그룹 내의 열을 기준으로 정렬되어야 하기
때문에, 데이터가 정렬되지 않은 경우, 이 연산자에 앞서 Sort연산자를 실행합니다.
-SSMS그래픽 실행 계획 에서는 적절하게 정렬된 스트림 에서, 행 그룹에 대한
요약값을 계산합니다 라고 설명 하고 있습니다.
-저의 실행계획의 경우, Full-text Union 한 데이터를
중복 제거하고, Join 하기 위해 Distinct 하는 과정에서 발생 한 것 같습니다.
Stream Aggregate.1
16. Table Spool
Table Spool 연산자는 입력을 검색 한 후
tempdb 에 존재하는 '쿼리 사용 기간 중에만 존재하는 임시 테이블'로 저장합니다.
출처: https://daily-sql.tistory.com/entry/실행-계획에서-볼-수-있는-연산자Operator-정리-Vol-1 [Daily-SQL:티스토리]
댓글