SQL Server 의 Forwarded Record 카운터 가 IO 성능 에 영향 을 주 는 해결 방법
최근 한 고객 에 게 서 카운터 가 매우 높다 는 것 을 알 게 되 었 다.이 글 은 포 워드 레 코딩 이 무엇 인지 공유 하고 포 워드 레 코딩 이 왜 추가 적 인 IO 를 만 들 었 는 지 원리 적 으로 이야기 합 니 다.
2.보관 원리
SQL Server 에 서 는 데이터 가 쌓 여 있 을 때 데이터 가 무질서 하 며,모든 비 집합 색인 포인터 가 물리 적 주 소 를 가리 키 는 RID 를 저장 합 니 다.데이터 줄 의 긴 열 이 증가 하여 기 존 페이지 가 데이터 줄 을 수용 할 수 없 을 때 데 이 터 는 새로운 페이지 로 이동 하고 원래 위치 에 새 페이지 를 가리 키 는 지침 을 남 깁 니 다.이렇게 하 는 이 유 는 기록 에 대한 업데이트 가 나타 날 때 모든 비 집합 색인 지침 이 변동 하지 않 기 때 문 입 니 다.그림 1 참조.
그림 1.Forwarded Record 표시
이 는 데이터 업데이트 로 인해 기 존 위치 에 새 데이터 페이지 에 위치 줄 을 가리 키 는 포인터 만 남 겨 두 는 것 이 이른바 Forwarded Record 입 니 다.
셋째, Forwarded Record 는 IO 성능 에 어떻게 영향 을 줍 니까?
그렇다면 포 워드 레 코딩 은 성능 을 향상 시 키 기 위 한 메커니즘 인 데 왜 또 성능 문 제 를 일 으 키 는 것 일 까?Forwarded Record 의 취 지 는 쌓 아 올 리 는 시 계 를 업데이트 할 때 쌓 아 올 리 는 위치 변화 가 모 으 지 않 는 색인 을 동시에 업데이트 하지 않 아 비용 이 들 지 않 는 다 는 것 이다.그러나 검색 에 있어 서 는 표 스 캔 이 있 든 책 갈피 검색 에 사용 되 든 추가 적 인 IO 비용 을 가 져 옵 니 다.다음은 예 를 들 어 보 겠 습 니 다.
BEGIN TRAN
WHILE @index < 100000
BEGIN
INSERT INTO dbo.HeapTest
( id, col1 )
VALUES ( @index, NULL )
SET @index = @index + 1
END
COMMIT
코드 목록 1.새 테이블 을 만 들 고 10 만 개의 데 이 터 를 삽입 합 니 다.코드 목록 1 을 통 해 테스트 표를 만 들 고 10 만 데 이 터 를 반복 해서 삽입 합 니 다.이때 우 리 는 그림 2 와 같이 이 더미 표 가 저장 하고 있 는 페이지 수 를 보 았 다.
그림 2.더미 공간 점용
이 때 이 시 계 를 업데이트 하여 기 존 줄 을 늘 리 고 Forwarded Record 를 생 성 합 니 다.이 때 이 표 의 저장 소 를 다시 봅 니 다.그림 3 참조.
그림 3.8W+의 forwarded record 생 성
이때 우 리 는 데이터 가 590 페이지 에 불과 하지만 8W+의 forwarded record 가 존재 한 다 는 것 을 알 게 되 었 다.만약 에 우리 가 이 시 계 를 스 캔 하면 590 페이지 에 불과 하지만 8W+의 논리 IO 가 필요 해서 IO 에 대한 비용 부담 을 크게 향상 시 켰 다.또한 forwarded record 페이지 와 원래 페이지 가 물리 적 으로 연속 되 지 않 기 때문에 IOPS 에 도 도전 이 존재 한다.그림 4 참조.
그림 4.발생 하지 말 아야 할 추가 IO 지출
위의 조 회 는 성능 카운터 에 반영 되면 그림 5 와 같은 결과 로 나타난다.
그림 5.Forwarded 레코드 카운터 증가
어떻게 해결
Forwarded Record 카 운 터 를 보면 데이터베이스 에 쌓 인 표 가 존재 하고 OLTP 시스템 에 서 는 모든 표 에 집합 색인 이 있어 야 한 다 는 뜻 이다.따라서 표 에 집합 색인 을 추가 해 이 문 제 를 해결 할 수 있다.
일반적으로 읽 지 않 는 표 만 쌓 아 올 리 는 것 이 적당 하지만,Forward Reocord 가 존재 하 는 것 을 보면 쌓 아 올 리 는 표 에 읽 기 동작 이 존재 한 다 는 것 을 설명 합 니 다.이 쌓 아 올 리 는 표를 찾 으 면 적당 한 유지보수 창 시간 에 쌓 아 올 리 는 표를 만 드 는 것 이 이상 적 인 선택 입 니 다.
다른 이유 로 집합 색인 을 만 들 수 없다 면,시 계 를 다시 만 들 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laradock에서 Laravel + SQLServer 환경 준비본 기사는 공식 문서의 신규 작성용의 프로젝트 순서에 따라, 다음의 디렉토리 구성이 된다고 가정합니다. 기본 설정 APP_CODE_PATH_HOST에 작성하려는 프로젝트 이름을 입력하십시오. SQL Server용 설...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.