2010-06-21 107 views
18

我一直在閱讀很多文章,建議將Memcached(或Velocity等)放在數據庫前比直接打數據庫更有效。它將通過查找內存緩存中的數據來減少數據庫點擊次數,這比訪問數據庫要快。Memcached vs SQL Server緩存

但是,SQL Server擁有自己的內存緩存,用於數據庫中的對象。當數據被檢索時,SQL Server維護它的緩存並且將(如果需要的話)從它的內存中拉出該行,而不是擊中該磁盤。

因此,如果SQL Server具有自己的緩存,那麼外部Memcached(或類似的)服務器有什麼好處?

我一直在閱讀的大部分文章都是圍繞社交網站,大多使用MySql。然而,關於使用SQL Server的MySpace的article建議在該系統上也使用緩存。

article解釋何時應該使用緩存,並且這article是一個對位。

回答

13

因此,如果SQL Server有自己的緩存,那麼外部Memcached(或類似的)服務器有什麼好處?

是SQL Server有自己的緩存,但他只緩存:
- 查詢計劃
- 網頁數據庫文件中的

但他不緩存:
- 結果從查詢

eg你有一個使用一些聚集了很多數據 的複雜查詢(認爲:我們有多少個不同的國家有我們的客戶數據庫: 從客戶GROUP SELECT DISTINCT逐國)

SQL Server將掃描次全客戶表,但結果集只有幾個條目。 當你重新發出查詢,SQL Server將重用查詢計劃,並重新掃描客戶表, (如果你是幸運的頁面仍然在內存中)

當你使用memcached你可以存儲的幾排您的結果集並重復使用它們而不連接到數據庫服務器。所以它會從你的數據庫服務器中獲取一些負載
注意:如果您的數據在SQL服務器上發生更改,請謹防一些陳舊的數據!

+0

謝謝。我不知道它將整個表存儲在內存中。很難找到它的文檔。你有鏈接記錄這個? – 2010-06-22 13:46:33

+0

糾正我最後的評論 - 我意識到頁面存儲在內存中,而不是整個表格。 – 2010-06-22 14:03:16

+1

當您已經對同一列進行分組時,您不必在列上使用DISTINCT。 – Kiril 2014-10-05 12:03:10

0

Velocity等,特別是當你的SQL服務器位於它自己的盒子上時。我們一直在使用ASP.NET的內置緩存,但希望轉移到Velocity。幾個Web服務器與SQL集羣進行通信,緩存確實有助於提高可伸縮性並減少SQL負載。

4

另一個好處也可能是SQL Server的擴展比較昂貴,而增加一個新的web/caching服務器可能會更便宜。

我們在應用程序級別使用緩存來存儲各種事物,而不是全部來自數據庫。您可以在代碼中操作數據對象,然後添加到緩存中。

如果需要,您甚至可以存儲標記(輸出緩存)。

在有一天使用緩存,我們的網站從能夠處理150個併發會話,同時壓力測試超過800.我強烈建議使用它!