SQL Server 에서 책 갈피 찾기 성능 데 미 지

제 블 로그 에서 예전 에 저 는 SQL Serverl 의 책 갈 피 를 자주 찾 았 고 그들 이 가 져 온 많은 문제 도 있 었 습 니 다.오늘 의 글 에서 저 는 성능 측면 에서 책 갈 피 를 찾 고 싶 습 니 다.그리고 SQL Server 의 성능 을 어떻게 낮 추 는 지 말씀 드 리 고 싶 습 니 다.
책 갈피 찾기-반복 순환
만약 당신 의 비 집합 색인 이 비 집합 색인 을 덮어 쓰 지 않 는 다 면 SQL Server 의 검색 최적화 기 는 책 갈피 찾기 를 도입 할 것 입 니 다.비 집합 색인 에서 돌아 오 는 모든 줄 에 대해 SQL Server 는 집합 색인 이나 목록 에서 추가 검색 작업 을 해 야 합 니 다.
예 를 들 어 집합 색인 이 3 층 을 포함 하고 있 을 때 필요 한 정 보 를 되 돌려 주기 위해 서 는 줄 마다 3 페이지 의 추가 읽 기 가 필요 합 니 다.따라서 유 틸 리 티 를 조회 하고 실행 계획 에서 책 갈 피 를 선택 하여 작업 을 찾 습 니 다.의미 가 있 을 때 만 발생 합 니 다.검색 의 선택 도 를 바탕 으로 합 니 다.다음 그림 은 책 갈피 찾기 작업 의 실행 계획 을 보 여 준다.

보통 책 갈 피 를 찾 는 데 관심 이 많 지 않다.몇 번 만 실행 되 기 때문이다.검색 선택 도가 너무 낮 으 면 검색 유 틸 리 티 는 색인 스 캔 이나 표 스 캔 연산 자 를 모 아 표 전 체 를 직접 스 캔 합 니 다.그러나 SQL Server 에서 만 캐 시 를 다시 사용 하 는 실행 계획 입 니 다.이 계획 은 여러 번 실행 값 이 다 릅 니 다.책 갈 피 를 포함 하여 찾 은(최초 로 제공 한 입력 값 기반)이 므 로 쉽게 발생 할 수 있 습 니 다.책 갈피 찾기 는 반복 적 으로 실 행 됩 니 다.
이 성능 문 제 를 보 여주 기 위해 서 다음 조 회 는 검색 최적화 기 를 지정 하여 특정한 비 집합 색인 을 사용 합 니 다.검색 자 체 는 80000 줄 로 되 돌아 갑 니 다.모든 검색 이 실 행 될 때마다 SQL Server 는 책 갈 피 를 80000 번 찾 아야 하기 때 문 입 니 다.반복 적 으로 실 행 됩 니 다.

CREATE PROCEDURE RetrieveData
AS
 SELECT * FROM Table1 WITH (INDEX(idxTable1_Column2))
 WHERE Column3 = 2
GO
다음 그림 은 조회 실행 후의 실제 실행 계획 을 보 여 준다.

실행 계획 이 매우 무서워 보 입 니 다.책 갈피 찾기 연산 자 는 80000 회 실 행 했 기 때문에 조회 자체 에 165000 개가 넘 는 논리 적 읽 기 가 생 겼 습 니 다!(논리 읽 기 개 수 는 STATISTIC IO 에서 가 져 올 수 있 습 니 다).

다음은 이 나 쁜 조 회 를 수행 하 는 병렬 사용자 가 많 을 때 SQL Server 에 무슨 일이 일어 나 는 지 보 여 드 리 겠 습 니 다.나 는 100 개의 병렬 사용자 의 조 회 를 모 의 하기 위해 ostress.exe(RML 도구 의 일부분)를 사용 할 것 이다.ostress.exe -Q”EXEC BookmarkLookupsPerformance.dbo.RetrieveData” -n100 -q내 테스트 시스템 에서 100 개의 병렬 조 회 를 완성 하 는 데 15 초 가까이 걸 렸 다.이 기간 동안 CPU 사용량 이 매우 높 습 니 다.SQL Server 는 책 갈피 찾기 작업 을 위해 순환 연산 자 를 끼 워 넣 어야 하기 때 문 입 니 다.플러그 인 순환 작업 은 당연히 CPU 자원 을 차지한다.
이제 색인 디자인 을 수정 하여 이 검색 을 위해 비 집합 색인 을 만 듭 니 다.비 집합 색인 이 있 으 면 유 틸 리 티 를 조회 할 때 계획 에서 책 갈 피 를 찾 을 필요 가 없습니다.비 집합 색인 을 찾 으 면 같은 결 과 를 되 돌 릴 수 있 습 니 다.

CREATE NONCLUSTERED INDEX idxTable1_Column2 ON Table1(Column3)
INCLUDE (Column2)
WITH (DROP_EXISTING = ON)
GO
이번에 우리 가 다시 ostress.exe 로 같은 조 회 를 실행 할 때,우 리 는 모든 조 회 를 5 초 안에 완성 하 는 것 을 보 았 다.우리 가 방금 본 15 초 와 는 큰 차이 가 있다.이것 이 바로 비 집합 색인 을 덮어 쓰 는 위력 입 니 다.우리 조회 에서 배기구 가 요청 한 데 이 터 는 비 집합 색인 에서 직접 찾 을 수 있 기 때문에 책 갈 피 를 찾 을 수 있 습 니 다.
작은 매듭
이 글 에서 나 는 너 에 게 좋 지 않 은 책 갈 피 를 보 여 주 었 다.따라서 중요 한 조회 가 조 회 를 신속하게 완성 하 는 것 은 매우 중요 하 다.병행 하 는 책 갈 피 를 사용 하여 찾 는 실행 계획 은 좋 은 선택 이 아니다.비 집합 색인 을 덮어 쓰 면 도움 이 됩 니 다.다음 에 색인 을 디자인 할 때 이 방법 을 고려 해 보 세 요.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기