Ram 建議與 SQL DB 大小
我們有一個大約 40GB 的中型 SQL 數據庫,並且即將將其移動到帶有伺服器 2008 r2 x64 的新盒子
一個昂貴的承包商剛剛進來並說我們需要 72gb 的記憶體,以便整個數據庫可以存在於記憶體中,我猜..,我覺得這很可笑,但也許我錯過了一些東西。
我想知道是否有一個“經驗法則”暗示在 SQL 實例上使用大量的 ram。
編輯: DB 有多達 150 人隨時點擊它,用於執行預訂系統。非常討厭的舊數據庫模式,大量表中的大量列,大量半無意義的索引。.net 訪問一些儲存過程,但也使用原始 sql 和 VisualDataFlex 使用的任何內容進行查詢。
謝謝
納特
沒有好的經驗法則。
額外 RAM 的有用性在很大程度上取決於您的數據庫的設計方式以及查詢模式或您的使用者。舉個極端的例子,如果您總共有 1 TB 的數據、良好的索引和 1000 個僅在 1 個特定行之後的同時使用者(從 dbo.BigTable 中選擇 *,其中 pkey_id = 42),那麼您可以使用很少的 RAM . 更多 RAM 的影響還取決於磁碟儲存子系統的速度。如果您有超快速儲存(良好的SAN、良好的DASD 或 SSD),當伺服器需要讀取數據時,您可能不會注意到延遲。
理想情況下,您希望數據庫在白天*可能需要的所有數據都記憶體在 RAM 中。*這有時被稱為“熱數據”或“熱頁”(在 SQL Server 中,數據以稱為“頁”的單元組織)。熱門數據的一個範例可能是今天或昨天的訂單,運送這些訂單的工人將需要這些數據。冷數據的一個例子可能是兩年前的訂單,但係統中仍然存在,因此 CSR 可以查找舊訂單。
一個精心設計的 OLTP 系統總共有 40 GB 的數據(相對於數據文件加起來高達 40 GB),熱數據可能只有 10 GB、5 GB、1 GB 甚至更少. 在過去,僅購買 64 GB 的 RAM 和 8 GB(甚至更少)之間的差異是天文數字,並且獲得正確購買的 RAM 數量是值得花大量時間的。
您總是需要一點額外的 RAM 用於“成本”,例如作業系統、病毒掃描程序、RDP 會話。您還希望將數據庫增長考慮在內。
要記住的另一件事是 RAM 以“塊”的形式出現。您無法在 48 GB 和 49 GB 之間做出決定,您必須加大力度,可能從 48 GB 升級到 64 GB。塊的大小取決於目前銷售的 RAM 技術以及您的記憶體有多少通道。舊伺服器對記憶體進行了一次更改,然後伺服器開始有兩個,現在大多數強大的伺服器都有三個記憶體通道。所以,你不能只加一根棍子,你需要一次加兩三個。
如果您有一個設計不良且索引不良的數據庫,正如您所說的那樣,SQL 將最終讀取大量數據,而設計更好的數據庫則不需要。將這些數據全部保存在 RAM 中並不意味著它不會全部讀取。這只是意味著它讀取 RAM 中的所有數據的速度比數據位於磁碟儲存上的速度要快。這不一定能解決你所有的問題;從 RAM 讀取數據速度很快,但仍然需要有限的時間,並且您仍然會遇到可能導致性能問題的阻塞和死鎖問題。
另一件事是,當人們在使用去年數據的系統上執行大型報告時,更多的 RAM 會有所幫助。人們一直將 OLTP 系統視為報告系統。這可能並不罕見,尤其是對於隨意的 SQL 查詢。
您可以在開發人員和測試人員身上花費時間(和金錢)來改進數據庫設計並對前端進行所需的任何更改。
對 hp.com 的一次快速訪問表明,我可以花大約 9,000 美元獲得一台(非常)精簡的伺服器,配備 96 GB 的 RAM。
(小於 $ 100 US per GB, without factoring out any of the other parts in the server. Parts like the power supply or the processor. Old people like me remember when RAM was $ 每兆字節 5,000 美元。帶 M。)
您在開發和測試時間上花費 9,000 美元的速度有多快?(按照我所在地區的公司費率,這幾乎不會讓你整整一個月。)這是否足以修復數據庫中的所有內容?如果更改後的程式碼中的錯誤漏掉了怎麼辦?
增加 RAM 的伺服器中斷可能需要一個小時,而且幾乎任何人都可以完成這項工作。遷移到全新的伺服器可能需要幾天的準備工作和一個小時的停機時間,並且您需要有經驗的人(可能是 DBA)。
添加 RAM 不太可能導致任何錯誤。遷移到新伺服器不太可能導致任何難以發現的問題。(一般情況下,東西要麼正常工作,要麼明顯壞了。通常是“哎呀,密碼錯誤”或“哎呀,忘記複製連結伺服器”,而不是“嘿,這個計算突然不能正常工作”。)
因此,假設我們要將所有內容都保存在 RAM 中並且我們有一個 40 GB 的數據庫,我們需要一些成本空間。我會考慮使用 48 GB 左右的伺服器。另外,我們想要一些增長空間。假設從這裡開始增長 25%,即 12 GB,最多需要 60 GB。下一個級別(我實際上可以購買)是 64 GB。如果您的顧問建議使用三通道伺服器,則下一級可能是 72 GB。所以,他的建議不一定是古怪的。也許您不需要那麼多核心/插槽,這可能會使您退回到雙通道伺服器(無論如何這會更便宜),並且您可以購買更少的 RAM。
TLDR:
簡而言之,我很少這樣,RAM 很便宜,時間很貴。如果您沒有資金、時間或意願來修復數據庫,或者您不想冒險將錯誤添加到您的應用程序中,那麼將 RAM 用於解決問題是很難質疑的。另一個好的舉措是提高磁碟儲存系統的響應能力(IOW、添加更多主軸、更多 RPM 或使用 SSD)。
我會問為什麼顧問不希望你花費一年和 100,000 美元讓他重寫系統。