程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> Sql Server Tempdb原理:日志機制解析實踐

Sql Server Tempdb原理:日志機制解析實踐

編輯:關於SqlServer

筆者曾經在面試DBA時的一句”tempdb為什麼比其他數據庫快?”使得95%以上的應試者都一臉茫然.Tempdb作為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中我們可以看出,在普通表中執行一分鐘的腳本,tempdb只需執行22s.而普通表在tempdb中也只需27s均大大優於普通表中執行情況.

感興趣的朋友亦可在執行過程中觀察日志相關的性能技術器的運行情況如(Log Bytes Flusged \sec 等)

圖1-1

由此測試我們可以看出本文開始提到的”tempdb比其他數據庫快”.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved