《SQL調優日志--內存問題排查》要點:
本文介紹了SQL調優日志--內存問題排查,希望對您有用。如果有疑問,可以聯系我們。
許多系統的性能問題,是由內存導致的.內存不夠會導致頁面頻繁換入換出,IO隊列高,進而影響數據庫整體性能.
內存對數據庫性能非常重要.那么我當呈現問題的時候,我們怎么排查性能問題呢?
主要查看2個部門.頁生命周期 Page Life Expectancy,和 lazy writer /sec.
頁生命周期 的參考值在很久很久以前,很多同學可能看到過,建議值是300s.但是這是基于32位操作系統,最大只能使用4GB內存給出的. Jonathan Kehayias and Ted Krueger 的書A Guide for the Accidental DBA 有給出一個當下的參考值:Buffer Pool / 4 GB * 300 . 當然這值只是一個參考值.如果你發現系統的頁生命周期長期低于某個值,或者經常出現劇烈的波動,那闡明內存可能存在問題.
lazy writer /sec 如果長期大于1 ,就必要關注了.
注意:如果你的系統使用了NUMA.可能會遇到lazy writer /sec 很高,但 Page Life Expectancy異常穩定的情況.這個問題不太常見,暫不詳述.
判斷內存存在問題后,我們必要查看內存的分布.
1.總內存,使用中,可用內存
2.SQL SERVER使用的內存
有的同學可能會遇到,服務器內存使用快滿了,但是從上面圖中看到的內存使用很少.內存被誰用掉了,是內存泄漏嗎?當然不是.原因是SQL SERVER 內存使用可以分為緩沖池和非緩沖池內存.在開啟了 鎖定內存頁 選項后,在任務管理器中只能看到非緩沖池內存部門. 那怎么查看另外一部門緩沖池的內存怎么呢.通過Total server memory 來查看.通過SQL SERVER :Memory Manager Total server memory 來查看
3.非緩沖池內存
SELECT M.type,SUM(M.virtual_memory_reserved_kb) AS VirtualMemoryReservedKB,SUM(M.virtual_memory_committed_kb) AS VirtualMemortCommitedKB,SUM(M.shared_memory_committed_kb) AS SharedMemroyCommittedKB,SUM(M.shared_memory_reserved_kb) AS SharedMemroyReservedKB,SUM(M.multi_pages_kb) AS MultiPagesKB,SUM(M.single_pages_kb) AS SinglePagesKB,SUM(M.multi_pages_kb)+SUM(M.single_pages_kb) AS TotalPagesKBFROM sys.dm_os_memory_clerks MGROUP BY M.typeORDER BY TotalPagesKB DESC
已經依照內存使用排序,找到使用內存最多的部分.分析使用的原因,并解決.
某客戶的客戶系統使用緩慢,通過上面的排除辦法依次排查,最后找到是非緩沖池部分的 MEMORYCLERK_SQLOPTIMIZER占用內存太多造成
sp_configure N'show advanced options',1GOreconfigureGOsp_configure N'optimize for ad hoc workloads',1GOsp_configure N'show advanced options',1GOreconfigureGO
開啟上面的選項后,內存仍然沒有自動釋放.重啟SQL SERVER 服務,釋放掉已經使用掉的內存.
https://simplesqlserver.com/2013/08/19/fixing-page-life-expectancy-ple/ 詳細講授PLE
《SQL調優日志--內存問題排查》是否對您有啟發,歡迎查看更多與《SQL調優日志--內存問題排查》相關教程,學精學透。維易PHP學院為您提供精彩教程。