Performance Monitor3:监控SQL Server的内存压力

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度。一个好的数据库系统,必定在内存中缓存足够多的信息,以减少从物理硬盘中读取数据的次数;如果内存是系统瓶颈,那么SQL Server一定会运行的非常慢。监控SQL Server的内存压力,需要从Widnows级别上,对内存使用的整体使用情况进行监控:从SQL Server级别上,监控SQL Server对内存资源的使用情况。

一,从Windows级别来监控内存资源的使用

操作系统能够调度的内存,有两个来源:物理内存和虚拟内存。物理内存是内存硬件提供的高速访问设备,虚拟内存是物理内存的扩展,操作系统开辟一块物理Disk空间,作为内存空间使用,用于存储缓存数据的文件,叫作缓存文件(Paging File),路径名是C:\pagefile.sys,默认是隐藏的。操作系统透明地使用Paging File来存储数据,Application是无法控制和感知数据是存储在物理内存还是在虚拟内存中,即,操作系统决定使用物理内存,或Paging file来存储缓存数据。一般,通过Performance Monitor来监控Windows级别的内存资源使用情况。

1,监控物理内存

常用的系统级别的内存计数器跟硬缺页中断有关:

  • Memory:Page Faults/sec :每秒发生的Page Fault的数量,Page Fault包括Hard Fault 和 Soft Fault,Hard fault表示需要从Disk中读取数据页,Soft fault表示需要从Physical Memory中读取数据页,Soft Fault不会影响性能,由于Hard Fault需要访问Disk,会产生显著的延迟。
  • Memory:Pages Input/sec:每秒发生的Hard Fault的数量,用于计算Hard Fault的百分比: Pages Input / Page Faults = % Hard Page Faults,如果百分比经常大于40%,说明系统需要经常访问Disk获取数据,在一定程度上说明系统存在内存压力。
  • Memory:Pages/sec:每秒从Disk读取或写入Disk的Page数量,表示内存和Disk交互的Page的数量:将Page存储到Disk或从Disk读取数据到内存的Page的数量。

如下图,Page Faults/sec的数量,均值在6000/s左右,Pages Input/sec波动明显,时高时低,持续的时间很短,均值在50/s左右,两者的比例关系均值低于1%,低于40%,可以认为内存压力较小。Pages/sec 和 Pages Input/sec几乎完全重合,说明,操作系统当时在进行大量的物理读操作。

2,监控虚拟内存

操作系统会同时消耗物理内存和虚拟内存,虚拟内存计数器主要有两个:

  • Paging File:% Usage 用于监控Paging file实例的使用比例
  • Process: Paging File Bytes  用于监控虚拟内存的大小

存储在虚拟内存中的数据越多,说明物理内存数量和实际需求量的差距越大,比值 % Usage 仅仅作为参考值,如果长时间接近100%,那么系统很可能出现异常。

二,从SQL Server级别上,监控SQL Server对内存资源的使用情况

1,从Buffer Pool计数器监控服务器内存总体使用情况

由于Buffer Pool是SQL Server内存最活跃,使用最多的部分,所以也是最容易出现性能瓶颈的部分,计数值尤其重要:

  • Lazy Writes/sec:被LazyWriter刷新的buffer数量,如果是脏页,那么将buffer写入到Disk,并将buffer空间标记为Free,如果不是脏页,那么该buffer空间也被标记为Free,LazyWriter的作用是维护一定数量的Free buffer,SQL Server使用Free buffer来加载新的数据页。
  • Page Life Expectancy:PLE,数据页驻留在内存中的时间。如果SQL Server没有新的内存需求,或有空闲的内存来完成新的内存需求,那么Lazy Writer不会被处罚,Page会一直驻留在Buffer Pool中,那么Page Life Expectancy会维持在一个比较高的水平;如果Page Life总是高高低低,表明SQL Server存在内存压力。PLE的参考数值是:Max Server Memory/4GB*300s,如果PLE值长期低于参考值,内存可能存在瓶颈。
  • Page Reads/sec:每秒从Disk读取的数据页数,即物理读的次数,如果用户访问的数据都缓存在内存中,那么SQL Server不需要从物理Disk上读取页面。由于物理IO的开销大,Page Reads操作一定会影响SQL Server的性能。
  • Free list stalls/sec:等待一个Free Page的请求数量,SQL Server申请从Disk加载一个Page到内存中,必须在内存中分配一个Buffer,Buffer Manager负责维护Free Buffer List,如果Free List没有任何Free Buffer,那么请求必须等待,直到有空闲的Buffer使用,才能将Disk中的Page加载到内存中。

