天天看點

SQL SERVER 記憶體配置設定及常見記憶體問題 簡介一、問題: 二、作業系統層面看SQL SERVER 記憶體配置設定: 合理配置SQL SERVER 記憶體 三、SQL Server 内部獨特的記憶體管理模式:

1、SQL Server 所占用記憶體數量從啟動以後就不斷地增加:

      首先,作為成熟的産品,記憶體溢出的機會微乎其微。對此要了解SQL SERVER與windows是如何協調、共享記憶體。并且SQL SERVER的内部對記憶體的管理機制。

2、在Windows 2003以上版本運作的SQL Server,記憶體使用量突然急劇下降:

     記憶體是Sqlserver的生命線。在errorlog中,出現一下情況:      

SQL SERVER 記憶體配置設定及常見記憶體問題 簡介一、問題: 二、作業系統層面看SQL SERVER 記憶體配置設定: 合理配置SQL SERVER 記憶體 三、SQL Server 内部獨特的記憶體管理模式:

這類問題往往不是sql server導緻的,而是Windows感覺到急迫的記憶體壓力,迫使sql server 釋放記憶體。

3、使用者在做操作時,遇到記憶體申請失敗:不是使用者想申請多少就有多少

4、記憶體壓力導緻的性能下降:記憶體壓力是性能問題最常見的原因之一。

作業系統不缺記憶體不代表sql server不缺記憶體

預設情況下,windows程序有4G虛拟位址空間,2G給核心态(kernel mode),剩下的2G給使用者态(user mode)。這兩部分會嚴格區分。

任何一個使用者程序的位址空間分布圖:

SQL SERVER 記憶體配置設定及常見記憶體問題 簡介一、問題: 二、作業系統層面看SQL SERVER 記憶體配置設定: 合理配置SQL SERVER 記憶體 三、SQL Server 内部獨特的記憶體管理模式:

方法1:在boot.ini檔案中使用/3GB參數,可以在企業版的windows下講核心态降到1G,講使用者态升到3G。

SQL SERVER 記憶體配置設定及常見記憶體問題 簡介一、問題: 二、作業系統層面看SQL SERVER 記憶體配置設定: 合理配置SQL SERVER 記憶體 三、SQL Server 内部獨特的記憶體管理模式:

方法2:使用Address Windowsing Extensions(位址空間擴充,awe),是一種允許32位應用配置設定64GB實體記憶體,并把視圖或視窗映射到2G虛拟位址空間的機制。不是所有的記憶體申請都使用awe,隻有先reserve,再commit的記憶體調用才使用awe。

在檢查sql server記憶體使用情況時,首先要檢查windows層面的記憶體使用情況。

需要檢查的内容有:windows系統自身記憶體使用數量及記憶體分布。是否有記憶體壓力,壓力是否比較嚴重。甚至每個程序的記憶體使用情況。最後就是是否互相影響。

可以使用性能螢幕實作。

Windows系統使用情況:

1、整體使用分析:

Committed bytes:

整個windows系統的記憶體總數,包括實體記憶體的資料和檔案緩存中的資料。

Commit Limit:

整個windows系統能夠申請的最大記憶體數,等于實體記憶體加上檔案緩存的大小。如果Commit Limit≈Committed bytes,說明系統記憶體接近極限。如果緩存檔案不能自動增長,系統将不能提供更多的記憶體空間。

Available MBytes:

現在系統空閑的實體記憶體,直接反映windows層面有沒有記憶體壓力。

Page File:%Usage 和Page File:%Peak Usage:

反映緩存檔案使用量的多少,資料在檔案緩存中存得越多,說明實體記憶體數量和實際需求量的差距越大,性能也越差。

Pages/sec:

Hard Page Fault每秒需要從磁盤讀取或寫入的頁面數目。是Memory:pages input/sec + Memory:pages output/sec之和。

Memory:page faults/sec 是soft page fault 和 hard page fault的總和。但由于soft page fault 對性能影響不大,是以用處沒pages/sec那麼有用。pages/sec不能長時間保持在一個比較高的值。

2、Windows系統自身記憶體使用情況:

Memory:cache bytes:

系統的working set ,也就是系統使用的實體記憶體數目。

           Memory:System cache resident bytes (system cache):系統告訴緩存消耗的實體記憶體。

           Memory:Pool paged resident bytes:頁交換區消耗的實體記憶體。

           Memory:System Driver resident bytes:可調頁的裝置驅動程式代碼消耗的實體記憶體。

           Memory:System Code resident bytes:Ntoskrnl.exe中可調頁代碼消耗的記憶體。

3、System pool:Memory :pool Nonpaged bytes(非頁交換區)和Memory:pool paged resident bytes(頁交換區)

Process:%processor Time:目标程序消耗的CPU資源數,包括使用者态和核心态的時間。

Process:Page Faults/sec 目标程序上發生的PageFaults的數目。

Process:Handle Count 目标程序handle資料,如果程序内部有對象老是建立不及時回收,就會發生Thread Leak

Process:Pool Paged Bytes目标程序所使用的Paged Pool的大小。

Process:Pool Nonpaged Bytes目标程序所使用的Non-Paged pool大小。

Process:working set 某個程序的位址空間中,存放在實體記憶體的那部分。

Process:Virual Bytes:某個程序所申請的虛拟位址空間大小。

Process:Private bytes:某個程序送出了位址空間中非共享的部分。

記憶體永遠是最重要的系統資源。

Sqlserver有兩個重要的記憶體計數器:Total Server Memory 和Target Server Memory。

Total Server Memory:自己配置設定的Buffer pool 記憶體總和。

Target Server Memory:理論上能夠使用的最多記憶體數目。

原因:

1、windows在某種情況下申請了太多核心态記憶體,反而壓縮了使用者态可以使用的實體記憶體。

2、有些硬體驅動程式申請了太多核心态記憶體,也占用太多實體記憶體。

3、某些應用突然申請大量實體記憶體。

使用下面方法避免SQL SERVER 記憶體被急劇搶占:

1、開啟Lock page in memory功能

隻有05/08企業版才有

2、使用sp_configure 設定sql 的MAX SERVER MEMORY。

3、更新新版本或者更新檔。

4、更新硬體驅動。

兩條原則:

(1)Windows 系統和其他關鍵應用服務要有足夠的記憶體,不要在運作過程中因為記憶體不足,而搶SQL SERVER已經申請的記憶體。

(2)在滿足第一點的前提下,SQL SERVER使用盡可能多的記憶體,并保證記憶體使用數量的穩定性。

方法:

1、使用64位

2、專用伺服器

3、設定SQL Server Max Server Memory

4、給SQL Server 啟動賬号賦予Lock Pages in memory權限。

5、“set working set size”不要使用。

1、Min Server Memory (sp_configure):最終由windows确定,不保證SQL Server使用最小實體記憶體數。

2、Max Server Memory(sp_configure):資料放在實體記憶體還是緩沖檔案中,由windows決定。

3、Set Working Set Size (sp_configure):不要使用。

4、AWE Enalbed(sp_configure):對32位系統有意義。

5、Lock Pages in memory (企業版會自動開啟):有一定機會確定sql server的實體記憶體數。

Database Cache:存放資料頁的緩沖區。

各類Consumer:

    Connection::預設4K

    General:包含語句的編譯、範式化、每個鎖資料結構、事務上下文、表格和索引的中繼資料等。預設8K。

    Query Plan:預設8k,

    Optimizer:預設8k,

    Utilities:像BCP、Log Manager、Parallel Queries、Backup的特殊操作。預設8k,

線程記憶體:程序内的每個線程配置設定0.5MB記憶體。存放線程的資料結構和相關資訊。預設512K

第三方代碼申請的記憶體(COM,XP...)

有些記憶體申請方式是:預留Reserve一大塊記憶體,然後使用的時候一小塊一小塊commit,而另外一些記憶體申請直接從位址空間Commit,這種叫Stolen

原文:http://blog.csdn.net/dba_huangzj/article/details/7527543