程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 淺談tempdb在SqlServer系統中的重要作用,tempdbsqlserver

淺談tempdb在SqlServer系統中的重要作用,tempdbsqlserver

編輯:更多數據庫知識

淺談tempdb在SqlServer系統中的重要作用,tempdbsqlserver


簡介:

       tempdb是SQLServer的系統數據庫一直都是SQLServer的重要組成部分,用來存儲臨時對象。可以簡單理解tempdb是SQLServer的速寫板。應用程序與數據庫都可以使用tempdb作為臨時的數據存儲區。一個實例的所有用戶都共享一個Tempdb。很明顯,這樣的設計不是很好。當多個應用程序的數據庫部署在同一台服務器上的時候,應用程序共享tempdb,如果開發人員不注意對Tempdb的使用就會造成這些數據庫相互影響從而影響應用程序。

特性:

1、 tempdb中的任何數據在系統重新啟動之後都不會持久存在。因為實際上每次SQLServer啟動的時候都會重新創建tempdb。這個特性就說明tempdb不需要恢復。

2、 tempdb始終設置為“simple”的恢復模式,當你嘗試修改時都會報錯。也就是說已提交事務的事務日志記錄在每個檢查點後都標記為重用。

3、 tempdb也只能有一個filegroup,不能增加更多文件組。

4、 tempdb被用來存儲三種類型的對象:用戶對象,內部對象、版本存儲區

以上是基礎知識。

如果SQL Server對tempdb訪問不頻繁,

tempdb對數據庫不會產生影響;相反如果訪問很頻繁,loading就會加重,

tempdb的性能就會對整個DB產生重要的影響

.優化tempdb的性能變的很重要的,尤其對於大型數據庫。

注:在優化tempdb之前,請先考慮tempdb對SQL Server性能產生多大的影響,評估遇到的問題以及可行性。

1、最小化的使用tempdb

SQL Server中很多的活動都活發生在tempdb中,所以在某種情況可以減少多對tempdb的過度使用,以提高SQL Server的整體性能。

如下有幾處用到tempdb的地方:

(1)用戶建立的臨時表.如果能夠避免不用,就盡量避免. 如果使用臨時表儲存大量的數據且頻繁訪問,考慮添加index以增加查詢效率。

(2)Schedule jobs.如DBCC CHECKDB會占用系統較多的資源,較多的使用tempdb.最好在SQL Server loading比較輕的時候做。

(3)Cursors.游標會嚴重影響性能應當盡量避免使用。

(4)CTE(Common Table Expression).也會在tempdb中執行。

(5)SORT_INT_TEMPDB.建立index時會有此選項。

(6)Index online rebuild。

(7)臨時工作表及中間結果集.如JOIN時產生的。

(8)排序的結果。

(9)AFTER and INSTEAD OF triggers。

不可能避免使用tempdb,如果有tempdb的瓶頸或issue,就該返回來考慮這些問題了。

2、重新分配tempdb的空間大小

在SQL Server重啟時會自動建立8MB大小的tempdb,自動增長默認為10%. 對於小型的數據庫來說,8MB大小已經足夠了.但是對於較大型的數據庫來說,8MB遠遠不能滿足SQL Server頻繁活動的需要,因此會按照10%的比例增加,比如說需要1GB,則會需要較長的時間,此段時間會嚴重影響SQL Server的性能. 建議在SQL Server啟動時設置tempdb的初始化的大小(如下圖片設置為MDF:300MB,LDF:50MB),也可以通過ALTER DATABASE來實現. 這樣在SQL Server在重啟時tempdb就會有足夠多的空間可利用,從而提高效率。

難點在於找到合理的初始化大小,在SQL Server活動頻繁且tempdb不在增長時會是一個合適的值,可以設置此時的值為Initial Size;當然還會有更多的考量,此為一例。

3、不要收縮tempdb(如沒有必要)

