FIX: tempdb 데이터베이스에 대한 동시성 강화

기술 자료 번역 기술 자료 번역
기술 자료: 328551 - 이 문서가 적용되는 제품 보기.
버그 #: 362099 (SHILOH_BUGS)
모두 확대 | 모두 축소

이 페이지에서

현상

tempdb 데이터베이스를 많이 사용하면 SQL Server에서 페이지를 할당하려고 할 때 경합이 일어날 수 있습니다.

sysprocesses 시스템 테이블 출력에서 waitresource가 "2:1:1"(PFS 페이지) 또는 "2:1:3"(SGAM 페이지)으로 표시될 수 있습니다. 경합 정도에 따라 잠시 동안 SQL Server가 응답하지 않는 것처럼 나타날 수도 있습니다.


다음 작업은 tempdb를 많이 사용합니다.
  • 임시 테이블(로컬 또는 전역)을 반복해서 만들고 삭제
  • 저장 목적으로 tempdb를 사용하는 테이블 변수
  • CURSORS와 관련된 작업 테이블
  • ORDER BY 절과 관련된 작업 테이블
  • GROUP BY 절과 관련된 작업 테이블
  • HASH PLANS와 관련된 작업 파일
이러한 활동이 상당히 많아지면 경합 문제가 발생할 수 있습니다.

원인

개체를 생성하는 동안 혼합 익스텐트 및 새 개체에 두(2) 페이지를 할당해야 합니다. 한 페이지는 IAM(Index Allocation Map)을 위한 것이고 두 번째 페이지는 개체의 첫 페이지를 위한 것입니다. SQL Server는 SGAM(Shared Global Allocation Map) 페이지를 사용하여 혼합 익스텐트를 추적합니다. 각 SGAM 페이지는 약 4GB의 데이터를 추적합니다.

혼합 익스텐트에서 페이지 할당의 일환으로 SQL Server는 PFS(Page Free Space) 페이지를 검색하여 어떤 혼합 페이지를 할당할 수 있는지 확인해야 합니다. PFS 페이지는 모든 페이지에서 사용할 수 있는 여유 공간을 추적하고 각 PFS 페이지는 약 8000 페이지를 추적합니다. PFS 및 SGAM 페이지를 변경하기 위해 적절한 동기화가 유지되며 이를 통해 잠시 동안 다른 수정 작업을 막을 수 있습니다.

SQL Server가 할당할 혼합 페이지를 검색할 때는 항상 동일한 파일과 SGAM 페이지에서 검색을 시작합니다. 따라서 여러 혼합 페이지 할당이 진행되는 경우 SGAM 페이지에서 상당한 경합이 발생하여 본 문서의 "현상" 절에서 설명하는 문제가 초래될 수 있습니다.

참고 할당 취소 작업도 페이지를 수정해야 하므로 경합이 한층 더 증가할 수 있습니다.

SQL Server에서 사용하는 여러 가지 할당 메커니즘(SGAM, GAM, PFS, IAM)에 대해 자세히 알아보려면 본 문서의 "참조" 절을 참조하십시오.

해결 방법

사용량이 많이 발생하는 tempdb에 대한 할당 리소스 경합을 줄이려면 다음과 같이 하십시오.
  1. SQL Server 2000 서비스 팩 3(SP3)을 실행하는 서버의 경우 핫픽스 8.00.0765 또는 최신 보안 수정 프로그램 8.00.0818을 적용합니다. SQL Server SP2를 실행하는 서버의 경우 핫픽스 8.00.0702를 적용합니다.

    이들 수정 프로그램은 다음 위치에서 확인할 수 있습니다.

    8.00.0765
    814916 FIX: 필터링된 게시에 대한 병합 에이전트가 실패할 수 있다
    8.00.0818
    http://www.microsoft.com/korea/technet/security/bulletin/MS03-031.asp
    8.00.0702
    328551 FIX: tempdb 데이터베이스에 대한 동시성 강화
  2. 추적 플래그 -T1118을 구현합니다.
  3. 프로세서 수와 동일하게 tempdb 데이터 파일 수를 늘리고 동일한 크기로 파일을 만듭니다. 자세한 내용은 "추가 정보" 절을 참조하십시오.
참고?이러한 단계는 Microsoft SQL Server 7.0에도 적용되지만 SQL Server 7.0에 대한 핫픽스가 없으므로 1단계는 적용되지 않습니다.

2단계에서 추적 플래그를 사용하기 전에 Microsoft SQL Server 7.0에 대해 추적 플래그 -T1118을 사용하려면 Microsoft 기술 자료의 다음 문서를 참조하십시오.
813492 FIX: 추적 플래그 1118이 설정된 경우 SQL Server 7.0에서 인덱스를 만들지 못한다

서비스 팩 정보

이 문제를 해결하려면 Microsoft SQL Server 2000의 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
290211 최신 SQL Server 2000 서비스 팩을 구하는 방법

핫픽스 정보

핫픽스 8.00.0702

이 핫픽스의 영어 버전은 아래와 같거나 그 이상의 파일 특성을 갖고 있습니다. 이 파일의 날짜와 시간은 UTC(Coordinated Universal Time)로 나열됩니다. 파일 정보를 볼 때 로컬 시간으로 변환됩니다. UTC와 로컬 시간의 차이를 알려면 제어판날짜 및 시간 도구에서 표준 시간대 탭을 사용하십시오.
표 축소표 확대
날짜시간버전크기파일 이름
2002-08-30 21:08786,432Distmdl.ldf
2002-08-3021:082,359,296Distmdl.mdf
2002-10-0900:54 544Drop_repl_hotfix.sql
2002-07-0215:352000.80.650.0107,088Impprov.dll
2002-07-1916:56 774,516 Instdist.sql
2002-10-08 23:56 12,615 Inst_repl_hotfix.sql
2002-08-2016:242000.80.679.0111,172Logread.exe
2002-04-0702:082000.80.606.062,024Odsole70.dll
2002-01-0301:5918,185Qfe356326.sql
2002-08-2016:472000.80.679.0135,748Qrdrsvc.exe
2002-08-2622:492000.80.679.0406,088Rdistcom.dll
2001-10-0401:36437,302Replcom.sql
2002-08-2016:332000.80.679.0152,136Replmerg.exe
2001-11-1920:36 993,945 Replmerg.sql
2002-11-0523:482000.80.700.0221,768Replprov.dll
2001-10-0401:36 986,906 Replsys.sql
2001-11-0401:36881,228Repltran.sql
2002-08-2622:492000.80.679.0283,208Rinitcom.dll
2002-09-1622:31390,045Securityhotfix.sql
2002-08-2622:492000.80.679.028,672Sqlagent.dll
2002-08-2618:392000.80.679.0311,872Sqlagent.exe
2002-08-2816:322000.80.679.049,152Sqlagent.rll
2002-08-2622:492000.80.679.053,824Sqlcmdss.dll
2002-08-2816:402000.80.679.012,288Sqlcmdss.rll
2002-10-2417:372000.80.695.0176,696Sqlmap70.dll
2002-11-1109:522000.80.702.07,471,185Sqlservr.exe
2002-11-1109:5112,633,088Sqlservr.pdb
2002-11-0118:562000.80.698.045,644Sqlvdi.dll
2002-11-0118:002000.80.697.082,492Ssnetlib.dll
2002-04-0702:082000.80.606.070,208Xplog70.dll
2002-04-0702:082000.80.606.053,828Xpqueue.dll
2002-04-0702:082000.80.606.0156,228Xprepl.dll
2002-07-1201:002000.80.658.0279,104Xpstar.dll
2002-09-1623:122000.80.686.098,872Xpweb70.dll
참고?파일 종속 관계로 인해 위의 파일이 들어 있는 최신 핫픽스나 기능에 추가 파일이 들어 있을 수 있습니다.

참고?핫픽스 8.00.0702는 SQL Server 2000 SP2를 적용한 컴퓨터를 위한 것입니다. SQL Server 2000 SP3을 설치한 경우에는 SQL Server 2000 SP3 롤업 버전 8.00.0765를 설치하십시오.

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다" 절에 나열한 제품에서 이 문제를 확인했습니다. 이 문제는 Microsoft SQL 2000 서비스 팩 4에서 처음 수정되었습니다.

추가 정보

핫픽스 8.00.0702이 경합을 줄이는 방법

핫픽스 8.00.0702에는 혼합 페이지 할당에 대한 라운드 로빈(round-robin) 알고리즘이 포함되어 있습니다. 이 핫픽스를 사용하면 둘 이상의 파일이 있는 경우 각 연속된 혼합 페이지 할당마다 시작 파일이 달라집니다. 따라서 같은 시작점에서 매번 같은 순서로 SGAM을 검색하는 흐름을 끊어 경합 문제를 피할 수 있습니다. SGAM의 새 할당 알고리즘은 순수한 라운드 로빈이며 속도를 유지하기 위해 비례 채우기를 적용하지 않습니다. 같은 크기의 tempdb 데이터 파일을 만드는 것이 좋습니다.

추적 플래그 -T1118에서 경합을 줄이는 방식

다음은 -T1118에서 경합을 줄이는 방식을 나열한 것입니다.
  • -T1118은 서버 범위 설정입니다.
  • SQL Server의 시작 매개 변수에 -T1118 추적 플래그를 포함하여 SQL Server가 재활용된 후에도 추적 플래그가 유효한 상태를 유지합니다.
  • -T1118은 서버에서 단일 페이지 할당을 거의 모두 제거합니다.
  • 대부분의 단일 페이지 할당을 해제함으로써 SGAM 페이지에서 경합을 줄입니다.
  • -T1118을 설정하면 추적 플래그 없이 개체의 첫 8 페이지에 대한 익스텐트에서 수행되는 단일 페이지 할당과 반대로 개체에 대해 한 번에 8 페이지(1 익스텐트)를 할당하는 GAM 페이지(예: 2:1:2)에서 거의 모든 새 할당이 수행됩니다.
  • IAM 페이지는 -T1118이 설정된 상태에서도 여전히 SGAM 페이지에서 단일 페이지 할당을 사용합니다. 그러나 핫픽스 8.00.0702와 결합하고 tempdb 데이터 파일을 늘리면 SGAM 페이지에서 경합이 줄어드는 효과가 있습니다. 공간 문제에 대해서는 본 문서의 "단점" 절을 참조하십시오.