根据图表数据分析,SQL Server执行大量的物理读操作,导致PLE大幅降低;从Free List Stall和 Lazy Write的测量值推断,SQL Server内存压力较小:

  • PLE:大幅度降低,从50Ks降低到均值2Ks左右,说明内存数据页被大量替换;
  • Free List Stalls/sec: 波动明显,总体数值很小,说明系统中的Free Buffer能够满足SQL Server的需求;
  • Lazy Write/sec:均值在4/sec,比较小;
  • Page Reads/sec:均值在4000/sec,说明SQL Server在进行大量的物理读操作

 

BCHR(Buffer cache hit ratio)表示:SQL Server 直接从内存中读取数据的百分比,跟预读有很大的关系。一次命中意味着在SQL Server读取数据时,数据存在于内存中,跟数据驻留在内存中的时间长短,以及内存是否有压力关系不大,仅供参考。

逻辑读是指直接从内存中读取数据,物理读是指从物理Disk文件中加载数据到内存,从SQL Server角度来看,BCHR=逻辑读/(逻辑读+物理读)。

如果数据缓存在内存中,那么SQL Server从内存中直接读取数据,而不需要从物理Disk加载到内存。物理Disk能够执行预读操作,操作系统将物理Disk上的数据预先加载到内存中,在SQL Server进程访问数据时,该数据已经存在于内存中了。虽然SQL Server申请了物理读操作,但是,BCHR的测量值没有体现物理读操作,这是因为,在SQL Server读取数据时,数据是存在于内存中的,SQL Server执行的是逻辑读操作。

推荐阅读《Great SQL Server Debates: Buffer Cache Hit Ratio》:

BCHR only responds to significant memory pressure in conjunction with I/O subsystem pressure, or possibly fragmentation i.e. under conditions that impedes page read-ahead to the point that SQL Server becomes much less effective at populating the data cache with the required pages, before the query processor actually requires them for use.

2,从Memory Manager计数器监控服务器内存总体使用情况

在一个非常繁忙的系统中,Lock内存和授予内存是常用的计数器:

  • Total Server Memory (KB):SQL Server当前使用的内存总量
  • Target Server Memory (KB):SQL Server能够使用的内存总量
  • Lock Memory (KB):SQL Server用于锁的内存总量
  • Grant Workspace Memory (KB):授予内存,SQL Server用于执行hash,排序和创建Index操作而消耗的内存总量
  • Memory Grants Pending (KB):等待内存授予的进程数量,如果进程不能获得指定数量的内存,那么进程将不会开始执行

 分析图表,除了Grant Workspace Memory 有变化之外,其余4个计数值都没有变化,说明SQL Server执行的操作需要授予内存,而Memory Grants Pending 计数值很小,几乎为0,说明SQL Server 不存在内存压力。

 

结论:内存是数据库系统最重要的资源,操作系统和SQL Server对其的管理比较复杂,根据以上计数器的测量值,基本上能够推断出SQL Server是否存在内存压力,可以结合其他测量值进行佐证,例如,Committed Memory,Stolen Memory,Working Set,Paged Pool,Nonpaged Pool等,这里就不展开了。

 

拓展阅读:

Process:Page File Bytes is the current amount of virtual memory, in bytes, that this process has reserved for use in the paging file(s). Paging files are used to store pages of memory used by the process that are not contained in other files. Paging files are shared by all processes, and the lack of space in paging files can prevent other processes from allocating memory. If there is no paging file, this counter reflects the current amount of virtual memory that the process has reserved for use in physical memor

参考doc:

Windows Performance Counters Explained

Buffer cache hit ratio性能计数器真的可以作为内存瓶颈的判断指标吗?

Great SQL Server Debates: Buffer Cache Hit Ratio

SQL Server memory performance metrics – Part 1 – Memory pages/sec and Memory page faults/sec

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: 数据库管理






本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5153603.html,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
11天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
51 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
21天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
16 0
|
11天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
74 6
|
7天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
11 0
|
11天前
|
SQL 监控 数据库
数据库管理与电脑监控软件:SQL代码优化与实践
本文探讨了如何优化数据库管理和使用电脑监控软件以提升效率。通过SQL代码优化,如使用索引和调整查询语句,能有效提高数据库性能。同时,合理设计数据库结构,如数据表划分和规范化,也能增强管理效率。此外,利用Python脚本自动化收集系统性能数据,并实时提交至网站,可实现对电脑监控的实时性和有效性。这些方法能提升信息系统稳定性和可靠性,满足用户需求。
39 0
|
11天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
15天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
17 1
|
15天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
15 1
|
21天前
|
存储 监控 异构计算
【Python】GPU内存监控脚本
【Python】GPU内存监控脚本

热门文章

最新文章