程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 淺談SQL Server對於內存的管理

淺談SQL Server對於內存的管理

編輯:關於SqlServer

簡介

理解SQL Server對於內存的管理是對於SQL Server問題處理和性能調優的基本,本篇文章講述SQL Server對於內存管理的內存原理。

二級存儲(secondary storage)

對於計算機來說,存儲體系是分層級的。離CPU越近的地方速度愉快,但容量越小(如圖1所示)。比如:傳統的計算機存儲體系結構離CPU由近到遠依次是:CPU內的寄存器,一級緩存,二級緩存,內存,硬盤。但同時離CPU越遠的存儲系統都會比之前的存儲系統大一個數量級。比如硬盤通常要比同時代的內存大一個數量級。

圖1.計算機存儲體系

因此對於SQL Server來說,正常的生產系統所配置的內存通常不能裝載所有數據,因此會涉及到二級存儲,也就是磁盤。磁盤作為現代計算機系統中最後的機械存儲部件,讀取數據需要移動磁頭(具體關於磁盤的原理,可以看我之前寫的一篇文章),並且由於數據庫所訪問的數據往往是隨機分布在磁盤的各個位置,因此如果頻繁的讀取磁盤需要頻繁的移動磁頭,這個性能將會十分底下。

由計算機體存儲體系結構可以知道,計算機對於所有硬盤內數據的操作都需要首先讀取到內存,因此利用好內存的緩沖區而減少對磁盤IO的訪問將會是提升SQL Server性能的關鍵,這也是本篇文章寫作的出發點之一。

SQL Server引擎,一個自我調整的引擎

由於SQL Server過去一直面向是中小型企業市場的原因,SQL Server存儲引擎被設計成一個不需要太多配置就能使用的產品,從而減少了部署成本,但這也是很多人一直诟病的微軟開放的配置過少。而對於SQL Server如何使用內存,幾乎沒有直接可以配置的空間,僅僅開放的配置只有是否使用AWE,以及實例占用的最大或最小內存,如圖2所示。

圖2.SQL Server可控控制內存的選項

而對於具體的SQL Server如何使用內存,例如分配給執行計劃緩存多少,分配給數據buffer多少,這些都無法通過配置進行調控。這也是很多其它技術的開發人員對於使用微軟技術的開發人員充滿優越感的原因,而在我看來,雖然SQL Server提供可控配置的地方很少,但是很多地方都可以在通曉原理的情況下進行“間接”的配置。這也需要了解一些Windows的原理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved