SQL Server會(huì)自動(dòng)創(chuàng)建一個(gè)名為tempdb的數(shù)據(jù)庫作為工作空間使用,當(dāng)您在存儲(chǔ)過程中創(chuàng)建一個(gè)臨時(shí)表格時(shí),比如(CREATE TABLE #MyTemp),無論您正在使用哪個(gè)數(shù)據(jù)庫,SQL數(shù)據(jù)庫引擎都會(huì)將這個(gè)表格創(chuàng)建在tempdb數(shù)據(jù)庫中。
而且,當(dāng)您對(duì)大型的結(jié)果集進(jìn)行排序,比如使用ORDER BY或GROUP BY或UNION或執(zhí)行一個(gè)嵌套的SELECT時(shí),如果數(shù)據(jù)量超過了系統(tǒng)內(nèi)存容量,SQL數(shù)據(jù)庫引擎就會(huì)在tempdb中創(chuàng)建工作表格。在您運(yùn)行DBCC REINDEX或者向現(xiàn)有的表格中添加集群序列時(shí), SQL數(shù)據(jù)庫引擎同樣會(huì)使用tempdb。實(shí)際上,任何針對(duì)大型表格的ALTER TABLE命令都會(huì)在tempdb中吃掉大量的磁盤空間。
在理想狀態(tài)下,SQL會(huì)在完成指定操作后自動(dòng)清理,并銷毀這些臨時(shí)表格,但是,很多問題都會(huì)導(dǎo)致錯(cuò)誤。比如,您的代碼創(chuàng)建了一個(gè)事務(wù),但是卻沒能執(zhí)行或重新運(yùn)行,那么這些孤兒對(duì)象將遺留在tempdb中。而且,對(duì)大型數(shù)據(jù)庫運(yùn)行DBCC CHECK時(shí),它還會(huì)消耗掉大量的空間,您往往會(huì)發(fā)現(xiàn)tempdb比設(shè)想的要大很多,甚至還會(huì)收到SQL即將用完磁盤空間的出錯(cuò)信息。
您有很多方法可以來修正這一情況,但從長(zhǎng)遠(yuǎn)看來,您需要執(zhí)行其它的步驟來保證正常使用。
為tempdb“減肥”最簡(jiǎn)單的辦法就是關(guān)閉SQL數(shù)據(jù)庫引擎然后重新啟動(dòng),但是在重要的任務(wù)中,這樣做可能難度很大;另一方面,如果您已經(jīng)處于無法承受的狀態(tài),那么我的建議就是將這個(gè)壞消息告知您的上司,然后開始操作。
如果您幸運(yùn)擁有另外一塊磁盤可以用來放置tempdb,可以進(jìn)行如下的操作:
USE master
GO
ALTER DATABASE tempdb modify file (name = tempdev, filename ='NewDrive:Pathtempdb.mdf')
GO
ALTER DATABASE tempdb modify file (name = templog, filename ='NewDrive:Pathtemplog.ldf')
GO
還有三項(xiàng)關(guān)于tempdb的屬性應(yīng)該檢查:自動(dòng)增長(zhǎng)標(biāo)記,初始大小和恢復(fù)模式,以下是關(guān)于這些屬性的小竅門:
自動(dòng)增長(zhǎng)標(biāo)記:記住將這個(gè)標(biāo)記設(shè)為True。
初始大小:tempdb的初始大小要根據(jù)常用的工作負(fù)載來設(shè)定,如果有很多用戶在使用GROUP BY、ORDER BY或者對(duì)大型表格進(jìn)行聚合操作,那么您的常用工作負(fù)載會(huì)相當(dāng)大。如果服務(wù)器脫機(jī)時(shí),您可能需要檢查日志文件與數(shù)據(jù)文件是否位于同一磁盤,如果這樣的話,應(yīng)當(dāng)將需要將它們轉(zhuǎn)移到新的磁盤上,您只需指明相應(yīng)的數(shù)據(jù)庫并使用相同的命令即可。
恢復(fù)模式:將恢復(fù)模式設(shè)定為True意味著讓SQL自動(dòng)截去tempdb的日志文件(在使用了每個(gè)表格之后),要找出tempdb所使用的恢復(fù)模式,可以使用如下命令:
SELECT DATABASEPROPERTYEX('tempdb','recovery')
恢復(fù)模式有三種選擇:簡(jiǎn)單、完整或大量記錄(bulk-logged),如要改變?cè)O(shè)置,可以使用以下命令:
ALTER DATABASE tempdb SET RECOVERY SIMPLE
這些步驟可以優(yōu)化您系統(tǒng)中使用的tempdb,除了解決磁盤空間問題外,您還會(huì)發(fā)現(xiàn)SQL Server系統(tǒng)性能的提升。
新聞熱點(diǎn)
疑難解答
圖片精選