有時候我們會注意到tempdb占用很大的空間,但是可用的空間會比較低時,會想到shrink數據庫來釋放磁盤空間, 此時要小心了,可能會影響到性能。

4 、分派tempdb的文件和其他數據文件到不用的IO上

tempdb對IO的要求比較高,最好分配到高IO的磁盤上且與其他的數據文件分到不用的磁盤上,以提高讀寫效率.

tempdb也分成多個文件,一般會根據CPU來分,幾個CPU就分幾個tempdb的數據文件. 多個tempdb文件可以提高讀寫效率並且減少IO活動的沖突。

常用的腳本如下:

--查tempdb庫的大小

select a.name, sum(size)*8.0/1024/1024 as [GB]

, sum(size)*8.0/1024 as [MB]

from master.dbo.sysdatabases a inner join master.dbo.sysaltfiles b on a.dbid=b.dbid

WHERE a.name='tempdb'

group by a.name

order by 1

後記:

tempdb是SQL Server重要的一部分,今天發現數據的tempdb特別大,所以對tempdb的一些了解和總結,以後還需要進一步學習。


tempdb數據庫的作用是什

Tempdb數據庫由整個系統的所有數據庫使用。SQL Server每次啟動時,tempdb數據庫被重新建立。當用戶與SQL S... model數據庫是為用戶創建數據庫提供的模板。
 

一道面試題 :sql server 2000有什數據庫系統,它們各自的作用是什?

master,model,msdb,northwind,pubs,tempdb

pubs 示例數據庫
pubs 示例數據庫以一個圖書出版公司為模型,用於演示 Microsoft® SQL Server™ 數據庫中可用的許多選項。該數據庫及其中的表經常在文檔內容所介紹的示例中使用。

Northwind 示例數據庫
Northwind Traders 示例數據庫包含一個名為 Northwind Traders 的虛構公司的銷售數據,該公司從事世界各地的特產食品進出口貿易。

master 數據庫
master 數據庫記錄 SQL Server 系統的所有系統級別信息。它記錄所有的登錄帳戶和系統配置設置。master 數據庫是這樣一個數據庫,它記錄所有其它的數據庫,其中包括數據庫文件的位置。master 數據庫記錄 SQL Server 的初始化信息,它始終有一個可用的最新 master 數據庫備份。

tempdb 數據庫
tempdb 數據庫保存所有的臨時表和臨時存儲過程。它還滿足任何其它的臨時存儲要求,例如存儲 SQL Server 生成的工作表。tempdb 數據庫是全局資源,所有連接到系統的用戶的臨時表和存儲過程都存儲在該數據庫中。tempdb 數據庫在 SQL Server 每次啟動時都重新創建,因此該數據庫在系統啟動時總是干淨的。臨時表和存儲過程在連接斷開時自動除去,而且當系統關閉後將沒有任何連接處於活動狀態,因此 tempdb 數據庫中沒有任何內容會從 SQL Server 的一個會話保存到另一個會話。

默認情況下,在 SQL Server 在運行時 tempdb 數據庫會根據需要自動增長。不過,與其它數據庫不同,每次啟動數據庫引擎時,它會重置為其初始大小。如果為 tempdb 數據庫定義的大小較小,則每次重新啟動 SQL Server時,將tempdb 數據庫的大小自動增加到支持工作負荷所需的大小這一工作可能會成為系統處理負荷的一部分。為避免這種開銷,可以使用 ALTER DATABASE 增加 tempdb 數據庫的大小。

model 數據庫
model 數據庫用作在系統上創建的所有數據庫的模板。當發出 CREATE DATABASE 語句時,新數據庫的第一部分通過復制 model 數據庫中的內容創建,剩余部分由空頁填充。由於 SQL Server 每次啟動時都要創建 tempdb 數據庫,model 數據庫必須一直存在於 SQL Server 系統中。

msdb 數據庫
msdb 數據庫供 SQL Server 代理程序調度警報和作業以及記錄操作員時使用。
 

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