1

我們在專用機器上運行我們的應用程序的數據庫只運行SQL Server 2005的 該DB服務器具有32 GB的內存...和數據庫文件本身只有6 GB。SQL Server 2005的「針」的數據在內存中

我想迫使一些重讀/查詢表到SQL內存緩衝來提高速度。

據我所知,SQL服務器即將一旦它從磁盤中讀取保存在內存中緩存所需的數據確實不錯......但我們的客戶可能會喜歡他們的查詢快速運行的第一次。 「最快的性能第二時間」不完全是產品亮點。

缺少舊的「引腳表」DBCC命令..任何想法?

我寫了一個「CacheTableToSQLMemory」Proc,它循環遍歷所有表索引(Clustered & Non),在Temp表中執行「Select *」。我已經預定SQL代理運行「緩存大量表」Proc每15分鐘試圖將頁面保留在內存中。

它的工作原理,在很大程度上..但我緩存所有查詢的相關表格,運行查詢後也還增加了該表的緩存頁面的計數。那麼第二次更快。 想法?

我們正在運行PAE & AWE。 SQL被設置爲使用20 GB的RAM。

+1

'PAE and AWE set'as'我仍在運行帶有2GB虛擬地址空間的蹩腳x86實例'? – 2010-11-24 01:16:47

回答

6

x86瓶頸是您真正的問題。 AWE只能提供數據頁面,因爲它們可以映射進出AWE區域,但其他所有內存分配都必須填充到2GB的進程虛擬地址空間中。這將包括每個線程堆棧,所有代碼,AWE當前映射'正在使用'的所有數據,最重要的是每個緩存計劃,執行計劃,緩存的安全令牌,緩存的元數據等等。我甚至沒有計算CLR,我希望你不要使用它。

考慮到系統具有32GB的RAM,甚至不能嘗試/ 3GB,看看是否有幫助,因爲在這種情況下總PAE減少到16GB,這會使內存的一半看不見...

你真的不得不轉向x64。 AWE只能提供很多幫助。您可以從Buffer ManagerMemory Manager對象中收集性能計數器,並監視sys.dm_os_memory_clerks,以便您可以更好地瞭解實例內存的行爲方式(使用的內存在哪裏,誰在使用內存等)。我不指望這會幫助你真正解決問題,但我確實希望它能夠爲您提供足夠的信息,以便升級到x64。

2

沒有辦法銷內存表中的SQL Server 2005中如果SQL Server是從內存中丟棄表,這是因爲沒有從系統的其他部分內存壓力。由於您的數據庫只有6GB,因此數據庫應該保留在內存中......只要服務器上沒有其他數據庫。

儘管如此,您仍然可以嘗試將數據保留在內存中。根據補丁級別和SQL Server安裝版本的不同,您可能能夠利用lock pages in memory功能來確保SQL Server的內存不會被分頁。

您還可以將服務器上的內存分配更改爲固定大小。除非數據庫服務器上還有別的東西,否則可以將SQL Server的最小和最大內存設置爲相同的值。這不一定會阻止這種情況在將來發生(這是SQL Server應該如何工作的一個函數),但將SQL Server設置爲使用固定數量的內存(如果沒有其他內存記憶關注)。

相關問題