讓SQL Server為工作負(fù)載高峰提前做好準(zhǔn)備
毫無疑問,許多電子商務(wù)網(wǎng)站都經(jīng)歷過假期的高訪問量。例如,1-800-Flowers.com公司(1-800-Flowers.com網(wǎng)站)就在情人節(jié)、母親節(jié)、圣誕節(jié)、復(fù)活節(jié)、感恩節(jié)、秘書節(jié),以及團(tuán)隊感謝周那一天遇到了劇增的訂單。還有其他大多數(shù)的在線零售商也都經(jīng)歷過從感恩節(jié)一直持續(xù)到12月26日的訂貨高峰期。
那么你從這些公司身上可以了解到,他們需要保持高可用性,快速運行的數(shù)據(jù)庫。下面我將按照以下的總體概念和清單,討論幾種你可以應(yīng)對高峰來臨的方式。
可用性方法
集群
高可用性通常包含了集群。當(dāng)你需要較高級別的正常運轉(zhuǎn)時間的時候,你需要對SQL Server進(jìn)行集群,由以下幾部分組成,有幾個節(jié)點集合在一起形成的一個單個實例的集群,他們在面對客戶的時候表現(xiàn)為一個單個的節(jié)點。如果集群中的一個節(jié)點掉線了(由于SQL Server錯誤,硬件錯誤或者維護(hù)),其他的節(jié)點將會自動接過它的工作負(fù)載。客戶根本不需要重新連接到其他的節(jié)點上,因為這些節(jié)點都連接到一個虛擬的服務(wù)器上,它漂浮在所有活動節(jié)點之上。
集權(quán)提供了對硬件和軟件錯誤的自動錯誤容忍,但是它通常不會提供對本地錯誤的容忍(例如,放置集群的大廈或者房間內(nèi)的電源壞了)。注意力應(yīng)該放在消除單個點的失敗,例如冗余電源供應(yīng)或者備用的發(fā)電機(jī)能源。
地理集群和負(fù)載均衡
其他的高可用性方法包括地理集群,集群節(jié)點分布在不同的位置上;或者地理負(fù)載均衡,IP地址客戶可以在主要的數(shù)據(jù)中心和災(zāi)難恢復(fù)網(wǎng)站之間交換。
EMC公司,日立數(shù)據(jù)系統(tǒng)公司,還有現(xiàn)在的收購了賽門鐵克的Veritas軟件公司都提供了硬件的數(shù)據(jù)鏡像,它可以提供持續(xù)的復(fù)制,這樣災(zāi)難恢復(fù)網(wǎng)站就可以保證擁有你的數(shù)據(jù)的實時拷貝。硬件數(shù)據(jù)鏡像工具可以用于連接地理IP解決方案,為災(zāi)難恢復(fù)網(wǎng)站提供自動化的錯誤恢復(fù)。
縮小規(guī)模
你還可以利用縮小規(guī)模的方法來將你的數(shù)據(jù)分散到多個工作機(jī)器上。不再讓1000個用戶都連接到一個SQL Server上,而是讓10個SQL Server上分別連接100個用戶。你的數(shù)據(jù)訪問模式必須要與此相匹配,客戶連接到哪個SQL Server都沒關(guān)系,或者你必須要激活粘性會話。通過這種方式,每個客戶在其會話長度內(nèi)都連接到一個單個的SQL Server上。
例如,如果你的聯(lián)盟中有10個SQL Server提供分類信息,并且在這10個SQL Server之間的數(shù)據(jù)也是相同的,那么客戶連接到哪個SQL Server上,然后又重新連接到哪個SQL Server上,這都沒有關(guān)系。SQL Server 2005中的點對點應(yīng)用程序就被恰好是為這種類型的縮小規(guī)模設(shè)計的。
注意,SQL Server不能自動將負(fù)載分散給其他的SQL Server。你需要均衡網(wǎng)絡(luò)負(fù)載,一邊將負(fù)載分布到多個網(wǎng)絡(luò)服務(wù)器上,并且聯(lián)盟中的每個網(wǎng)絡(luò)服務(wù)器上都安裝一個或者多個SQL Server。
理解工作流
電子商務(wù)公司整年都在準(zhǔn)備他們的旺季銷售高峰。系統(tǒng)架構(gòu)師研究工作流,以便于理解事務(wù)中的哪一個處理是必需的,哪一個可以是批量處理的,哪一個是可以從其他機(jī)器的并行處理中受益的。
考慮一下一般的下訂單的操作。輸入信用卡并且在網(wǎng)頁上經(jīng)過驗證,確保數(shù)字以某個序列開始,并且滿足一定的長度。這個步驟可以在瀏覽器上進(jìn)行,這樣就可以不用占用網(wǎng)絡(luò)服務(wù)器的處理器周期。信用卡交費通常是沒有經(jīng)過授權(quán)的,因為網(wǎng)絡(luò)服務(wù)呼叫會在這一點上慢下來,導(dǎo)致整體的可測量性解決方案等級下降。如果不需要網(wǎng)絡(luò)服務(wù)呼叫認(rèn)證每一個信用卡事務(wù),那么電子商務(wù)網(wǎng)站就可以支持好幾千個,甚至更多的頁面。信用卡將會在稍后大批處理過程中進(jìn)行處理。
正如上面的例子所演示等,通過仔細(xì)查看工作流,系統(tǒng)架構(gòu)師辨認(rèn)出可以異步執(zhí)行的處理,那么整體的可測量性方案等級將會上升。
負(fù)載測試
具有廣泛代表意義的負(fù)載測試是在負(fù)責(zé)復(fù)制產(chǎn)品機(jī)器的機(jī)器上完成的。這些負(fù)載測試都是經(jīng)過嚴(yán)格分析的,能夠標(biāo)識并消除瓶頸。當(dāng)瓶頸消除之后,負(fù)載測試將會重復(fù)進(jìn)行,以標(biāo)識并消除新的瓶頸。只要資源允許,這個迭代的過程將會持續(xù)下去。
預(yù)備
通常,所有的開發(fā)都會在電子商務(wù)網(wǎng)站迎接新的銷售旺季之前幾個星期結(jié)束,然后進(jìn)入預(yù)備模式,不會再對產(chǎn)品機(jī)器進(jìn)行任何的更改。自動的批處理管理也暫停了,只有在定位真正的攻擊的時候才會使用批處理。在確定成為產(chǎn)品之前,這些緊急批處理的影響會在QA環(huán)境中進(jìn)行評估。
清單“準(zhǔn)備工作負(fù)載高峰”
作為數(shù)據(jù)庫管理員,你會采取什么行動來讓SQL Server做好對負(fù)載高峰的準(zhǔn)備?以下是一些可遵循的步驟。
清單:讓SQL Server為工作負(fù)載高峰做好準(zhǔn)備
維護(hù)
如果你根本沒有任何維護(hù)窗口:
?為盡可能多的不必要數(shù)據(jù)進(jìn)行存檔
?運行dbreindex來更新你的索引,并重新建立填充因子。
在朝大型的數(shù)據(jù)庫上,你也許不能這么奢侈。如果情況確實如此,那么采取以下步驟:
關(guān)閉自動更新統(tǒng)計
當(dāng)表被修改的內(nèi)容達(dá)到20%的極限時,SQL Server在默認(rèn)情況下自動為表更新統(tǒng)計數(shù)據(jù)。要關(guān)閉自動更新/創(chuàng)建統(tǒng)計,輸入以下命令:
sp_dboption ,'auto create statistics', off
sp_dboption ,'auto update statistics', off
關(guān)閉自動壓縮
事務(wù)日志或者數(shù)據(jù)庫文件的壓縮都會引起性能的下降。請按照SQL Server MVP Tibor Karaszi 在《壓縮數(shù)據(jù)庫或者事務(wù)日志文件所產(chǎn)生的后果》中給出的建議。
關(guān)閉自動增長
關(guān)閉自動增長,限制數(shù)據(jù)庫數(shù)據(jù)文件的最大尺寸。如果讓你的數(shù)據(jù)庫必須增加數(shù)據(jù)庫文件或者事務(wù)日志文件的尺寸,那么勢必會降低性能并使事務(wù)串行化。請參考微軟相關(guān)文章獲取更多有關(guān)自動增長所產(chǎn)生后果的信息。
關(guān)閉索引碎片整理和索引優(yōu)化
索引碎片整理是一項在線操作(即,在不鎖定表的情況下進(jìn)行的操作),它可能引起相當(dāng)可觀的對表和索引的鎖,它會降低你的SQL Server整體性能。具有碎片的索引的影響將會在虛擬數(shù)據(jù)庫中最小化;只有當(dāng)你執(zhí)行索引掃描的時候才會對索引查找產(chǎn)生負(fù)面影響。請參考這篇白皮書來獲得更多信息:索引維護(hù)操作.
維護(hù)你的事務(wù)日志
一個被忽視的事務(wù)日志將會擁有大量的虛擬日志文件(VLF)。你可以通過減少虛擬日志文件的數(shù)量來獲得更好的性能。你可以通過經(jīng)常的清空事務(wù)日志來達(dá)到這個目標(biāo)(例如,每五分鐘)。
采用快速數(shù)據(jù)庫備份解決方案
通過使用第三方的SQL備份產(chǎn)品,減少你的備份對數(shù)據(jù)庫性能的影響。
重新編譯存儲過程
重新編譯你的存儲過程,以確保選擇了優(yōu)化的執(zhí)行計劃。
運行預(yù)熱腳本
在你的數(shù)據(jù)庫上運行預(yù)熱腳本,確保你的查詢可以從緩沖中獲得最大收益。
警惕性能監(jiān)控
你可以通過使用標(biāo)準(zhǔn)模板運行SQL Server Profiler,以此最小化對系統(tǒng)性能的影響。其他供應(yīng)商提供的各種工具,例如, Imdeca Software Inc. 和 Idera,都可以為你的SQL Server提供窗口來評估你系統(tǒng)的健康程度和性能。許多這樣的工具都具有針對你的SQL Server的記憶和處理器印記。Performance Monitor也同樣具有,并且它還可以為你的數(shù)據(jù)庫提供一個可替換的窗口。
定時批處理任務(wù)
為你的批處理任務(wù)或者DTS包定時,讓它們在低負(fù)載的時間運行,或者把它們推遲,直到假期的高峰時期過后。
總結(jié)
這里是我們對于你可以提前采用的提高SQL Server解決方案在負(fù)載高峰時期的性能的全部預(yù)備措施。除了仔細(xì)地計劃和測試之外,別無他法。我們回顧了一系列的有關(guān)可能會導(dǎo)致產(chǎn)品系統(tǒng)在高負(fù)載情況下的性能下降的設(shè)置的貼士。判斷一下哪些貼士可能會為你所用,最有代表性的環(huán)境中對它進(jìn)行測試。
