SqlServer 에서 tempdb 의 로그 메커니즘 원리 분석 및 예시 공유
저 희 는 각각 사용자 데이터베이스(testpage),tempdb 에서 비슷 한 대상 t1,\#t1 을 만 들 고 tempdb 에서 비 임시 표를 만 든 다음 에 해당 하 는 insert 스 크 립 트(로 그 를 만 드 는 데 사용)를 실행 하고 실행 시간 을 기록 하여 tempdb 가 빠르다 는 것 을 비교 설명 합 니 다.
Code
사용자 데이터베이스 testpage
use testpage
go
create table t1
(
id int identity(1,1) not null,
str1 char(8000)
)
declare @t datetime2=sysutcdatetime()
declare @i int
set @i=1
while (@i<100000)
begin
insert into t1 select @i,'aa'
select @i=@i+1
end
select [extime]=DATEDIFF(S,@t,sysutcdatetime())
tempdb
use tempdb
go
create table #t1
(
id int not null,
str1 char(8000)
)
declare @t datetime2=sysutcdatetime()
declare @i int
set @i=1
while (@i<100000)
begin
insert into #t1 select @i,'aa'
select @i=@i+1
end
select [extime]=DATEDIFF(S,@t,sysutcdatetime())
임시 표 가 아 닌 tempdb 에서 실 행 됩 니 다.
use tempdb
go
create table t1
(
id int not null,
str1 char(8000)
)
declare @t datetime2=sysutcdatetime()
declare @i int
set @i=1
while (@i<100000)
begin
insert into t1 select @i,'aa'
select @i=@i+1
end
select [extime]=DATEDIFF(S,@t,sysutcdatetime())
그림 1-1 에서 알 수 있 듯 이 일반 표 에서 1 분 동안 스 크 립 트 를 실행 하면 tempdb 는 22s 만 실행 할 수 있 고 일반 표 는 tempdb 에서 도 27s 만 이 일반 표 에서 실행 하 는 상황 보다 훨씬 좋 습 니 다.관심 있 는 친 구 는 실행 과정 에서 로그 와 관련 된 성능 기술 기의 운행 상황 을 관찰 할 수 있 습 니 다(Log Bytes Flusged\sec 등).
그림 1-1
이 를 통 해 우 리 는 본 고 에서 언급 한'tempdb 가 다른 데이터 베이스 보다 빠르다'는 것 을 알 수 있다.
실제 tempdb 에 마법 이 있 는 것 이 아니 라 tempdb 의 로그 메커니즘 은 다른 데이터베이스 와 크게 다르다.
Tempdb 로그 메커니즘
Tempdb Simple 복구 모드(재 부팅 후 복원 작업 필요 없 음)
Tempdb 사용 최소 화 로그
Tempdb 는 시스템 CheckPoint 의 영향 을 받 지 않 습 니 다(시스템 checkpoint 는 tempdb 와 관련 되 지 않 지만 인위적인 tempdb 에서 실행 하면 떨 어 집 니 다)
Tempdb 는 데이터 페이지 를 디스크 에 저장 하기 전에 로 그 를 놓 을 필요 가 없습니다.(트 랜 잭 션 제출 로 그 는 놓 을 필요 가 없습니다)
빠르다
시스템 검사 점 자체 가 tempdb 를 돌아 가 는 것 을 볼 수 있 습 니 다.tempdb 가 실 행 될 때 로그 가 먼저 떨 어 지지 않 아 도 됩 니 다.또한 로그 기록 을 최소 화 합 니 다.
메모:시스템 checkpoint 검사 점 은 tempdb 를 돌아 가지 만 tempdb 에서 인위적으로 checkpoint 를 실행 하 는 것 은 역할 을 합 니 다.여러분 은 환경 에서 만 사용 하고 정식 환경 에서 신중하게 사용 해 야 합 니 다!
위의 인 스 턴 스 에서 우 리 는 표 의 유형 이 무엇 이 든 tempdb 에서 속도 가 크게 향상 되 는 것 을 볼 수 있 습 니 다.그러나 일반 표 의 실행 시간 은 임시 표 보다 약간 깁 니 다.이것 은 일반 표 의 로그 기록 정보 가 임시 표 보다 약간 많 기 때 문 입 니 다.
tempdb 최소 화 로그
더미 표(heap)에서 insert,update 작업 의 업데이트 정보 로 그 는 기록 할 필요 가 없습니다.
우 리 는 간단 한 실례 를 통 해 본다.
USE [tempdb]
GO
create table #nclst
(
id int identity(1,1) primary key nonclustered,---heaptable
str1 char(8000)
);
create table #clst
(
id int identity(1,1) primary key,------clustered
str1 char(8000)
);
checkpoint----- !
DBCC SHRINKFILE (N'templog' , 0, TRUNCATEONLY)
GO
insert into #nclst(str1) select 'aa'
select [Current LSN],Operation,CONTEXT,[Log Record Length]
from fn_dblog(null,null) where AllocUnitId is not null
checkpoint----- !
DBCC SHRINKFILE (N'templog' , 0, TRUNCATEONLY)
GO
insert into #clst(str1) select 'aa'
select [Current LSN],Operation,CONTEXT,[Log Record Length]
from fn_dblog(null,null) where AllocUnitId is not null
그림 1-2 에서 알 수 있 듯 이 쌓 인 표 에는 Insert 의\#ncls.str 1 의 구체 적 인 정 보 를 기록 하지 않 았 고 모 은 표 에는 해당 하 는 정 보 를 기록 했다.그림 1-2
Tempdb 로그 가 왜 필요 합 니까?
tempdb 가 재 부팅 할 때마다 다시 만 듭 니 다.로 그 를 다시 만 들 필요 가 없 지만 실행 과정 에서 스크롤 백 이 필요 할 수도 있 습 니 다.이것 도 tempdb 로그 가 존재 하 는 이유 입 니 다.
Tempdb 는 리 셋(Redo)은 지원 되 지 않 지만 스크롤 백(rollback)을 지원 해 야 합 니 다.
tempdb 스크롤 백 에 대하 여...
Tempdb 에서 로그 파일 에 스크롤 백 을 사용 할 공간 이 충분 하지 않 으 면 전체 인 스 턴 스 가 다운 될 수 있 습 니 다!
Tempdb 최고의 실천-로그
a.tempdb 에서 checkpoint 를 사용 하지 마 십시오.
b tempdb 에서 너무 긴 사 무 를 시작 하지 마 십시오.(로 그 를 끊 을 수 없습니다.로 그 를 너무 크게 만 들 수 있 습 니 다.스크롤 백 할 수 없 을 때 스크롤 백 이 지연 되 는 경우)
c.보통 중간 표 가 일치 하 는 과정 을 tempdb 에서 만들어 야 합 니 다.(생 성 속도 가 빠 르 고 구체 적 인 상황 에 따라 정 해 야 합 니 다.)
d tempdb 에 서 는 로 더 를 사용 하 는 속도 가 좋 습 니 다.(구체 적 인 상황 에 따라 정 해 야 합 니 다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ql 서버에서 되돌아오는 값을 가진 저장 프로세스를 만듭니다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.