用于處理SQL Server安裝后期問題的更優(yōu)實踐
在任何企業(yè),SQL Server的安裝,配置和維護(hù)都是數(shù)據(jù)庫管理員的主要職責(zé)。本文將介紹在成功安裝了數(shù)據(jù)庫軟件之后所要遵循的一些重要的SQL Server更優(yōu)實踐。
讓我們先從給數(shù)據(jù)庫打補(bǔ)丁作為開始。Microsoft會時不時為SQL Server的各個服務(wù)生命尚未終止的版本發(fā)布一些服務(wù)包,累計更新和修正補(bǔ)丁以進(jìn)行技術(shù)支持。強(qiáng)烈推薦當(dāng)SQL Server安裝完成后,就馬上從Microsoft's Update Center頁面定期下載并安裝***的補(bǔ)丁。作為一項***實踐,這些補(bǔ)丁需要在開發(fā)環(huán)境下進(jìn)行測試然后接著遷移至生產(chǎn)環(huán)境。大多數(shù)補(bǔ)丁需要重啟SQL Server,因此如果可能的話在安裝它們的過程中要對停機(jī)時間有所規(guī)劃。
Microsoft SQL Server 2012在安裝設(shè)置中引入了Product Update功能。該功能可以發(fā)現(xiàn)并顯示***的可用更新來增強(qiáng)SQL Server的安全性和性能。SQL Server 2014和SQL Server 2016的安裝設(shè)置中也內(nèi)置了該功能。
配置tempdb來減少競爭
當(dāng)廣泛使用了tempdb的應(yīng)用程序在臨時數(shù)據(jù)庫中分配新頁的時候會引起加鎖競爭的問題。如果發(fā)生的競爭嚴(yán)重,與tempdb相關(guān)的查詢就可能會在短時間內(nèi)無響應(yīng)。這些現(xiàn)象表明需要調(diào)整SQL Server tempdb的大小來改善整體查詢性能。你所需要為tempdb配置的數(shù)據(jù)文件的數(shù)量取決于分配給SQL Server一個實例的邏輯處理器的數(shù)量。
創(chuàng)建數(shù)據(jù)庫維護(hù)計劃
當(dāng)你在一個SQL Server實例上創(chuàng)建了用戶數(shù)據(jù)庫之后,可以將數(shù)據(jù)庫維護(hù)計劃設(shè)置為自動任務(wù),例如重建索引以更好地組織數(shù)據(jù),壓縮數(shù)據(jù)文件以及備份所有數(shù)據(jù)庫和事務(wù)日志文件。這些備份可以讓你根據(jù)你的數(shù)據(jù)庫恢復(fù)計劃來實現(xiàn)數(shù)據(jù)庫即時點的恢復(fù)。另外,記得要定期備份除了tempdb之外(tempdb是無法備份的)內(nèi)置進(jìn)SQL Server的所有系統(tǒng)數(shù)據(jù)庫。這包括資源數(shù)據(jù)庫,它是一個用于存儲所有系統(tǒng)對象的只讀數(shù)據(jù)庫,它可以讓升級至新版的SQL Server變得更加簡便。但是,SQL Server無法對資源數(shù)據(jù)庫本身進(jìn)行備份——你必須手動做一個基于文件或是磁盤的備份。
定期運行DBCC CHECKDB命令
作為SQL Server***實踐的一部分,數(shù)據(jù)庫管理員(DBAs)還需要在他們的環(huán)境中主動檢測數(shù)據(jù)庫損壞。要做到這點的一個方法就是對所有用戶和系統(tǒng)數(shù)據(jù)庫定期運行DBCC CHECKDB命令。該命令會對數(shù)據(jù)庫執(zhí)行一致性檢查來尋找可能會導(dǎo)致數(shù)據(jù)丟失和處理問題的損壞。
要克服系統(tǒng)故障或其他災(zāi)難來最小化或避免數(shù)據(jù)損失,DBA還需要每夜或每周執(zhí)行全數(shù)據(jù)庫備份至另一個SQL Server實例——然后運行DBCC CHECKDB命令來識別潛在損壞。此外,對全數(shù)據(jù)庫備份和災(zāi)難恢復(fù)計劃的周期性測試是無可替代的。
對msd susect_pages表進(jìn)行監(jiān)控
在msdb系統(tǒng)數(shù)據(jù)庫中的suspect_pages表同樣能夠幫助識別數(shù)據(jù)庫損壞。它將可疑頁的標(biāo)識存入一個SQL Server實例,以及每頁的數(shù)據(jù)庫的ID。該表包括的錯誤有錯誤校驗和,不完整頁,以及錯誤消息823和824。因此該***實踐就是要創(chuàng)建一個定期運行的SQL Server任務(wù)來監(jiān)控suspect_pages表并且會在每次添加一個新記錄的時候給DBA團(tuán)隊發(fā)送郵件。
允許“執(zhí)行卷維護(hù)任務(wù)”
在數(shù)據(jù)庫創(chuàng)建和恢復(fù)以及數(shù)據(jù)或日志文件增長期間,SQL Server會用零來填充任何消費空間。該操作會消耗大量SQL Server資源??梢酝ㄟ^給SQL Server Database Engine服務(wù)賦予“執(zhí)行卷維護(hù)任務(wù)”的特權(quán)來避免這種情況。當(dāng)你賦予了這項特權(quán)后,SQL Server就會跳過賦零步驟并立即給數(shù)據(jù)庫分配新添加的空間。這同樣有助于減少恢復(fù)數(shù)據(jù)庫所要花費的時間。
使用專門的管理員連接
專門的管理員連接可以讓DBA在服務(wù)器處于非正常狀態(tài)以及無法響應(yīng)用戶連接的時候進(jìn)行接入。這有助于DBA運行故障診斷查詢或是診斷函數(shù)。使用sp_configure系統(tǒng)存儲過程可以在實例級別啟用該功能。
在實例上啟用備份壓縮
SQL Server Enterprise和Standard Edition的客戶可以使用數(shù)據(jù)庫備份壓縮功能。該功能可在SQL Server實例級別通過使用SQL Server Management Studio(SSMS)或T-SQL腳本來啟用。它還可以在不實際指定WITH COMPRESSION語句的情況下用于創(chuàng)建所有數(shù)據(jù)庫的壓縮備份。 配
置最小和***服務(wù)器內(nèi)存
SQL Server***實踐還包括配置最小和***內(nèi)存來分配給每個數(shù)據(jù)庫實例中的SQL Server進(jìn)程。在其默認(rèn)設(shè)置中,SQL Server會根據(jù)處理工作負(fù)載和可用資源來動態(tài)改變內(nèi)存分配。但DBA可以手動設(shè)置最小和***內(nèi)存級別來限制數(shù)據(jù)庫可訪問內(nèi)存的數(shù)量。而對于一個特定實例潛在***的服務(wù)器內(nèi)存來說,可以這樣計算,即減去操作系統(tǒng)和來自你的SQL Server系統(tǒng)中總內(nèi)存量的任何其他實例所需的內(nèi)存。
設(shè)置***程度的并行性
利用***程度的并行性設(shè)置來限制為并行計劃執(zhí)行所用的***處理器數(shù)量。其數(shù)量的默認(rèn)值是零,這可以讓SQL Server所有可用處理器增至最多64個。要對用于單個查詢執(zhí)行所使用的***CPU數(shù)量進(jìn)行限制,可以通過指定期望總數(shù)來實現(xiàn)。這是一項高級別的配置更改,可以通過使用SSMS或sp_configure系統(tǒng)存儲過程來實現(xiàn)。