SQL Server中的記憶體設定

by adonisy 6. 七月 2020 13:58

作 者:楊先民
審 稿:張智凱
 

這期將要來探討在 SQL Server中設定記憶體的相關問題,這個問題一直被人提起,而本期則是參考國外文章所做的一些整理。

最大與最小記憶體設定

最小服務器記憶體(MB)和最大服務記憶體(MB)設置用於控制SQL Server為其記憶體池可用的記憶體量。記憶體池包含許多組件。下面詳細介紹了一些最大的組件

1.Buffer cache:緩衝區高速緩存在從磁碟讀取或寫入磁碟之前和之後儲存資料和索引頁。即使查詢所需的頁面不在高速緩存中,它們也仍將首先寫入緩衝區高速緩存,然後再從記憶體中檢索,而不是直接從磁碟寫入。

2.Procedure cache:程式的高速緩存不僅包含儲存過程的執行計劃,還包含臨時查詢,準備好的語句和觸發程序的執行計劃。當SQL Server開始最佳化查詢時,它首先檢查此緩存以查看是否已經存在合適的計劃。

3.Log cache:日誌的緩存在將日誌記錄寫入交易日誌之前將其儲存。

4.Log pool:雜湊表,允許HA / DR和數據分散的技術(例如AlwaysOn,鏡像和複寫)快速訪問所需的日誌記錄。

5.CLR:CLR引用實例內部使用的.NET代碼。在舊版本的SQL Server中,CLR位於主要記憶體池內之外,因為該記憶體池僅處理單個8KB頁面分配。從SQL Server 2012開始,記憶體池現在可以處理單頁和多頁分配,

因此已引入CLR。

在許多環境中,您可能希望為「最小和最大服務器記憶體」提供相同的值。這將避免SQL Server動態管理其保留的記憶體量的使用。

但是,如果您有多台 SQL Server,則動態記憶體管理可能會有所幫助,以便在任何給定時間具有最大工作量的SQL Server可以消耗最多的資源。如果您的 SQL Server託管在Active/Active的 Cluster上,則必須格外考慮。

我已經看到一個客戶端打開“鎖定頁面在記憶體中”,然後為每個節點上的 SQL Server實體配置最小和最大記憶體的示例,就好像它們是獨立的盒子一樣。

在故障轉移時,其餘節點崩潰,因為一個框上沒有足夠的RAM來支持所有實體的記憶體需求。無論您的環境如何配置,您總是希望為操作系統保留足夠的記憶體。假設服務器上沒有運行一個 SQL Server實體,並且

沒有其他應用程式(例如SSIS的 package),通常可以將最小和最大記憶體設置都設置為以下最低值:

RAM-2GB

(RAM/8) *7

如果您有多台的 SQL Server實體,您當然可以根據實體的需要在實體之間適當分配此數字。如果服務器上還有其他應用程式正在運行,則還必須考慮它們的記憶體要求,並將其添加到操作系統要求中。

畢竟,記憶體這個東西,是作業系統會使用、 SQL Server會使用,還有一般的應用程式也會使用,我們稱為叫「共享記憶體」,換言之就是誰用的多,誰就用的少,而 RAM需要先扣掉 2GB也是因為要先預留給

作業系統使用。

最大記憶體以及最小記憶體的設定可以利用伺服器的屬性視窗中的記憶體頁籤來設定,如下圖:

你也可以用下列的 T-SQL指令來進行組態:

DECLARE @MemOption1 INT = (SELECT physical_memory_kb/1024 - 2048 FROM sys.dm_os_sys_info)

DECLARE @MemOption2 INT = (SELECT ((physical_Memory_kb/1024)/8) * 7 FROM sys.dm_os_sys_info)

IF @MemOption1 <= 0

BEGIN EXEC sys.sp_configure 'min server memory (MB)', @MemOption2

EXEC sys.sp_configure 'max server memory (MB)', @MemOption2

RECONFIGURE

END

ELSE IF @MemOption2 < @MemOption1

BEGIN EXEC sys.sp_configure 'min server memory (MB)', @MemOption2

EXEC sys.sp_configure 'max server memory (MB)', @MemOption2

RECONFIGURE

END

ELSE

BEGIN EXEC sys.sp_configure 'min server memory (MB)',

@MemOption1 EXEC sys.sp_configure 'max server memory (MB)', @MemOption1 RECONFIGURE END


以上就是本期的主題,設定 SQL Server記憶體。

Tags:

SQL Server資料庫 | 楊先民Adonis Young

不允許評論

NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List