참고?SQL Server 2000의 인스턴스에 대해 추적 플래그 1118을 설정하면 SQL Server 7.0 데이터베이스를 성공적으로 복원하지 못할 수 있습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
837938 SQL Server 2000 인스턴스에 SQL Server 7.0 데이터베이스 백업을 복원하려고 하면 오류 메시지가 나타날 수 있다

동일한 크기로 Tempdb 데이터 파일 수 늘리기

tempdb의 데이터 파일 크기가 5GB이고 로그 파일 크기가 5GB인 경우 단일 데이터 파일을 10(동일한 크기를 유지하기 위해 각각 500MB)으로 늘리고 로그 파일은 그대로 두는 것이 좋습니다. 별도의 디스크에 다른 데이터 파일을 저장하는 것이 좋지만 반드시 필요한 것은 아니며 같은 디스크에 저장할 수 있습니다.

tempdb 데이터 파일의 최적의 수는 tempdb에서 발생하는 경합 정도에 따라 다릅니다. 시작점으로 tempdb를 적어도 SQL Server에 할당된 프로세서 수와 같도록 구성할 수 있습니다. 하이 엔드 시스템(예: 16 또는 32 프로세서)의 경우 시작점은 10이 될 수 있습니다. 경합이 줄어들지 않으면 데이터 파일 수를 더 늘려야 할 수 있습니다.

비례 채우기 알고리즘은 파일 크기를 기반으로 하기 때문에 데이터 파일 크기를 동일하게 하는 것이 중요합니다. 동일하지 않은 크기로 데이터 파일을 만드는 경우 비례 파일 알고리즘은 모든 파일에 할당을 유포하는 대신 GAM 할당에 가장 큰 파일을 사용하려고 합니다. 따라서 여러 데이터 파일을 만드는 효과가 없어집니다.

tempdb 데이터 파일이 자동으로 커지는 경우에도 비례 채우기 알고리즘을 방해할 수 있습니다. 따라서 tempdb 데이터 파일의 자동 증가 기능을 해제하는 것이 좋습니다. 자동 증가 옵션을 해제하는 경우에는 서버에 tempdb의 디스크 공간이 부족해지지 않도록 충분히 큰 데이터 파일을 만들어야 합니다.

동일한 크기로 Tempdb 데이터 파일 수를 늘려 경합을 줄이는 방식

다음은 동일한 크기로 tempdb 데이터 파일을 늘려 경합을 줄이는 방식을 나열합니다.
  • tempdb에 대해 한 데이터 파일을 사용하면 각각 4GB 크기인 GAM 페이지 하나와 SGAM 페이지 하나가 만들어집니다.
  • tempdb에 대해 동일한 크기의 데이터 파일 수를 늘리면 각 데이터 파일에 대해 GAM 및 SGAM 페이지가 하나 이상 만들어집니다.
  • GAM의 할당 알고리즘은 비례 채우기를 적용하면서 라운드 로빈 방식으로 해당 파일 수로부터 한 번에 한 익스텐트(연속 8 페이지)를 제공합니다. 따라서 동일한 크기의 파일이 10개 있는 경우 첫 번째 할당은 File1, 두 번째 할당은 File2, 세 번째 파일은 File3 등이 됩니다.
  • GAM이 페이지를 할당하기 때문에 8 페이지가 한 번에 FULL로 표시되므로 PFS 페이지의 리소스 경합이 줄어듭니다.

단점

앞에서 언급한 권장 사항의 유일한 단점은 다음 조건에 해당할 때 데이터베이스 크기가 늘어날 수 있다는 것입니다.
  • 사용자 데이터베이스에 새 개체가 만들어집니다.
  • 각각의 새 개체는 64KB 미만의 공간을 차지합니다.

이러한 조건에 해당하는 경우 8KB의 공간만 필요한 개체에 대해 64KB(8페이지 * 8KB = 64KB)를 할당하므로 56KB의 공간이 낭비될 수 있습니다. 그러나 새 개체가 그 수명 동안 64KB(8 페이지)를 넘게 사용하는 경우 추적 플래그의 단점은 없습니다. 따라서 최악의 시나리오에서는 SQL Server가 1 페이지를 초과하여 커지지 않는 새 개체만을 위해 첫 번째 할당 동안 7페이지를 추가로 할당할 수 있습니다.

참조

GAM, SGAM, PFS, IAM에 대한 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.
SQL Server 2000 온라인 설명서 항목: "개체에서 사용하는 공간 관리", "익스텐트 할당 및 빈 공간 관리", "테이블 및 인덱스 아키텍처", "힙 구조"



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 328551 - 마지막 검토: 2006년 1월 20일 금요일 - 수정: 8.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000, Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
키워드:?
kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB328551

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com