Sql-Server

多實例 SQL Server 2008 R2 集群上的最大記憶體設置

  • January 23, 2018
  • SQL Server 2008 R2 多實例集群(在 VMware vSphere 5.1 上)
  • 2個節點,每個節點執行2個實例(共4個實例)
  • 每個節點 16GB RAM。

實例在同一個節點上的唯一一次是在我修補另一個節點時。

Brent Ozar 的“最大伺服器記憶體”建議是保留 Windows 4GB 或 10%,以較大者為準。

既然這是一個集群,我應該如何設置每個節點的最大記憶體?我應該將每個伺服器視為獨立伺服器嗎?這將確保不會浪費每個節點上的記憶體。但是,在節點故障中,所有 4 個實例的最大記憶體總量將超過單個節點的系統記憶體。在我們恢復第二個節點之前,這會導致時間範圍內的任何問題嗎?是否需要降低 4 個實例的最大記憶體設置,直到輔助節點恢復?或者 SQL Server 是否足夠聰明以繼續工作(必要時使用頁面文件)。

當您處於最佳配置時,您絕對應該充分利用硬體,並在您處於維護模式時進行調整。是的,當兩個(或所有四個?)實例在同一個節點上處於活動狀態時,您會遇到問題。由於故障轉移會在現在處於活動狀態的節點上啟動服務,因此您可以使用啟動過程調整該事件中每個伺服器的最大記憶體。我在這裡寫了一篇部落格,但出於不同的原因(故障轉移到具有不同記憶體量的節點):

基本上,您只需要檢查兩個實例是否在同一個節點上(這將需要在兩個方向上都設置一個連結伺服器),並進行相應的調整。基於我的部落格文章的一個非常快速且完全未經測試的範例,並假設目前每個節點上一次只有一個實例(如果您總共有 2 個或 4 個實例,這個問題有點模棱兩可):

CREATE PROCEDURE dbo.OptimizeInstanceMemory
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE
    @thisNode      NVARCHAR(255) = CONVERT(NVARCHAR(255),
                                 SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
    @otherNode     NVARCHAR(255),
    @optimalMemory INT = 12288, -- 12 GB
    @sql           NVARCHAR(MAX);

 SET @sql = N'SELECT @OtherNode = CONVERT(NVARCHAR(255), 
                       SERVERPROPERTY(N''ComputerNamePhysicalNetBIOS''));';

 EXEC [SERVER\INSTANCE].master..sp_executesql @sql, 
   N'@OtherNode NVARCHAR(255) OUTPUT', @OtherNode OUTPUT;

 IF @thisNode = @otherNode
 BEGIN -- we're on the same node, let's make everyone happy
   SET @optimalMemory = 6144;
 END

 SET @sql = N'EXEC sp_configure N''max server memory'', @om;
   RECONFIGURE WITH OVERRIDE;';

 EXEC                   master..sp_executesql @sql, N'@om INT', @optimalMemory;
 EXEC [SERVER\INSTANCE].master..sp_executesql @sql, N'@om INT', @optimalMemory;
END
GO

EXEC [master].dbo.sp_procoption 
 N'dbo.OptimizeInstanceMemory', 'startup', 'true';

當然,在另一個實例上再次創建它,交換使用的連結伺服器名稱。

如果您必鬚根據是否與 1、2 或 3 個其他實例共享目前節點進行調整,這會變得更加複雜。

請注意,這將導致其他副作用,例如清除計劃記憶體(如果其中一個實例只是重新啟動或故障轉移,在這種情況下計劃記憶體無論如何都是空的),但這些可以說比讓兩個實例都假設它們仍然有 12 GB 的記憶體可供使用 - 如果它們都被大量使用,將會有很多顛簸。

您可能還需要考慮其他選項,例如全域 maxdop、NUMA/CPU 親和性等,具體取決於系統對可用資源量的敏感程度。

引用自:https://dba.stackexchange.com/questions/50433