tempdb 데이터베이스
tempdb 시스템 데이터베이스는 SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스로서 다음 항목을 보관하는 데 사용됩니다.
전역 또는 로컬 임시 테이블, 임시 저장 프로시저, 테이블 변수, 커서 등 명시적으로 생성된 임시 사용자 개체
스풀 또는 정렬의 중간 결과를 저장하기 위한 작업 테이블 등 SQL Server 데이터베이스 엔진에서 만든 내부 개체
행 버전 관리 격리를 사용하여 커밋된 읽기 또는 스냅숏 격리 트랜잭션을 사용하는 데이터베이스의 데이터 수정 트랜잭션에서 생성된 행 버전
온라인 인덱스 작업, MARS(Multiple Active Result Sets), AFTER 트리거 등의 기능을 위해 데이터 수정 트랜잭션에서 생성된 행 버전
tempdb 내의 작업은 최소한으로 기록됩니다. 이렇게 하면 트랜잭션을 롤백할 수 있습니다. 시스템이 항상 깨끗한 데이터베이스 복사본으로 시작되도록 SQL Server를 시작할 때마다 tempdb가 다시 생성됩니다. 연결이 끊길 때 임시 테이블 및 저장 프로시저는 자동으로 제거되고 시스템이 종료될 때 활성 상태인 연결이 없습니다. 따라서 tempdb에 있는 어떠한 내용도 SQL Server의 한 세션에서 다른 세션으로 저장되지 않습니다. tempdb에서는 백업 및 복원 작업이 허용되지 않습니다.
tempdb의 물리적 속성
다음 표에는 tempdb 데이터 및 로그 파일의 초기 구성 값이 나열되어 있습니다. 이러한 파일의 크기는 SQL Server 버전에 따라 조금씩 다를 수 있습니다.
파일 |
논리적 이름 |
물리적 이름 |
파일 증가 |
---|---|---|---|
주 데이터 |
tempdev |
tempdb.mdf |
디스크가 꽉 찰 때까지 10%씩 자동 증가 |
로그 |
templog |
templog.ldf |
최대 2TB까지 10%씩 자동 증가 |
tempdb의 크기는 시스템 성능에 영향을 줄 수 있습니다. 예를 들어 tempdb 크기가 너무 작은 경우에는 SQL Server를 시작할 때마다 작업 요구 사항을 지원하기 위해 처리 시스템이 데이터베이스를 자동 확장하는 중이라 사용 가능하지 않을 수도 있습니다. tempdb의 크기를 늘려 이 오버헤드를 방지할 수 있습니다. 자세한 내용은 tempdb 성능 최적화 및 tempdb의 용량 계획을 참조하십시오.
tempdb의 성능 향상
SQL Server에서는 다음과 같은 방법으로 tempdb의 성능이 향상됩니다.
임시 테이블과 테이블 변수를 캐시할 수 있습니다. 캐싱을 사용하면 임시 개체를 삭제하고 만드는 작업이 매우 신속하게 실행되며 페이지 할당 경합이 줄어듭니다.
할당 페이지 래치 프로토콜이 향상되어 사용되는 UP(업데이트) 래치 수가 줄어듭니다.
tempdb에 대한 로깅 오버헤드가 감소하여 tempdb 로그 파일의 디스크 I/O 대역폭 사용이 줄어듭니다.
tempdb에 혼합 페이지를 할당하는 알고리즘이 향상되었습니다.
tempdb 데이터 및 로그 파일 이동
tempdb 데이터 및 로그 파일을 이동하려면 시스템 데이터베이스 이동을 참조하십시오.
데이터베이스 옵션
다음 표에는 tempdb 데이터베이스에 있는 각 데이터베이스 옵션의 기본값과 해당 옵션의 수정 가능 여부가 나열되어 있습니다. 이러한 옵션의 현재 설정을 보려면 sys.databases 카탈로그 뷰를 사용하십시오.
데이터베이스 옵션 |
기본값 |
수정 가능 |
---|---|---|
ALLOW_SNAPSHOT_ISOLATION |
OFF |
예 |
ANSI_NULL_DEFAULT |
OFF |
예 |
ANSI_NULLS |
OFF |
예 |
ANSI_PADDING |
OFF |
예 |
ANSI_WARNINGS |
OFF |
예 |
ARITHABORT |
OFF |
예 |
AUTO_CLOSE |
OFF |
아니요 |
AUTO_CREATE_STATISTICS |
ON |
예 |
AUTO_SHRINK |
OFF |
아니요 |
AUTO_UPDATE_STATISTICS |
ON |
예 |
AUTO_UPDATE_STATISTICS_ASYNC |
OFF |
예 |
CHANGE_TRACKING |
OFF |
아니요 |
CONCAT_NULL_YIELDS_NULL |
OFF |
예 |
CURSOR_CLOSE_ON_COMMIT |
OFF |
예 |
CURSOR_DEFAULT |
GLOBAL |
예 |
데이터베이스 가용성 옵션 |
ONLINE MULTI_USER READ_WRITE |
아니요 아니요 아니요 |
DATE_CORRELATION_OPTIMIZATION |
OFF |
예 |
DB_CHAINING |
ON |
아니요 |
ENCRYPTION |
OFF |
아니요 |
NUMERIC_ROUNDABORT |
OFF |
예 |
PAGE_VERIFY |
SQL Server 새 설치의 경우 CHECKSUM입니다. SQL Server 업그레이드의 경우 NONE입니다. |
예 |
PARAMETERIZATION |
SIMPLE |
예 |
QUOTED_IDENTIFIER |
OFF |
예 |
READ_COMMITTED_SNAPSHOT |
OFF |
아니요 |
RECOVERY |
SIMPLE |
아니요 |
RECURSIVE_TRIGGERS |
OFF |
예 |
Service Broker 옵션 |
ENABLE_BROKER |
예 |
TRUSTWORTHY |
OFF |
아니요 |
이러한 데이터베이스 옵션에 대한 자세한 내용은 ALTER DATABASE SET 옵션(Transact-SQL)를 참조하십시오.
제한 사항
다음 작업은 tempdb 데이터베이스에서 수행할 수 없습니다.
파일 그룹 추가
데이터베이스 백업 또는 복원
데이터 정렬 변경. 기본 데이터 정렬은 서버 데이터 정렬입니다.
데이터베이스 소유자 변경. tempdb는 dbo가 소유합니다.
데이터베이스 스냅숏 만들기
데이터베이스 삭제
데이터베이스에서 guest 사용자 삭제
변경 데이터 캡처 설정
데이터베이스 미러링 참여
주 파일 그룹, 주 데이터 파일 또는 로그 파일 제거
데이터베이스 또는 주 파일 그룹 이름 바꾸기
DBCC CHECKALLOC 실행
DBCC CHECKCATALOG 실행
데이터베이스를 OFFLINE으로 설정
데이터베이스나 주 파일 그룹을 READ_ONLY로 설정
권한
모든 사용자가 tempdb에 임시 개체를 만들 수 있습니다. 사용자가 추가 권한을 받는 경우를 제외하고 자신의 공유 개체에만 액세스할 수 있습니다. tempdb 연결 권한을 취소하여 사용자가 tempdb를 사용하지 못하도록 할 수 있지만 일부 일상적인 작업에서 tempdb를 사용해야 하므로 권장하지 않습니다.