程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server 數據頁緩沖區的內存瓶頸剖析

SQL Server 數據頁緩沖區的內存瓶頸剖析

編輯:MSSQL

SQL Server 數據頁緩沖區的內存瓶頸剖析。本站提示廣大學習愛好者:(SQL Server 數據頁緩沖區的內存瓶頸剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server 數據頁緩沖區的內存瓶頸剖析正文


SQL Server會把常常應用到的數據緩存在內存裡(就是數據頁緩存),用以進步數據拜訪速度。由於磁盤拜訪速度遠遠低於內存,所以削減磁盤拜訪量異樣是數據庫優化的主要方面。

當數據頁緩存區湧現內存缺乏,則會湧現查詢慢,磁盤忙等等成績。

剖析辦法:重要是用到機能計數器。

檢查以下機能計數器:

1. SQL SERVER:Buffer Manager-Lazy Writes/sec:內存缺乏則會頻仍挪用Lazy Writer把數數據寫入磁盤,此值會常常不為0.

2. SQL SERVER:Buffer Manager-Page life expectancy:內存缺乏時,此計數器表示為降低趨向或許一向逗留在較低值。

3. SQL SERVER:Buffer Manager-Page reads/sec:內存缺乏時,則查詢那些常常應用但又沒有緩存在內存裡的數據時,就不須要讀取磁盤,這此值表示為連續上升或許逗留在較高值。

4. SQL SERVER:Buffer Manager-Stolen pages:Stolen pages平日用於緩存履行籌劃,以備重用。內存缺乏時,SQL Server自己機制會優先消除履行籌劃緩存,則此值表示為降低或許較低程度。

查詢以後用戶義務期待:


select * from sys.sysprocesses

假如內存缺乏則,會看到較多的ASYNC_IO_COMPLETION期待類型。這是由於內存缺乏時:a.內存和磁盤間會頻仍停止交互,磁盤負載增長 b.須要讀取磁盤上的數據完成查詢,磁盤負載增長。

也就是說這時候候磁盤也湧現了機能瓶頸,然則這只是“外面”的,我們要聯合多特性能目標來認清基本緣由是“內存缺乏”。

肯定壓力起源及處理方法:

經由過程前的剖析,肯定了數據頁緩存相干的內存瓶頸。就要剖析為何會如許及處理方法。重要分為以下5個方面:

1. 內部壓力

假如OS層面或許其它運用辦事須要更多的內存,windows會緊縮Database Pages的內存量。這時候內存壓力來自內部。可以檢查以下機能計數器肯定能否是內部壓力:

1. SQL Server:Memory Manager-Total Server Memory:此計數器值會降低。

2. Memory:Available Mbytes:此值會降低到較低程度。

3. 在沒有應用AWE或許Lock page in memory條件下,檢查Process:Private Bytes-SqlServer和Process:Working Set-SqlServer,二者值會有明顯降低。

處理辦法:假如非DB公用辦事器,則要衡量各個運用辦事之間主要性來分派內存或許加年夜內存。盡可能讓辦事器只運轉SQL Server,成為DB公用辦事器。

2. SQL Server本身對Database Page的應用壓力

當Total Server Memory曾經到達設定的Max Server Memory或許沒法從OS取得更多內存,然則常常拜訪的數據量又弘遠於物理內存用於數據緩存的容量時,SQL Server自願將內存的數據移入又移出,用於完成以後查詢。

不雅察以下機能計數器:

1. SQL Server:Memory Manager-Total Server Memory 和 SQL Server:Memory Manager-Target Server Memory二者值將會相等。然則前者不會年夜於後者。

2. 將會湧現“剖析辦法”所述之情形。

處理辦法:既然SQL Server沒有足夠內存寄存Database Page,那就要末增長SQL Server應用的內存量或許削減其應用的內存裡。

增長:可以通增長物理內存,啟用AWE等辦法。

削減:可以經由過程橫向擴大,有兩台或許多台辦事器分離載部門庫;優化相干讀取量較年夜的語句等。

3. Buffer Pool中的Stolen Memory壓力

正常情形下Buffer Pool中的Stolen Memory不會給Database Pages形成壓力。由於Database Pages有壓力,會觸發Lazy Writes,同時SQL Server 會清算Stolen Memory中的履行籌劃緩存。

然則,假如用戶聲名了過量的對象,而沒有登出,而且占用內存過量,就會緊縮Database Pages.如:游標,自界說援用的履行籌劃等。

處理辦法:平日是會表示為a)用戶提交的要求因內存缺乏沒法完成,701毛病;b)須要緊縮某些clerk的內存量,來完成用戶要求,形成呼應延時懈弛慢。

經由過程查詢sys.dm_os_memory_clerks的字段Single_pages_kb,找出是哪一個clerk應用了過量內存並剖析其緣由,然後處理之。

4. Multi-Page的壓力

multi-page跟Buffer Pool同享OS的虛擬地址空間,假如multi-page應用過量內存,就會緊縮Datbase pages。multi-page內存用量普通較小且絕對固定,能夠產生的情形有:

a. 未開啟AWE的32位SQL Server只要2G地址空間,且用-g啟動參數擴大的MemToLeave的下限。

b. 64位SQL Server調了內存洩漏的第三方代碼。

c. 應用帶有年夜量參數或許較長的”IN”語句

d. 調高了Network Packet Size,年夜於或等於8KB,而且較多這類銜接。

e. 年夜量龐雜XML查詢,或許第三代碼。

處理辦法: 經由過程查詢sys.dm_os_memory_clerks的字段multi_pages_kb,找出是哪一個clerk應用了過量內存並剖析其緣由,然後處理之。


作者:Joe.TJ
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved