sqlserver分配內存
Sql Server 區管理(GAM,SGAM)
大家都知道Sql Server 中數據文件存儲的最小單位是頁面(Page),但實際SQLSERVE並不是以頁面為單位給數據分配空間的,Sql Server默認的存儲分配單位是盤區(Extend)。這樣做的主要原因是為了避免頻繁的讀寫IO,提升性能。在表或其它對象分配存儲空間,不是直接分配一個8K的頁面,而是以一個盤區(Extend)為存儲分配單位,一個盤區為8個頁面(Size = 8*8K=64K)。
這樣,對區得操作就會非常頻繁,也要求Sql Server有自己的一套系統管理著數量眾多的區。其中最突出的出一個問題,那就是在存儲那些只有少量數據,不足8K的對象,如果也是分配給一個盤區,就會存在存儲空間上的浪費,降低了空間分配效率。
為解決上述問題,SQLSERVER提供了一種解決方案,定義了兩種盤區類型,統一盤區和混合盤區。
全局分配映射表 (GAM):統一盤區,GAM 頁記錄已分配的區。每個 GAM 包含 64,000 個區,相當於近 4 GB 的數據。GAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區可用;如果位為 0,則區已分配。
共享全局分配映射表 (SGAM):由多個對象共同擁有該盤區,SGAM 頁記錄當前用作混合區且至少有一個未使用的頁的區。每個 SGAM 包含 64,000 個區,相當於近 4 GB 的數據。SGAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區正用作混合區且有可用頁。如果位為 0,則區未用作混合區,或者雖然用作混合區但其所有頁均在使用中。
在實際為對象分配存儲盤區時,為了提高空間利用率,默認的情況下,如果一個對象一開始大小小於8個頁面,就盡量放在混合盤區中,如果該對象大小增加到8個頁面後,SQLSERVER會為這個對象重新分配一個統一盤區。
據區當前的使用情況,GAM 和 SGAM 中每個區具有以下位模式:
第0個bit為保留位元組,始終為0
第1個bit表示該頁面是否已分配,我們知道GAM頁用來管理區是否已分配,但一個區包含8個頁面,所以用該bit用來准確定位該區的某個頁面是否已分配出去了。
第2個bit表示該頁面是否混合分區的一個頁面。
第3個bit表示該頁面是否是一個IAM(索引分配映射)頁面。
第4個bit表示該頁面中是否包含幻影或已刪除記錄,這有助於SQL Server定期清理幻影或已刪除記錄。
第5~7個頁面表示該頁面的空間使用率情況。
❷ 如何解決SQLServer占內存過多的問題
我們需要准備的材料分別是:電腦。
1、在我的電腦中,搜索訪問sql佔用內存,在右側的管理伺服器中選擇重新啟動,重啟一下IIS。
❸ SQLServer中能手動給使用的表分配內存嗎如果可以,如何分配
不能,SQL Server的內存分配是SQL引擎自動分配的,我們只能更改最大值最小值。
在伺服器屬性里改。
SQL Server佔用的內存主要由三部分組成:
數據緩存(Data Buffer)、執行緩存(Procere Cache)、以及SQL Server引擎程序。
其中引擎程序佔用的緩存比較固定,也是必須佔用的一部分。除此之外,執行緩存是執行的語句解析後存儲的地方,而數據緩存則是查詢結果等緩存的地方。這兩個部分是動態調整的,都不是用戶可以支配的。
❹ 如何釋放Sqlserver所佔用的內存
sql server 在查詢大數據量的數據時,總會佔用大量的內存,並且居高不下,一不小心就會死機。
下面這個是我從網上找到的:
當你查詢數據的數據量比較大時,sqlserver會把查詢結果緩存在內存中,保證你下次查詢同樣的記錄時會很快得到結果,所以內存使用量會激增。
在你完成此次查詢後,sqlserver不會馬上釋放內存,數據會仍然放在內存中,這是sqlserver的優化策略,sqlserver會不斷地佔用你的系統內存,來加快sqlserver的運行速度,當你的系統中的其它服務也需要內存時,它才會自動釋放部分內存。一句話,sqlserver不會讓你的系統有閑置的內存,除非你設置sqlserver的最大內存使用量。這樣也沒什麼不好,如果你的系統很大,單獨給sqlserver一台機器,這樣會提高它的性能。
如果你只是開發用,要想讓sqlserver釋放內存,重啟sqlserver的服務就行了。如果不想讓sqlserver佔用太多內存,設置sqlserver的最大內存佔用量.
設置最大內存後效果好了不少!
❺ 如何評估sqlserver應該分配多少內存
SqlServer內存分配默認是自動的,如果你需要手動分配的話可以實例處右鍵屬性
❻ sqlserver2005怎麼設置內存
SQLSERVER的內存用在哪裡?
SQL會緩存大量的數據頁面,他還會緩存很多其他信息,包括存儲過程的執行計劃 ,特定用戶的安全上下文等
如果這些信息沒有在資料庫中緩存,SQL都要重新計算一遍,花額外的時間,所以SQLSERVER對內存的需求是十分強烈的。
配置:
(1)如果伺服器支持64位操作系統,沒有特殊理由的話,請安裝64位系統。這樣SQL能夠有效地使用 大於2GB的內存。如果一定要用32位系統,務必將SQLSERVER伺服器屬性裡面的「使用AWE分配內存」打開。但是不要用boot.ini文件里的/3GB這個開關,即不要在boot.ini文件里加上/3GB這個參數。
(2)盡量使伺服器專門供資料庫使用,不要將其他服務(例如IIS,中間層應用服務等)安裝在同一台機器上。多個生產應用服務在同一台機器上運行,會大大增加維護成本
(3)建議設置SQLSERVER max server memory(最大伺服器內存),以確保Windows有足夠的內存供系統本身使用。
情況歸納如下:
一台4GB機器,建議預留1GB,設置SQLSERVER max server memory為2.8GB
一台8GB機器,建議預留2GB,設置SQLSERVER max server memory為6GB
一台大於8GB的64位機器,建議預留3GB~4GB
如果一台伺服器上還有其他應用使用內存,也要扣除他們的內存使用數
一般設置SQLSERVER min server memory(最小伺服器內存)意義不大
(4)如果是企業版SQLSERVER,建議賦給SQLSERVER啟動帳號lock page in memory的許可權
設置方法如下:
打開組策略(運行 ,輸入gpedit.msc)-》找到計算機配置-》Windows設置-》安全設置-》本地策略-》用戶許可權分配-》鎖定內存頁
在鎖定內存頁上右鍵,打開鎖定內存頁屬性,添加SQLSERVER啟動帳號進去
(5)「set working set size」 這個SQLSERVER參數在現在的Windows上不能起到固定SQL物理內存的作用,所以請永遠不要使用
修改完配置之後需要重啟SQLSERVER服務才能生效!!!!!
除了配置之外還有一些應對內存錯誤的其他一些建議:
升級Windows2003到SP2,或者使用Windows2008 ,這些版本的Windows的內存管理機制有了調整
升級硬體驅動程序,或者聯系微軟技術服務,幫忙檢查是不是硬體方面問題引起