반응형
반응형

> Link : http://support.microsoft.com/kb/328551/

SQL Server 2000에서 tempdb 경합을 경험하신 DBA라면 추적 플래그 -T1118 에 대하여 알고 계실 겁니다.


추적 플래그 1118은 SGAM contention을 감소시키기 위하여 사용하는 추적 플래그입니다. (참고로 Shared Global Allocation Map 하나에 64000 개의 mixed extent들의 상태 정보가 기록됩니다.)

큰 규모의 시스템에서 빈번하게 호출되는 저장 프로시저들에 임시 테이블과 인덱스를 만드는 DDL 문이 포함되어 있다면 SQL Server 2005에서도 추적 플래그 1118 이 필요하다고 합니다. tempdb 경합이 심하게 발생하면 시스템이 응답하지 않는 것과 같은 심각한 상황이 발생할 수도 있으므로 DBA는 이 내용에 대해 사전에 인지하고 있는 것이 좋습니다.

1. SQL Server 시작 옵션에 추적 플래그 -T1118을 추가합니다.
2. 프로세서의 수와 동일한 숫자만큼 tempdb 데이터 파일 수를 늘립니다. 이 때 tempdb 데이터 파일의 크기는 모두 동일하게 만듭니다. 가령 8 CPU 서버라면 동일한 크기의 tempdb 데이터 파일을 8개가 되도록 데이터 파일을 추가합니다. 로그 파일은 하나인 상태 그대로 유지합니다.
3. 계획휴지 시에 SQL Server를 재시작합니다.

tempdb 성능에 관심 있으신 분은 다음 기술 문서를 꼭 읽어 보세요. 실제로 튜닝 컨설팅을 수행하면서 국내의 대용량 OLTP 시스템들의 경우에 근본적인 튜닝은 저장 프로시저에서 임시 테이블을 사용하지 않도록 수정하여 성능을 개선하였지만, 소스 수정 전에 임시로 tempdb 경합을 완화시키는데에는 추적 플래그 1118 과 tempdb 다중 데이터 파일 구조가 도움이 되었습니다.
반응형
반응형

작년에 MS에서 SQL Server MVP들을 미국에서 열리는 PASS에 보내 주었었는데, PASS 전체 참석자들을 대상으로 하는 공식 세미나가 끝난 다음에 MS에서 MVP들만을 대상으로 SQL Server 2005에 대한 몇 가지 세미나를 해 주었었습니다. 그 세션 중 하나가 tempdb에 대한 내용이었는데 tempdb라는 한 가지 주제를 가지고 한 시간 내내 설명하는 것을 보고, tempdb가 SQL Server 2005에서 보다 중요한 역할을 하게 되었다는 것을 느낄 수 있었습니다.

tempdb 데이터베이스의 크기와 물리적인 배치가 시스템의 성능에 영향을 미친다는 것은 이미 앞에서 말씀드린바 있습니다. tempdb의 기본적인 내용에 대해서는 앞에 올린 글을 참조하시기 바랍니다.

SQL Server 2005에서는 tempdb를 SQL Server 2000에 비해 더 많이 사용합니다. 어떤 기능을 사용하는가에 따라서 SQL Server 2000에서보다 tempdb를 훨씬 더 많이 사용하게 될 수도 있습니다.
그래서 SQL Server 2005에서는 DBA가 시스템을 구성하고 관리할 때 tempdb 관리 작업의 우선 순위가 높아졌다고 할 수 있습니다. tempdb의 작업 부하를 분산하여 성능 향상을 꾀하는 것도 필요하지만 그보다 더 중요한 것은 작업이 원활하게 수행될 수 있도록 tempdb를 적절한 크기로 구성하는 것이 중요합니다. 

Tempdb sizing을 위해서는 어떤 작업을 실행할 때 tempdb에 공간을 필요로 하는지 알아야겠지요 !!!

그렇다면 SQL Server 2005에서 어떤 작업이 tempdb를 사용하는지 알아보겠습니다. 일부 내용은 혹시 제가 잘못 한글로 번역하는 오류를 범할까 염려되어 영어 원문을 그대로 기술하였습니다. 저도 SQL Server 2005를 공부해 가는 사람이라 제가 모르는 부분이 더 있을지 모릅니다. 혹시 아래 기능들 외에 tempdb를 사용하는 작업에 대하여, 또는 tempdb sizing에 대하여 아시는 분은 답글 부탁드립니다.


1. DBCC CHECKDB

2. 내부 개체 
   - work file (해시 조인, SORT_IN_TEMPDB 옵션 사용 시) - CTE
   - work table (커서, 스풀)

3. LOB 변수

4. 서비스 브로커

5. 임시 개체

    1) 전역 임시 테이블, 로컬 임시 테이블

    2) table 변수

    3) 임시 저장 프로시저 

    4) 임시 커서

6. 버전 저장

    1) MARS

    2) 온라인 인덱스 재구성
         - 인덱스 크기의 2 ~ 3배가 필요함 (정렬, 임시 인덱스, 롤백)

    3) Row versioning 
         - [Size of Version Store] = 2 *
            [Version store data generated per minute] *
            [Longest running time (minutes) of your transaction] *
            number of concurrent transactions/users
         - 성능 모니터의 SQL Server 2005:Transactions 성능 개체에 Version Store에
            관련되는 다음과 같은 성능 카운터들이 추가되었습니다.
                - Version Store Size (KB)
                - Version Store unit count
                - Version Store unit creation
                - Version Store unit truncation

    4) 트리거

7. XML

이상입니다.


Version Store에 대해서는 좀 더 심도있는 공부가 필요할 것 같습니다. 성능 모니터의 한글 설명으로는 이해가 잘 되질 않네요. ^ ^
모르는 것이 많아져서 답답할 때가 많지만, 이렇게 끝없이 공부할 게 있고 잡힐 듯 하면서 잡히지 않는 데이터베이스, 참 매력적인 분야인 것 같습니다.

반응형
반응형

tempdb가 사용하는 공간을 동적 관리 뷰를 사용하여 확인할 수 있습니다.

tempdb 공간 사용 현황 확인하기

SELECT          

           SUM (user_object_reserved_page_count)*8 AS user_objects_kb,

           SUM (internal_object_reserved_page_count)*8 AS internal_objects_kb,

           SUM (version_store_reserved_page_count)*8 AS version_store_kb,

           SUM (unallocated_extent_page_count)*8 AS freespace_kb

FROM sys.dm_db_file_space_usage

WHERE database_id = 2;

GO

 

반응형
반응형

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

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


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


해결방법은 http://support.microsoft.com/kb/328551/
반응형

+ Recent posts

반응형