内存问题定位与解决

devopsec 等级 645 0 0

内存问题定位基本流程:

内存问题定位与解决

主要用到的性能计数器

  1. Page life expectancy (数据库计数器:主要显示不被使用的页,将在缓存中停留的秒数 )
  2. Lazy writes/sec  (数据库计数器:惰性写入器会在内存有压力且有新的内存需求时触发,成批的刷新“老化的缓冲区”)
  3. Page Reads/sec,Page Writes/sec  (这里使用数据库级别计数器:当需要读取或写入的页不在内存中,需要到磁盘中读取时计数)
  4. Target Server Memory (KB) (SQL server能够使用的内存总量)
  5. Total Server Memory (KB)  (SQL SERVER使用的内存总量,这里指BUFFER POOL的大小)
  6. Available MBytes  (系统系数器:主要显示系统还有多少可用内存)

  注:Target Server Memory (KB) - Total Server Memory (KB) 约等于SQL SERVER还可以使用的内存数。

内存问题定位与解决

步骤1.排除应用影响内存

Total Server Memory (KB)(SQL SERVER使用的内存总量,这里指BUFFER POOL的大小)可以查看SQL Server使用的内存总量,如果当使用的内存总量很小,而服务器依然有很大的内存Available MBytes请检查,是否限制了SQL Server的内存使用。  

Available MBytes 主要显示系统中还多少空闲内存 (如果这个值较大,而Target Server Memory (KB) - Total Server Memory (KB) 为0或者较小,可以适当的调大max server memory(最大内存,稍后介绍))

内存问题定位与解决

如果Total Server Memory (KB) 计数器有陡降的情况发生,一般可以说明有外部程序对内存的使用占用的数据库使用的内存。

内存问题定位与解决

步骤2.内存问题定位

内存持续压力

Lazy writes/sec

内存问题定位与解决

Page life expectancy

内存问题定位与解决

内存波动压力

Page Reads/sec

内存问题定位与解决

Lazy writes/sec

内存问题定位与解决

Page life expectancy

内存问题定位与解决

步骤3.内存问题分析与解决(通用步骤)

系统设置最大内存max server memory

内存问题定位与解决

问:我系统内存本来就不够为什么还要设置使用上限?我这服务器就给数据库用还用设置?

答:数据库是运行在windows 上的应用,他和notepad对于操作系统来说本质上没区别,那么这就好比君(操作系统)与 臣(数据库)的关系。

而SQL SERVER是一个很喜欢内存的应用,所以很可能吃掉大量内存导致windows系统没有足够内存使用,,那么这时候君臣关系就体现的淋漓尽致了,君(windows) 要臣(SQL SERVER)死(释放内存)臣不得不死呀...这个释放在一定程度上可不是单单让windows够用了,很可能导致SQL内存陡降,以致SQL 短时间假死(操作无响应)。所以为了你数据库的稳定性,这个最大上限一定要设置。

内存设置推荐:

一般我比较推荐如果内存较小操作系统预留3G-4G ,如果内存大256或512以上在数据库内存无压力时预留5%给操作系统,剩下给SQL SERVER ,如果服务器还有其他应用还要在SQL 中减掉应用所占的内存。

如果内存比较小且数据库内存压力大,则可以通过前面讲述的Available MBytes 的判断结果适量给系统预留内存。

注意:最大内存的设置单位为 MB。

语句的优化,让语句消耗内存更少!

    语句优化系列请关注后续文章,这里只针对降低内存

    降低内存对语句优化主要集中在几个方面:

      1. 是否缺失索引?
      2. 消耗内存的操作是否可以消除(如排序)
      3. 降低语句复杂性,让优化器能选用最佳计划

    语句消耗内存主要体现在大量的读取,或者有排序等操作。

    所谓的读,简单理解就是在语句执行时所需要用到的数据页数,需要的越多就需要越大的内存来缓存这些数据页。如果需要的页不在内存中还需要从磁盘读取 (磁盘读取就是为什么Page Reads/sec 会高)

内存问题定位与解决

    简单的一个加索引降低逻辑读的例子~

内存问题定位与解决

内存问题定位与解决

内存问题定位与解决

    语句使用了一个整个表扫描的计划,执行了 19秒,逻辑读取143800次,预读137236 (磁盘上读取),消耗了40KB 的内存 ,并且明确提示出缺少索引!

    那么我们加上提示缺少的索引,再次执行

内存问题定位与解决

内存问题定位与解决

加上索引的语句执行不到1秒 逻辑读降低到13次,内存消耗已经可以忽略不计。这就是索引对语句的重要性!单条语句如此,你的系统中到底有多少这样的语句呢?

再来看一个写法修改的例子 :

内存问题定位与解决

只是简单的改了下语句的写法时间有7秒变成1秒,内存消耗从300+MB 变成 1MB

