經常被問到的一個問題:對於SQL Server,我需要多少內存?這個問題還是有同樣的典型的“看情況而定”答案。在今天的文章里,我們來詳細看下“看情況而定的”的不同方面。
全新SQL Server安裝
首先,對於全新的SQL Server安裝,我想談下你如何估計你需要的內存大小。然后我會詳細談下你如何驗證現存的SQL Server有足夠的可用內存。
對於全新的SQL Server安裝,估計下需要多少內存,是個很有挑戰的工作,因為:
- 你必須知道在你的內存里(你的工作區)要保持多少數據
- 你必須知道你的索引策略是怎樣
- 你必須知道你是否要使用SQL Server的標准版,還是企業版本。
從這個清單里你可以看到,問題的答案主要取決於你。我們再談下清單里的每個項目。
你查詢的數據越多,你需要更多的內存。假設,你的大多數數據是用戶不常查詢的歸檔數據。在這個情況下,你的數據留在你的存儲系統里,且從不加載到內存。就想下你的日志和審計表:對於這些特定的表,你真的要查詢多少數據?
更好的索引策略是,你需要的內存更少!如果你有一個真的不好的索引策略(甚至你沒有索引策略!),你會需要大量的內存來支持你的工作負荷。假設你有100GB數據的表,你在表里查詢特定行。如果你在查詢謂語上沒有支持的索引。SQL Server會掃描你的整個堆表或聚集表。這就是說SQL Server需要加載你的“整個”表到內存里,只返回1條記錄!有了支持的索引,SQL Server可以進行高效的查找操作,只需要讀幾個頁就可以返回請求的記錄。這個會是天差地別——相信我!
對於你的SQL Server安裝,SQL Server的版本也會影響你可以有的內存大小。使用標准版本,你會限制只能用到128G的內存。這聽起來是很多內存,膽實際上是啥也不是!如果你的數據庫包含幾個TB的數據,且你用標准版本的SQL Server(預算限制)。在這個情況下,對於每個單獨的提交到SQL Server的查詢,你要非常小心,而且你要確保你要有完全一致的索引策略。使用企業版本就不需要考慮這么多,因為SQL Server支持系統的最大內存(Window Server 2016目前支持12TB的內存)。
現存的SQL Server安裝
對於現存的SQL Server安裝,對於的工作負荷,很容易找出你是否有足夠的內存。我們都知道,SQL Server在緩存池里存儲所有從存儲子系統里獲得的頁。而且緩存池為你提供一個名為PAGE LIFE EXPANCTANCY的計數器。這個計數器告訴你在緩存池里SQL Server在每個8K頁的存儲時間。
現在你的PAGE LIFE EXPANCTANCY計數器至少有一些幾千秒。內存越大,這個數字越高。如果你的PAGE LIFE EXPANCTANCY低於那個閾值,你會有很嚴重的問題,因為SQL Server不能在緩存池里保持你的數據太長時間。作為副作用,你會引入更多的物理I/O,整個服務器性能會下降。再提一下,你可以在索引策略上下功夫,確保從存儲子系統里讀取的數據都是你查詢邏輯請求的數據。
小結
對於你的SQL Server你應該有多少內存,真的是個“看情況而定”的問題。如果你使用標准版的SQL Server,你應該至少有這個版本給你支持的最大內存。越多越好。而對於企業版的SQL Server,你應該有盡可能多的內存。內存相比企業版的授權,現在已經越來越便宜了。因此不要在錯誤的地方省錢啦!
感謝關注!
原文鏈接
https://www.sqlpassion.at/archive/2016/09/19/how-much-ram-do-i-need-for-sql-server/