概述 本文是 Microsoft 和 Dell 公司共同合作的成果
用來說明 Microsoft® SQL Server
;
和 Dell 硬件的可縮放性
在 Dell 企業版八路服務器上運行的 SQL Server
可以支持上千個數據庫及為數眾多的用戶
同時還可以提供進行集中管理所需的性能
SQL Server
使用戶能夠在對稱多重處理 (SMP) 系統方面獲得最大的投資回報
用戶可以增加處理器
內存和磁盤
以建立集中管理的大型企業服務器
更多公司願意從應用服務提供商 (ASP) 那裡獲取數據庫服務
內部信息技術 (IT) 組織正在根據其總擁有成本 (TCO) 和可管理收益合並數據庫服務
本文重點介紹常見的 ASP 方案
其中一個系統上承載了多個數據庫
而每個數據庫中只有較少的幾個用戶
此方案同樣適用於希望將跨企業服務器的多個數據庫合並到一個集中管理的服務器上的公司
因此
本文的目的也就是要說明如何使用多個實例成功地調整單個服務器上增加的工作負荷
我們將使用 Microsoft bCentral
; 的應用程序來研究不同的配置對工作負荷性能的影響
測量依據是每分鐘的事務處理數 (TPM)
下表列出了在一台服務器上使用多個實例的優點
一台服務器可以承擔更大的工作負荷
可以基於不同服務水平協議 (SLA) 的要求靈活地分離數據庫
可以根據不同的性能要求分離數據庫
可以根據不同的備份和恢復要求分離數據庫
可以根據不同的安全性要求分離數據庫
可以根據變化控制
操作和維護要求分離數據庫
此案例研究的結果表明
與使用單個實例相比
使用多個實例可以支持更多數據庫
這樣一台服務器所能承載的工作負荷就增大了八倍
與多個實例一起使用時
設置處理器關系可以使工作負荷相對於默認設置增加
%
從數據文件中分離事務日志可以使工作負荷增加
%
為將日志和文件放在不同設備上的最佳實踐提供了其他支持
當某台服務器專用於 SQL Server 時
可以獲得最佳效果
本文提供了一些一般的原則
以幫助用戶理解成功配置多個實例以獲取最佳吞吐量過程中所涉及的標准
簡介 鑒於越來越多的客戶開始關注服務器功能合並
我們期望 ASP 和企業 IT 部署多個 SQL Server
實例
以承載更多的數據庫
分離數據庫的能力使得 ASP 或企業 IT 能夠更靈活地向客戶提供不同層次的服務
而無需使用單獨的計算機
要使用這種方法
需要確定何時使用多個實例
以及如何配置這些實例以獲得最佳性能
最佳配置是在研究過若干個參數(包括多個實例
內存配置
CPU 關系
磁盤布局和 TPM 中的恢復模式)的影響之後確定的
本文重點介紹一個常見的方案
其中一個系統上承載了多個數據庫
而每個數據庫只有較少的幾個用戶
上述參數的影響可以從稱為
PACE
的實際應用程序中看出
PACE 來自 Microsoft bCentral 的一個財務應用程序
它運行在一組服務器上
這些服務器包括
Microsoft SQL Server
Enterprise Edition
Microsoft Windows®
Datacenter
; Server 和 Dell PowerEdge
servers
PACE 應用程序 所部署的 PACE 應用程序是一個會計和財務管理產品
是 Microsoft bCentral 為客戶提供的眾多服務之一
PACE 用來幫助小型企業更有效地完成日常工作
它包括處理財務問題
銀行業務
生成工資單
記錄銷售
采購信息以及快速方便地生成報告的功能
為了向每位客戶提供實體安全的會計控制和可靠的多用戶訪問
該應用程序在一台服務器上提供了許多小型財務數據庫
為每位客戶建立一個數據庫
它還使用戶能夠對安全性
備份和恢復
變化控制和維護操作進行更精確的控制
此應用程序為每個數據庫提供了
多個存儲過程
以支持 Web 服務
這種反傳統的設計為系統管理和 SQL Server 的性能優化帶來了新的問題
最大的問題是
隨著數據庫的增多
支持大量存儲過程所需要的內存也在成倍地增加
對於 SQL Server 來說
需要具有虛擬內存空間
以便為每個數據庫上的每個過程編譯執行計劃
然後將該計劃保存在過程高速緩存中
對於 PACE 應用程序來說
為
個數據庫高速緩存的執行計劃數量為
*
即
個高速緩存條目
PACE 數據庫的數量越多
所需的服務器過程高速緩存大小就越大
如果執行計劃的數量超出了過程高速緩存能夠存儲的數量
將對執行重新進行編譯
這將減少處理查詢的吞吐量
利用傳統的方法(例如使存儲過程參數化)不能解決此問題
進行有效的調整需要完成特定的配置
以增加用於過程高速緩存的有效內存空間
其他問題還包括如何有效地利用 CPU
以處理由於數據庫和用戶數量增加而導致頻繁發生並發活動的情況
以及如何有效地利用最佳磁盤布局和最佳恢復模式
使用多個實例 使用多個實例可以增加每台服務器上的數據庫數量和工作負荷
當數據庫的數量和相應的工作負荷達到一定水平後
將多個 SQL Server 實例中的數據庫分組是一個好辦法
因為這樣可以緩解內存壓力
為每個實例的服務器過程高速緩存分配更多內存可以獲得良好的性能
並能夠提供更好的操作和安全隔離
測試表明
使用多個實例可以增加數據庫的總數以及系統上產生的相應工作負荷
同時還能維護每個數據庫的吞吐量
圖
表明
當 PACE 數據庫的數量從
增加至
時
單個實例的性能將降低
但是如果分散到
個實例上
每個實例上運行
個數據庫
那麼每分鐘的事務處理數量是在一個實例上運行
個數據庫時的
倍
在
個實例中的每個實例上運行高工作負荷的
個數據庫幾乎利用了此硬件配置中的全部 CPU 容量
所以通過在
個實例中的每個實例上運行
個數據庫來增加數據庫的總數不能增加總吞吐量(但是
系統仍然顯示了一個可接受的吞吐量)
圖
表明
當單個 SQL Server 上的數據庫數量(或客戶端連接數量)增加時
每個數據庫的工作負荷吞吐量將減少
如果每個實例的數據庫保持在
個
則每個數據庫的吞吐量在單個實例和在
個實例上是一樣的
但是當增加至
個實例後
吞吐量會因為 CPU 的限制而減少
圖 系統上的總工作負荷吞吐量與系統上的 PACE 數據庫總數 圖 每個數據庫上的工作負荷吞吐量與系統上的 PACE 數據庫數量 為什麼要在此方案中使用多個實例
在一個實例上使用上千個 PACE 數據庫會造成性能下降
SQL Server
最多可以為該過程高速緩存使用
GB 的虛擬內存(如果在 boot
ini 中設置了 /
GB 開關
則為
GB)
當單個實例上的數據庫數量從
增加至
時
過程高速緩存中將沒有足夠的虛擬內存來保存內存中增加的所有查詢執行計劃
為了釋放內存
以便為其他存儲過程的計劃騰出空間
系統會丟棄過程高速緩存中的某些執行計劃
但是此操作要求在需要時重新編譯這些被丟棄的存儲過程計劃
請注意
這樣所造成的頻繁的重新編譯工作會影響工作負荷性能
使用多個實例緩解內存壓力
如圖
所示
在具有
GB 以上物理內存的情況下
在多個實例上運行數據庫可以留出更多的內存供過程高速緩存使用(每個實例具有自己的虛擬地址空間和過程高速緩存)
當單個實例的 PACE 數據庫數量增至數千後
這些數據庫對象會占用太多供過程高速緩存使用的內存空間
從而導致性能下降
過程高速緩存將被丟棄
然後進行重新編譯
綜上所述
我們建議使用多個實例
圖 不同配置中過程高速緩存的有效內存 其他類似的設計也面臨同樣的問題
決定多個實例是否能夠提高性能的關鍵因素是所有執行計劃所需的內存空間總量
所需的內存空間總量是由執行計劃的平均大小
每個數據庫的存儲過程數量和數據庫數量決定的
如果每個數據庫中有較多的過程
那麼即使使用較少的數據庫也會產生同樣的問題
此外
如果較少的數據庫中存在非常復雜的過程
即使每個數據庫的存儲過程較少
也會產生同樣的問題
多個實例的內存配置 要使多個實例發揮最佳性能
只需指定合理的最小服務器內存
而無需額外調整內存配置
我們注意到
如果為每個實例預留
GB 的最小服務器內存並保持開放最大的服務器內存
在性能方面要比使用默認的動態內存分配提高
%
這樣獲得的性能與使用最佳靜態內存分配一樣
無需進行高成本的反復重新校准
使用此方法的客戶應注意
此方法可能會影響同一服務器上其他應用程序的內存分配
爭用內存的其他應用程序會影響動態內存分配
因此
Microsoft 建議您將此系統專用於 SQL Server
將此系統專用於 SQL Server 的另外一個優點是使配置能夠支持不同實例上的不同工作負荷
無需為了確定最合適的內存配置而進行特別的測試和調整
這種方法(將系統專用於 SQL Server)能夠減少為了在工作負荷不同的情況下獲得最佳性能而重新配置內存的工作
簡化內存配置可以提高系統性能 為每個實例使用最小內存配置可以獲得與使用最佳靜態分配時一樣的性能
可以減少為確定每個實例的最佳靜態分配所進行的測試工
From:http://tw.wingwit.com/Article/program/SQLServer/201311/21961.html