这两个例子,告诉我们也许系统中简简单单做一些调整,内存的压力就会明显降低或者变得非常充足,所以在你下了一个需要购买内存的决定前,是否针对系统的语句进行过调优?

步骤4.内存问题分析与解决(特殊排查步骤)

内存波动

内存问题定位与解决

        如果你是系统维护人员,看到类似这样的内存数据指标,如果你还不能有一些思路,请你好好熟悉下你的系统。

    这张图很清晰地反映出系统每隔几小时会有一次的内存压力,那么别忙着去找对应时间点的语句,我们最少要好好想一下,系统中有什么操作定时执行?SQL JOB?计划任务?前台定时处理?等等等

    这个规律的定时处理是否有异常?是否最近有什么改动?执行的结果是不是和你想的一样?

    也许问题就这么清晰的定位了......

本文转自 https://blog.csdn.net/huantuo4908/article/details/70313195,如有侵权,请联系删除。

收藏
评论区

相关推荐

内存问题定位与解决
内存问题定位基本流程: 主要用到的性能计数器 1. Page life expectancy (数据库计数器:主要显示不被使用的页,将在缓存中停留的秒数 ) 2.
20款开发运维必备的顶级工具
![](https://oscimg.oschina.net/oscnet/3d0acef5-6f21-4fcd-b640-1f40fa99c539.gif) 开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关。在整个开发生命周期涉及到一大批新旧工具,从规划、编码、测试、发布到监控。本文介绍你应该考虑添加到工具箱中的20种开发运维工具,供
IT:从运维到运营
_本文转自公众号:傲寒荐书,作者:陈傲寒_ _IT运维?IT运营?_ _都是 IT Operations,有什么区别?_ _IT运维管理?IT运营管理?_ _都是 ITOM,有什么区别?_ _一字之差,只是翻译不同,还是另有玄机?_ _其实,_**中文真的是一门更精确的语言 :-)** * _IT运维是“活着”,IT运营是“活得好”;_
MySQL运维之
**1、mysqldump备份一个数据库** mysqldump命令备份一个数据库的基本语法: mysqldump -u user -p pwd dbname > Backup.sql 我们来讲解一下备份的文件都包含了什么?\-- MySQL dump 10.13 Distrib 5.5.20, for Win32 (x86)\--
2020 DevOps流水线实践课程
![](https://oscimg.oschina.net/oscnet/413d404e-8fb3-4407-bde1-5c90d553ab77.png) 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作。而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化运
2020 企业级DevOps流水线实践课程
![](https://oscimg.oschina.net/oscnet/398cdd5d-7354-4e19-a735-8c8b8cd807ae.png) 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作。而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化运
2020 DevOps流水线实践课程
![](https://oscimg.oschina.net/oscnet/413d404e-8fb3-4407-bde1-5c90d553ab77.png) 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作。而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化运
2020 企业级DevOps流水线实践课程
![](https://oscimg.oschina.net/oscnet/398cdd5d-7354-4e19-a735-8c8b8cd807ae.png) 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作。而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化运
AIOps在美团的探索与实践——故障发现篇
![](https://oscimg.oschina.net/oscnet/up-45fc0178edcbec3835316f2c637b1b3f793.JPEG) 一、背景 ---- AIOps,最初的定义是Algorithm IT Operations,是利用运维算法来实现运维的自动化,最终走向无人化运维。随着技术成熟,逐步确定为Artificial
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps 国际峰会是国内唯一的国际性 DevOps 技术峰会,由 OSCAR 联盟指导、DevOps 时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈 DevOps 体系与方法、过程与实践、工具与技术。 会议召开时间:2019-07-05 08:00至 2019-07-06 18:00结束 会议召开地点:北京 主办单位:DevOps
Fabric区块链教程汇总
本文汇总整理超过100个超级账本Fabric开发与安装运维相关的教程与工具。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200320105251549.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM
Linux系统与服务构建运维
Linux系统与服务构建运维 1+x初级,项目三 FTP服务的使用 ======== ### 配置YUM源 #### 将CD设备进行连接 ![](https://img2020.cnblogs.com/blog/1893874/202005/1893874-20200508194528832-718337495.png) #### 将CD设备挂载
Linux运维常见面试题之精华收录
Linux运维常见面试题之精华收录 ================= **1、什么是运维?什么是游戏运维?** 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术 运维又包括很多种,有DBA运维、网站运维、虚
SQL Server 内存使用情况
• 查看设置的最大与最小内存: ![](https://oscimg.oschina.net/oscnet/21e004570bb0114b62531b9d6ecaae8c92e.jpg) ![](https://oscimg.oschina.net/oscnet/d53a81b041283ece7c5da6b827457417e64.jpg)
SQL Server 内存使用情况
• 查看设置的最大与最小内存: ![](https://oscimg.oschina.net/oscnet/21e004570bb0114b62531b9d6ecaae8c92e.jpg) ![](https://oscimg.oschina.net/oscnet/d53a81b041283ece7c5da6b827457417e64.jpg)