內存概念: Working Set = Private Bytes + Shared Memory Working Set:某個進程的地址空間中,存放在物理內存的那一部分 Private Bytes:某個進程提交的地址空間(Commited Memory)中,非共享的部分 Shared Memory:對多個進程可見的內存,或存在于多個進程的虛擬地址空間。例如如果兩個進程使用相同的DLL,只要該DLL代碼裝入內存一次,其他所有映射這個DLL的進程只要共享這些代碼就可以了
Virtual Address Space :2的64次方。Windows會自行決定什么時候放在Physical Memory,什么時候放在Paging file Reserved Memory:應用程序會先Reserve一塊內存的地址空間 Committed Memory:將Reserve的內存頁面正式Commit使用,Commit的頁面會最終轉換到Physical Memory中的有效頁面 Memory Leak:一直不斷的Reserve或Commit內存資源,即使不再被使用也不會釋放給其他用戶使用
Page Fault:訪問一個存放于Viratul Address Space,但不存在于物理內存(Working Set)的頁面,就會發(fā)生Page Fault。如果目標頁面存放于硬盤(例如Pageing File),則會進行硬盤讀寫,稱之為Hard Fault。如果已經(jīng)存在在物理內存中,但是還沒有直接放在這個進程的Working Set下,則需要Windows重新定向一次,不會帶來硬盤讀寫,稱之為Soft Fault。由于Soft Fault一般不會帶來性能影響,因此一般不使用該計數(shù)器,而是使用Pages/sec Committed Bytes:整個Windwos系統(tǒng)(包括Windows自身及其所有用戶進程)使用的內存總數(shù),包括Physical Memory和Paging file中的數(shù)據(jù) Pages/sec:Hard Page Fault每秒鐘需要從磁盤上讀取或寫入的頁面數(shù)目(包括Windows和所有應用進程的所有磁盤Paging動作) Page File:%Usage和Page File:%Peak Usage :反映Paging File使用量的多少。數(shù)據(jù)在Paging File中存的越多,說明Physical Memory和實際需求量差距越大,性能越差 ================================================================================= Windows系統(tǒng)自身內存使用情況: 系統(tǒng)的Working Set,也就是系統(tǒng)使用的物理內存量,包括高速緩存、頁交換區(qū)、可調頁的ntoskrnl.exe、驅動程序代碼和系統(tǒng)映射圖等 Cache Bytes:系統(tǒng)使用的物理內存數(shù)目 Cache Bytes = System Cache Resident Bytes + System Driver Resident Bytes + System Code Resident Bytes + Pool Paged Resident Bytes Memory:System Cache Resident Bytes(System Cache):系統(tǒng)高速緩存消耗的物理內存。高速緩存的主要功能是提高文件讀寫速度(例如讀寫超大文件) 賦予SQL服務賬號“Lock Pages in Memory”權限,以便SQL Server可以將自己所申請的內存鎖定放在物理內存中,企業(yè)版自動啟用該功能。但是NonbufferPool的內存不受限制 SQL Server作為一個用戶態(tài)為主的應用程序,還是會受限于核心態(tài)。如果核心態(tài)里發(fā)出內存要求,SQL Server就會被迫把自己的內存釋放出來。用戶態(tài)永遠也搶不過核心態(tài)。 ================================================================================= 檢查某個進程的內存使用情況: Process:Private Bytes Process:Virtual Bytes:某個進程所申請的Virtual Address Space,包括Reserved Memory和Committed Memory 如果系統(tǒng)內存有瓶頸,磁盤一般也會很忙,paging也會較多;但如果磁盤很忙,但是paging不高,就不能說明系統(tǒng)內存有瓶頸
================================================================================= SQL Server內存: Total Server Memory:SQL Server自己分的代碼申請的Buffer Pool空間大小,所有的Database Cache和大部分的Consumer(Connection、Query Plan、
Buffer Pool = Max Server Memory 或 SQL physical memory-Multi-page Max Server Memory是Buffer Pool的上限,但不是SQL Server所有內存使用的上限。SQL Server內存的使用包括Buffer Pool和MemToLeave,所以SQL Server實際內存使用量一定大于Max Server Memory。但在正常情況下,MemToLeave的使用會遠小于Buffer Pool,控制好Buffer Pool,基本上就控制住了SQL Server的整體內存使用量。 SQL Server內存使用分類: 按申請方式分類: 對Database Cache,會先Reserve,再Commit。其他的所有內存使用,基本都是直接Commit,都是Stolen(Memory Leak)
對于所有小于或等于8KB的,直接分配給一個頁面:8KB。所有這些頁面都集中管理,這塊內存被稱為Buffer Pool,一次一個頁面的分配被稱為Single page Allocation 對于大于8KB的內存申請,會被集中在另外一個區(qū)域,成為Multi-Page(或MemToLeave),這種分配稱為Multipl Page Allocation
Memory Manager:監(jiān)視服務器內存總體使用情況 Ttotal Server Memory(KB) Traget Server Memory(KB) SQL Cache Memory(KB):服務器正在用于動態(tài)SQL Server高速緩存的動態(tài)內存總數(shù) Lock Memory(KB):服務器用于鎖的動態(tài)內存總量 Connection Memory(KB):服務器正在用來維護連接的動態(tài)內存總量 Granted Workspace Memory(KB):當前給予執(zhí)行哈希、排序、大容量復制和索引創(chuàng)建等操作進程的內存總量 Memory Grants Pending:等待工作空間內授權的進程總數(shù)。如果該值不等于0,就說明當前有一個用戶的內存申請由于內存壓力而被延遲。一般來講,這就意味著有比較嚴重的內存瓶頸
Buffer Manager:用于監(jiān)視內存如何使用 Buffer Cache Hit Ratio:在緩沖區(qū)高速緩存中找到而不需要從磁盤中讀取的頁的百分比。經(jīng)過很長時間后,該比率的變化應該很小,基本應該在99%以上。如果小于95%,通常就有了內存不足的問題??梢酝ㄟ^增加SQL Server的可用內存來提高 Database Pages:緩沖池中有數(shù)據(jù)庫內容的頁數(shù)。也就是所謂的Database Cache的大小 Free pages:所有空閑可用的總頁數(shù)。當這個值降低是就說明SQL Server正在分配內存給一些用戶。當這個值下降到比較低的值時(例如只剩幾百個page了),SQL Server就會開始做Lazy Write,把一些內存讓出來,所以該值一般不會為0.但如果該值反復降低,就說明內存存在瓶頸。一個沒有內存瓶頸的SQL Server的Free Pages會維持在一個穩(wěn)定的值 Page writes/sec:每秒執(zhí)行的物理數(shù)據(jù)庫頁寫入數(shù)。該值和內存使用沒有什么關系,和Checkpoint pages/sec一樣,更用戶的修改量有關 Checkpoint pages/sec:由要求刷新所有臟頁的檢查點或其他操作每秒刷新到磁盤的頁數(shù)。該值和內存壓力沒有直接關系,和用戶行為有關。如果用戶操作主要是讀,Checkpoint值就比較小。如果很多操作都是Insert/Update/Delete,name內存中修改過的數(shù)據(jù)臟頁就會比較多,每次Checkpoint的量也會較大。主要用來分析磁盤I/O Stolen Pages:用于非Database Pages(包括執(zhí)行計劃緩存)的頁數(shù)。這里就是Stolen Memory在Buffer Pool里的大小 Target Pages:緩沖池中理想的頁數(shù),乘以8KB,就應該是Target Server Memory的值 Total Pages:緩沖池中的頁數(shù)(包括數(shù)據(jù)庫頁、可用頁和Stolen頁)乘以8KB,就應該還是Total Server Memory的值
SQL性能分析步驟: 1)當內存出現(xiàn)瓶頸時,會出現(xiàn)大量的paging動作,磁盤也就會很繁忙。所以要先解決內存瓶頸,才能降低I/O 2)分析磁盤性能是否正常,讀/寫是否已達到預期值,是讀還是寫繁忙 3)查看引起高I/O的操作類型(Page Reads、Page Writes、Lazy Writes、Checkpoints、Log Writes等)
動態(tài)性能視圖: select * from sys.dm_os_wait_stats select *from sys.dm_exec_requests
================================= 計數(shù)器(2分鐘): Processor\% Privileged Time Process(w3wp)\Working Set
|
|
來自: 命運之輪 > 《服務器監(jiān)控》