tempdb 시스템 데이터베이스는 SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스이며 다음을 보유하는 데 사용됩니다.
전역 또는 로컬 임시 테이블, 임시 저장 프로시저, 테이블 변수 또는 커서와 같이 명시적으로 만들어진 임시 사용자 개체입니다.
SQL Server 데이터베이스 엔진에서 만든 내부 개체(예: 스풀 또는 정렬에 대한 중간 결과를 저장하기 위한 작업 테이블).
행 버전 관리 격리 또는 스냅샷 격리 트랜잭션을 사용하여 커밋된 읽기를 사용하는 데이터베이스의 데이터 수정 트랜잭션에 의해 생성되는 행 버전입니다.
온라인 인덱스 작업, MARS(다중 활성 결과 집합) 및 AFTER 트리거와 같은 기능에 대한 데이터 수정 트랜잭션에 의해 생성되는 행 버전입니다.
tempdb 내의 작업은 최소 로깅됩니다. 이렇게 하면 트랜잭션을 롤백할 수 있습니다. tempdb 는 SQL Server가 시작될 때마다 다시 만들어지므로 시스템은 항상 데이터베이스의 정리된 복사본으로 시작합니다. 임시 테이블 및 저장 프로시저는 연결이 끊어지면 자동으로 삭제되고 시스템이 종료될 때 연결이 활성화되지 않습니다. 따라서 tempdb 에는 SQL Server의 한 세션에서 다른 세션으로 저장할 것이 없습니다. tempdb에서는 백업 및 복원 작업이 허용되지 않습니다.
tempdb의 물리적 속성
다음 표에서는 tempdb 데이터 및 로그 파일의 초기 구성 값을 나열합니다. 이러한 파일의 크기는 SQL Server 버전마다 약간 다를 수 있습니다.
| 파일 | 논리적 이름 | 실제 이름 | 파일 증가 |
|---|---|---|---|
| 기본 데이터 | 템프데브 | tempdb.mdf | 디스크가 가득 찼을 때까지 10% 자동 증가 |
| 로그 | templog | templog.ldf | 10%에서 최대 2테라바이트까지 자동 증가 |
tempdb의 크기는 시스템의 성능에 영향을 줄 수 있습니다. 예를 들어 tempdb 크기가 너무 작으면 SQL Server를 시작할 때마다 워크로드 요구 사항을 지원하기 위해 데이터베이스 자동 증가에 시스템 처리가 너무 많이 사용될 수 있습니다. tempdb의 크기를 늘려 이 오버헤드를 방지할 수 있습니다.
tempdb의 성능 향상
SQL Server에서 tempdb 성능은 다음과 같은 방법으로 향상됩니다.
임시 테이블 및 테이블 변수는 캐시될 수 있습니다. 캐싱을 사용하면 임시 개체를 삭제하고 만드는 작업이 매우 빠르게 실행되고 페이지 할당 경합이 줄어듭니다.
할당 페이지 래치 프로토콜이 향상되었습니다. 이렇게 하면 사용되는 UP(업데이트) 래치 수가 줄어듭니다.
tempdb에 대한 로깅 오버헤드가 줄어듭니다. 이렇게 하면 tempdb 로그 파일의 디스크 I/O 대역폭 사용량이 줄어듭니다.
tempdb에서 혼합 페이지를 할당하는 알고리즘이 향상되었습니다.
tempdb 데이터 및 로그 파일 이동
tempdb 데이터 및 로그 파일을 이동하려면 시스템 데이터베이스 이동을 참조하세요.
데이터베이스 옵션
다음 표에서는 tempdb 데이터베이스의 각 데이터베이스 옵션에 대한 기본값과 옵션을 수정할 수 있는지 여부를 나열합니다. 이러한 옵션에 대한 현재 설정을 보려면 sys.databases 카탈로그 뷰를 사용합니다.
| 데이터베이스 옵션 | 기본값 | 수정 가능 |
|---|---|---|
| 스냅샷 격리 허용 (ALLOW_SNAPSHOT_ISOLATION) | OFF | 예 |
| ANSI_NULL_DEFAULT (기본 ANSI NULL 값) | 끄기 | 예 |
| ANSI_NULLS | OFF | 예 |
| ANSI_PADDING (ANSI 표준 여백) | OFF | 예 |
| ANSI_WARNINGS (ANSI 경고) | OFF | 예 |
| ARITHABORT (아리드어보트) | OFF | 예 |
| 자동 닫기 | OFF | 아니오 |
| 자동 생성 통계 | 켜짐 | 예 |
| 자동 축소 | OFF | 아니오 |
| 자동 통계 업데이트 | 켜짐 | 예 |
| 자동_통계_비동기_업데이트 | 끄기 | 예 |
| 변경 추적 | 끄기 | 아니오 |
| CONCAT_NULL_YIELDS_NULL (NULL 병합 중 null 반환) | 끄기 | 예 |
| 커서_커밋_종료 | OFF | 예 |
| 기본 커서 | 글로벌 | 예 |
| 데이터베이스 가용성 옵션 | 온라인 다중 사용자 읽기_쓰기 |
아니오 아니오 아니오 |
| 날짜 상관 관계 최적화 | 끄기 | 예 |
| DB 체이닝 | 켜짐 | 아니오 |
| 암호화 | OFF | 아니오 |
| NUMERIC_ROUNDABORT (숫자 반올림 중단) | OFF | 예 |
| 페이지_검증 | SQL Server의 새 설치에 대한 CHECKSUM입니다. SQL Server 업그레이드에 대한 NONE입니다. |
예 |
| 매개 변수화 | 간단한 | 예 |
| 따옴표로 묶인 식별자 | 끄기 | 예 |
| READ_COMMITTED_SNAPSHOT (읽기 커밋된 스냅샷) | 끄기 | 아니오 |
| 복구 | 간단한 | 아니오 |
| 재귀적 트리거 | OFF | 예 |
| Service Broker 옵션 | 브로커 활성화 | 예 |
| 신뢰할 수 있는 | 끄기 | 아니오 |
이러한 데이터베이스 옵션에 대한 설명은 ALTER DATABASE SET 옵션(Transact-SQL)을 참조하세요.
제한 사항
tempdb 데이터베이스에서는 다음 작업을 수행할 수 없습니다.
파일 그룹 추가
데이터베이스 백업 또는 복원
데이터 정렬 변경. 기본 데이터 정렬은 서버 데이터 정렬입니다.
데이터베이스 소유자 변경 tempdb 는 sa가 소유합니다.
데이터베이스 스냅샷 만들기
데이터베이스를 삭제합니다.
데이터베이스에서 게스트 사용자를 삭제합니다.
변경 데이터 캡처를 사용하도록 설정합니다.
데이터베이스 미러링에 참여합니다.
기본 파일 그룹, 기본 데이터 파일 또는 로그 파일을 제거합니다.
데이터베이스 또는 주 파일 그룹의 이름을 변경합니다.
DBCC CHECKALLOC를 실행합니다.
DBCC CHECKCATALOG를 실행합니다.
데이터베이스를 OFFLINE으로 설정합니다.
데이터베이스 또는 주 파일 그룹을 READ_ONLY 설정합니다.
권한
모든 사용자는 tempdb에서 임시 개체를 만들 수 있습니다. 사용자는 추가 권한을 받지 않는 한 자신의 개체에만 액세스할 수 있습니다. tempdb에 대한 연결 권한을 취소하여 사용자가 tempdb를 사용하지 못하도록 할 수 있지만 일부 일상적인 작업에 tempdb를 사용해야 하므로 권장되지 않습니다.
관련 내용
sys.master_files(Transact-SQL)