激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

探究SQL Server 數據頁(yè)緩沖區的內存瓶頸

時(shí)間:2024-08-20 11:42:56 SQL 我要投稿
  • 相關(guān)推薦

探究SQL Server 數據頁(yè)緩沖區的內存瓶頸

  SQL Server會(huì )把經(jīng)常使用到的數據緩存在內存里(就是數據頁(yè)緩存),用以提高數據訪(fǎng)問(wèn)速度。因為磁盤(pán)訪(fǎng)問(wèn)速度遠遠低于內存,所以減少磁盤(pán)訪(fǎng)問(wèn)量同樣是數據庫優(yōu)化的重要方面。

  當數據頁(yè)緩存區出現內存不足,則會(huì )出現查詢(xún)慢,磁盤(pán)忙等等問(wèn)題。

  分析方法:主要是用到性能計數器。

  查看如下性能計數器:

  1. SQL SERVER:Buffer Manager-Lazy Writes/sec:內存不足則會(huì )頻繁調用Lazy Writer把數數據寫(xiě)入磁盤(pán),此值會(huì )經(jīng)常不為0.

  2. SQL SERVER:Buffer Manager-Page life expectancy:內存不足時(shí),此計數器表現為下降趨勢或者一直停留在較低值。

  3. SQL SERVER:Buffer Manager-Page reads/sec:內存不足時(shí),則查詢(xún)那些經(jīng)常使用但又沒(méi)有緩存在內存里的數據時(shí),就不需要讀取磁盤(pán),這此值表現為持續上升或者停留在較高值。

  4. SQL SERVER:Buffer Manager-Stolen pages:Stolen pages通常用于緩存執行計劃,以備重用。內存不足時(shí),SQL Server本身機制會(huì )優(yōu)先清除執行計劃緩存,則此值表現為下降或者較低水平。

  查詢(xún)當前用戶(hù)任務(wù)等待:

  復制代碼 代碼如下:

  select * from sys.sysprocesses

  如果內存不足則,會(huì )看到較多的ASYNC_IO_COMPLETION等待類(lèi)型。這是因為內存不足時(shí):a.內存和磁盤(pán)間會(huì )頻繁進(jìn)行交互,磁盤(pán)負載增加 b.需要讀取磁盤(pán)上的數據完成查詢(xún),磁盤(pán)負載增加。

  也就是說(shuō)這時(shí)候磁盤(pán)也出現了性能瓶頸,但是這只是“表面”的,我們要結合多個(gè)性能指標來(lái)認清根本原因是“內存不足”。

  確定壓力來(lái)源及解決辦法:

  通過(guò)前的分析,確定了數據頁(yè)緩存相關(guān)的內存瓶頸。就要分析為什么會(huì )這樣及解決辦法。主要分為如下5個(gè)方面:

  1. 外部壓力

  如果OS層面或者其它應用服務(wù)需要更多的內存,windows會(huì )壓縮Database Pages的內存量。這時(shí)內存壓力來(lái)自外部?梢圆榭慈缦滦阅苡嫈灯鞔_定是否是外部壓力:

  1. SQL Server:Memory Manager-Total Server Memory:此計數器值會(huì )下降。

  2. Memory:Available Mbytes:此值會(huì )下降到較低水平。

  3. 在沒(méi)有使用AWE或者Lock page in memory前提下,查看Process:Private Bytes-SqlServer和Process:Working Set-SqlServer,兩者值會(huì )有顯著(zhù)下降。

  解決方法:如果非DB專(zhuān)用服務(wù)器,則要權衡各個(gè)應用服務(wù)之間重要性來(lái)分配內存或者加大內存。盡量讓服務(wù)器只運行SQL Server,成為DB專(zhuān)用服務(wù)器。

  2. SQL Server自身對Database Page的使用壓力

  當Total Server Memory已經(jīng)達到設定的Max Server Memory或者無(wú)法從OS獲得更多內存,但是經(jīng)常訪(fǎng)問(wèn)的數據量又遠大于物理內存用于數據緩存的容量時(shí),SQL Server被迫將內存的數據移入又移出,用于完成當前查詢(xún)。

  觀(guān)察如下性能計數器:

  1. SQL Server:Memory Manager-Total Server Memory 和 SQL Server:Memory Manager-Target Server Memory兩者值將會(huì )相等。但是前者不會(huì )大于后者。

  2. 將會(huì )出現“分析方法”所述之情況。

  解決方法:既然SQL Server沒(méi)有足夠內存存放Database Page,那就要么增加SQL Server使用的內存量或者減少其使用的內存里。

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

  減少:可以通過(guò)橫向擴展,有兩臺或者多臺服務(wù)器分別載部分庫;優(yōu)化相關(guān)讀取量較大的語(yǔ)句等。

  3. Buffer Pool中的Stolen Memory壓力

  正常情況下Buffer Pool中的Stolen Memory不會(huì )給Database Pages造成壓力。因為Database Pages有壓力,會(huì )觸發(fā)Lazy Writes,同時(shí)SQL Server 會(huì )清理Stolen Memory中的執行計劃緩存。

  但是,如果用戶(hù)申明了過(guò)多的對象,而沒(méi)有登出,并且占用內存過(guò)多,就會(huì )壓縮Database Pages.如:游標,自定義引用的執行計劃等。

  解決方法:通常是會(huì )表現為a)用戶(hù)提交的請求因內存不足無(wú)法完成,701錯誤;b)需要壓縮某些clerk的內存量,來(lái)完成用戶(hù)請求,造成響應延時(shí)和緩慢。

  通過(guò)查詢(xún)sys.dm_os_memory_clerks的字段Single_pages_kb,找出是哪個(gè)clerk使用了過(guò)多內存并分析其原因,然后解決之。

  4. Multi-Page的壓力

  multi-page跟Buffer Pool共享OS的虛擬地址空間,如果multi-page使用過(guò)多內存,就會(huì )壓縮Datbase pages。multi-page內存用量一般較小且相對固定,可能發(fā)生的情況有:

  a. 未開(kāi)啟AWE的32位SQL Server只有2G地址空間,且用-g啟動(dòng)參數擴展的MemToLeave的上限。

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

  c. 使用帶有大量參數或者較長(cháng)的”IN”語(yǔ)句

  d. 調高了Network Packet Size,大于或等于8KB,并且較多這種連接。

  e. 大量復雜XML查詢(xún),或者第三代碼。

  解決方法: 通過(guò)查詢(xún)sys.dm_os_memory_clerks的字段multi_pages_kb,找出是哪個(gè)clerk使用了過(guò)多內存并分析其原因,然后解決之。

【探究SQL Server 數據頁(yè)緩沖區的內存瓶頸】相關(guān)文章:

SQL Server常用數據類(lèi)型06-18

Sql Server、Access數據排名的實(shí)現方法07-09

如何更改SQL Server默認的1433端口05-19

如何快速掌握SQL Server中的日志轉移08-04

有關(guān)清除SQL Server日志的兩種方法07-20

關(guān)于SQL在數據檢查中的應用10-14

用SQL實(shí)現查詢(xún)數據不顯示錯誤數據的方法08-19

如何使用 SQL 構建動(dòng)態(tài)數據透視表介紹09-12

oracle的sql語(yǔ)句01-21

SQL優(yōu)化大全09-09

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频