您的位置:首頁技術文章
文章詳情頁

讓SQL Server為工作負載高峰提前做好準備

瀏覽:4日期:2023-10-30 18:30:16

毫無疑問,許多電子商務網站都經歷過假期的高訪問量。例如,1-800-Flowers.com公司(1-800-Flowers.com網站)就在情人節、母親節、圣誕節、復活節、感恩節、秘書節,以及團隊感謝周那一天遇到了劇增的訂單。還有其他大多數的在線零售商也都經歷過從感恩節一直持續到12月26日的訂貨高峰期。

那么你從這些公司身上可以了解到,他們需要保持高可用性,快速運行的數據庫。下面我將按照以下的總體概念和清單,討論幾種你可以應對高峰來臨的方式。

可用性方法

集群

高可用性通常包含了集群。當你需要較高級別的正常運轉時間的時候,你需要對SQL Server進行集群,由以下幾部分組成,有幾個節點集合在一起形成的一個單個實例的集群,他們在面對客戶的時候表現為一個單個的節點。如果集群中的一個節點掉線了(由于SQL Server錯誤,硬件錯誤或者維護),其他的節點將會自動接過它的工作負載??蛻舾静恍枰匦逻B接到其他的節點上,因為這些節點都連接到一個虛擬的服務器上,它漂浮在所有活動節點之上。

集權提供了對硬件和軟件錯誤的自動錯誤容忍,但是它通常不會提供對本地錯誤的容忍(例如,放置集群的大廈或者房間內的電源壞了)。注意力應該放在消除單個點的失敗,例如冗余電源供應或者備用的發電機能源。

地理集群和負載均衡

其他的高可用性方法包括地理集群,集群節點分布在不同的位置上;或者地理負載均衡,IP地址客戶可以在主要的數據中心和災難恢復網站之間交換。

EMC公司,日立數據系統公司,還有現在的收購了賽門鐵克的Veritas軟件公司都提供了硬件的數據鏡像,它可以提供持續的復制,這樣災難恢復網站就可以保證擁有你的數據的實時拷貝。硬件數據鏡像工具可以用于連接地理IP解決方案,為災難恢復網站提供自動化的錯誤恢復。

縮小規模

你還可以利用縮小規模的方法來將你的數據分散到多個工作機器上。不再讓1000個用戶都連接到一個SQL Server上,而是讓10個SQL Server上分別連接100個用戶。你的數據訪問模式必須要與此相匹配,客戶連接到哪個SQL Server都沒關系,或者你必須要激活粘性會話。通過這種方式,每個客戶在其會話長度內都連接到一個單個的SQL Server上。

例如,如果你的聯盟中有10個SQL Server提供分類信息,并且在這10個SQL Server之間的數據也是相同的,那么客戶連接到哪個SQL Server上,然后又重新連接到哪個SQL Server上,這都沒有關系。SQL Server 2005中的點對點應用程序就被恰好是為這種類型的縮小規模設計的。

注意,SQL Server不能自動將負載分散給其他的SQL Server。你需要均衡網絡負載,一邊將負載分布到多個網絡服務器上,并且聯盟中的每個網絡服務器上都安裝一個或者多個SQL Server。

理解工作流

電子商務公司整年都在準備他們的旺季銷售高峰。系統架構師研究工作流,以便于理解事務中的哪一個處理是必需的,哪一個可以是批量處理的,哪一個是可以從其他機器的并行處理中受益的。

考慮一下一般的下訂單的操作。輸入信用卡并且在網頁上經過驗證,確保數字以某個序列開始,并且滿足一定的長度。這個步驟可以在瀏覽器上進行,這樣就可以不用占用網絡服務器的處理器周期。信用卡交費通常是沒有經過授權的,因為網絡服務呼叫會在這一點上慢下來,導致整體的可測量性解決方案等級下降。如果不需要網絡服務呼叫認證每一個信用卡事務,那么電子商務網站就可以支持好幾千個,甚至更多的頁面。信用卡將會在稍后大批處理過程中進行處理。

正如上面的例子所演示等,通過仔細查看工作流,系統架構師辨認出可以異步執行的處理,那么整體的可測量性方案等級將會上升。

負載測試

具有廣泛代表意義的負載測試是在負責復制產品機器的機器上完成的。這些負載測試都是經過嚴格分析的,能夠標識并消除瓶頸。當瓶頸消除之后,負載測試將會重復進行,以標識并消除新的瓶頸。只要資源允許,這個迭代的過程將會持續下去。

預備

通常,所有的開發都會在電子商務網站迎接新的銷售旺季之前幾個星期結束,然后進入預備模式,不會再對產品機器進行任何的更改。自動的批處理管理也暫停了,只有在定位真正的攻擊的時候才會使用批處理。在確定成為產品之前,這些緊急批處理的影響會在QA環境中進行評估。

清單“準備工作負載高峰”

作為數據庫管理員,你會采取什么行動來讓SQL Server做好對負載高峰的準備?以下是一些可遵循的步驟。

清單:讓SQL Server為工作負載高峰做好準備

維護

如果你根本沒有任何維護窗口:

?為盡可能多的不必要數據進行存檔

?運行dbreindex來更新你的索引,并重新建立填充因子。

在朝大型的數據庫上,你也許不能這么奢侈。如果情況確實如此,那么采取以下步驟:

關閉自動更新統計

當表被修改的內容達到20%的極限時,SQL Server在默認情況下自動為表更新統計數據。要關閉自動更新/創建統計,輸入以下命令:

sp_dboption ,'auto create statistics', off

sp_dboption ,'auto update statistics', off

關閉自動壓縮

事務日志或者數據庫文件的壓縮都會引起性能的下降。請按照SQL Server MVP Tibor Karaszi 在《壓縮數據庫或者事務日志文件所產生的后果》中給出的建議。

關閉自動增長

關閉自動增長,限制數據庫數據文件的最大尺寸。如果讓你的數據庫必須增加數據庫文件或者事務日志文件的尺寸,那么勢必會降低性能并使事務串行化。請參考微軟相關文章獲取更多有關自動增長所產生后果的信息。

關閉索引碎片整理和索引優化

索引碎片整理是一項在線操作(即,在不鎖定表的情況下進行的操作),它可能引起相當可觀的對表和索引的鎖,它會降低你的SQL Server整體性能。具有碎片的索引的影響將會在虛擬數據庫中最小化;只有當你執行索引掃描的時候才會對索引查找產生負面影響。請參考這篇白皮書來獲得更多信息:索引維護操作.

維護你的事務日志

一個被忽視的事務日志將會擁有大量的虛擬日志文件(VLF)。你可以通過減少虛擬日志文件的數量來獲得更好的性能。你可以通過經常的清空事務日志來達到這個目標(例如,每五分鐘)。

采用快速數據庫備份解決方案

通過使用第三方的SQL備份產品,減少你的備份對數據庫性能的影響。

重新編譯存儲過程

重新編譯你的存儲過程,以確保選擇了優化的執行計劃。

運行預熱腳本

在你的數據庫上運行預熱腳本,確保你的查詢可以從緩沖中獲得最大收益。

警惕性能監控

你可以通過使用標準模板運行SQL Server Profiler,以此最小化對系統性能的影響。其他供應商提供的各種工具,例如, Imdeca Software Inc. 和 Idera,都可以為你的SQL Server提供窗口來評估你系統的健康程度和性能。許多這樣的工具都具有針對你的SQL Server的記憶和處理器印記。Performance Monitor也同樣具有,并且它還可以為你的數據庫提供一個可替換的窗口。

定時批處理任務

為你的批處理任務或者DTS包定時,讓它們在低負載的時間運行,或者把它們推遲,直到假期的高峰時期過后。

總結

這里是我們對于你可以提前采用的提高SQL Server解決方案在負載高峰時期的性能的全部預備措施。除了仔細地計劃和測試之外,別無他法。我們回顧了一系列的有關可能會導致產品系統在高負載情況下的性能下降的設置的貼士。判斷一下哪些貼士可能會為你所用,最有代表性的環境中對它進行測試。

標簽: Sql Server 數據庫
国产综合久久一区二区三区