sql server에서 제공하는 시스템 데이터베이스 중 tempdb에 대한 간략한 설명 및 튜닝 방법에 대해 설명하고자 한다.
SQL Server의 인스턴스에서 연결된 모든 사용자가 사용할 수 있는 전역 리소스이다.
tempdb에는 저장되는 대상은 아래와 같다.
명시적으로 생성되는 임시 사용자 개체
- 전역, 로컬 임시테이블과 임시테이블 인덱스 (ex : #PRODUCT_TABLE)
- 임시 저장 프로시저
- 테이블 변수 (ex : @PRODUCT_TABLE)
- 테이블 변환 함수에서 반환되는 테이블
- 커서
데이터베이스 엔진에서 만든 내부 개체
- 커서, 정렬, 임시 대용량 객체(Large Object) 등의 작업 중간 데이터
- 해시 조인(hash join)이나 해시 집계 작업(hash aggregate operation)
- SORT_IN_TEMPDB가 지정된 인덱스 생성,
- GROUP BY, ORDER BY, UNION 쿼리 같은 작업의 중간 정렬 결과
tempdb는 위와 같은 다양한 작업을 수행하므로 운영 시스템의 규모에 비해 작은 크기로 설정하게 되면, SQL Server가 재시작할때마다 tempdb의 크기를 증가시키기 위해 물리적인 시간이 소비될 수 있다. 또한, tempdb가 운영 시스템이 설치된 디스크와 동일한 디스크에 설정하게 되면, 디스크의 I/O를 같이 사용하게 되므로 디스크 병목으로 인한 성능 저하가 발생할 수 있다. 또한 CPU가 여러개의 논리 프로세스를 가지고 있으나, 하나의 tempdb를 구성하게 될때도 디스크 병목으로 인한 성능 저하가 발생할 수 있다. 아래는 MSDN에서 제시한 tempdb의 설정하는 방법에 대한 내용이다. (SQL Server 2019 이후의 버전에서는 메모리 최적화 tempdb를 제공하므로 아래와 같은 설정 방법이 유의미할지는 추가적인 검토가 필요하다.)
tempdb의 저장 디스크를 운영 시스템과 분리하고 논리 프로세스의 개수만큼 tempdb를 분할한다.
--1. tempdb의논리파일이름확인
SELECT name, physical_name, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb')
GO
--2. ALTER DATABASE 사용하여파일위치변경
ALTER DATABASE tempdb
MODIFY FILE(NAME = tempdev, FILENAME = 'd:\mssql\tempdb.mdf')
ALTER DATABASE tempdb
MODIFY FILE(NAME = templog, FILENAME = 'e:\mssql\templog.ldf')
GO
--3. CPU의 논리프로세스의 개수만큼 파일 분할 및 사이즈 변경 및 파일 사이즈, 증가옵션설정
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', SIZE = 20480KB , FILEGROWTH = 10240KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'd:\mssql\tempdev2.ndf' , SIZE = 20480KB , FILEGROWTH = 10240KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'd:\mssql\tempdev3.ndf' , SIZE = 20480KB , FILEGROWTH = 10240KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev4', FILENAME = N'd:\mssql\tempdev4.ndf' , SIZE = 20480KB , FILEGROWTH = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog', SIZE = 163840KB )
GO
--4.SQL Server를중지하고다시시작
--5.SQL Server 서비스가시작된것을확인후, 제대로이동이되었는지확인.
SELECT name, physical_name, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb')
GO
※ 논리프로세서의 개수 확인하는 방법
- 실행 (windows + R)
- msinfo32 실행
- 시스템 요약 - 프로세서의 논리 프로세서 개수 확인
'DBMS > SQL-SERVER' 카테고리의 다른 글
SQL Server 기본키 없이 인덱스가 존재할 때 (0) | 2020.11.17 |
---|---|
SQL-Server 테이블을 텍스트로 출력(BCP) (0) | 2020.11.11 |
SQL Server (MS-SQL) 비트마스크(bitMask) 활용 (0) | 2020.10.30 |
SQL Server(MS-SQL) 날짜 및 시간의 변경 방법(datetime) (0) | 2020.10.29 |
SQL Server(MS-SQL) 현재 날짜와 시간 가져오기 (0) | 2020.10.24 |