SQL Server 의 Forwarded Record 카운터 가 IO 성능 에 영향 을 주 는 해결 방법

프로필 
    최근 한 고객 에 게 서 카운터 가 매우 높다 는 것 을 알 게 되 었 다.이 글 은 포 워드 레 코딩 이 무엇 인지 공유 하고 포 워드 레 코딩 이 왜 추가 적 인 IO 를 만 들 었 는 지 원리 적 으로 이야기 합 니 다.
2.보관 원리
    SQL Server 에 서 는 데이터 가 쌓 여 있 을 때 데이터 가 무질서 하 며,모든 비 집합 색인 포인터 가 물리 적 주 소 를 가리 키 는 RID 를 저장 합 니 다.데이터 줄 의 긴 열 이 증가 하여 기 존 페이지 가 데이터 줄 을 수용 할 수 없 을 때 데 이 터 는 새로운 페이지 로 이동 하고 원래 위치 에 새 페이지 를 가리 키 는 지침 을 남 깁 니 다.이렇게 하 는 이 유 는 기록 에 대한 업데이트 가 나타 날 때 모든 비 집합 색인 지침 이 변동 하지 않 기 때 문 입 니 다.그림 1 참조.
image
그림 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 가 존재 하 는 것 을 보면 쌓 아 올 리 는 표 에 읽 기 동작 이 존재 한 다 는 것 을 설명 합 니 다.이 쌓 아 올 리 는 표를 찾 으 면 적당 한 유지보수 창 시간 에 쌓 아 올 리 는 표를 만 드 는 것 이 이상 적 인 선택 입 니 다.
    다른 이유 로 집합 색인 을 만 들 수 없다 면,시 계 를 다시 만 들 수 있 습 니 다.

좋은 웹페이지 즐겨찾기