广告
返回顶部
首页 > 资讯 > 数据库 >内存问题定位与解决
  • 252
分享到

内存问题定位与解决

2024-04-02 19:04:59 252人浏览 安东尼
摘要

内存问题定位基本流程:  主要用到的性能计数器Page life expectancy (数据库计数器:主要显示不被使用的页,将在缓存中停留的秒数 )Lazy writes/s

内存问题定位基本流程:

内存问题定位与解决

 

 

主要用到的性能计数器

  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?计划任务?前台定时处理?等等等

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

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


您可能感兴趣的文档:

--结束END--

本文标题: 内存问题定位与解决

本文链接: https://www.lsjlt.com/news/42096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 内存问题定位与解决
    内存问题定位基本流程:  主要用到的性能计数器Page life expectancy (数据库计数器:主要显示不被使用的页,将在缓存中停留的秒数 )Lazy writes/s...
    99+
    2022-10-18
  • Java详解线上内存暴涨问题定位和解决方案
    前因: 因为REST规范,定义资源获取接口使用GET请求,参数拼接在url上。 如果按上述定义,当参数过长,超过tomcat默认配置 max-http-header-size :8k...
    99+
    2022-11-12
  • 浅谈Mysqlinsertonduplicatekey死锁问题定位与解决
    目录前言死锁定位insert on duplicate key的锁问题解决前言 最近在监测线上日志时发现我们一个Mysql业务db时常出现 dead lock,频次不高但却一直出现,...
    99+
    2022-11-13
  • 如何解决定位并修复Go 中的内存泄露问题
    这篇文章将为大家详细讲解有关如何解决定位并修复Go 中的内存泄露问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Google Cloud Go 客户端库 [1] 通常在后台使用 gRPC 来连接 Goo...
    99+
    2023-06-25
  • Java内存泄漏问题排查与解决
    前言 Java 最牛逼的一个特性就是垃圾回收机制,不用像 C++ 需要手动管理内存,所以作为 Java 程序员很幸福,只管 New New New 即可,反正 Java 会自动回收过...
    99+
    2022-11-13
  • 如何解决IE6 position:fixed 固定定位问题
    这篇文章将为大家详细讲解有关如何解决IE6 position:fixed 固定定位问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。和大家重点讨论一下如何解...
    99+
    2022-10-19
  • Android GPS室内定位问题的解决方法(location为null)
    为什么室内没有location呢?        因为我们开发的时候几乎肯定都是在室内的,这个时候卫星你...
    99+
    2022-06-06
    方法 gps location 定位 null Android
  • C++内存泄漏问题分析与解决方案
    C++内存泄漏问题分析与解决方案在C++的开发过程中,内存泄漏是一个常见的问题。当程序动态分配内存后却没有正确释放,在程序运行过程中会导致内存的不断累积,最终耗尽系统的可用内存。内存泄漏不仅会影响程序的性能,还可能导致程序崩溃甚至系统崩溃。...
    99+
    2023-10-22
    C++ 解决方案 内存泄漏
  • 定位并修复 Go 中的内存泄露问题
    Go 是一门带 GC 的语言,因此,大家很容易认为它不会有内存泄露问题。 大部分时候确实不会,但如果有些时候使用不注意,也会导致泄露。 本文案例来自谷歌云的代码,探讨如何找到并修复 ...
    99+
    2022-11-12
  • 关于JavaScript的内存与性能问题解决汇总
    目录一、何为JavaScript内存与性能二、谈谈关于innerHTML的性能问题?1、使用innerHTML的反面教材2、如何解决三、如何解决类似按钮过多问题?四、事件委托的优点有...
    99+
    2022-11-13
  • 如何解决uniapp定位不准确问题
    随着移动互联网的快速发展,越来越多的应用程序需要使用到定位功能。而对于基于uniapp框架开发的应用程序而言,定位功能也成为了其中的一大重要部分。但是,许多uniapp开发人员在使用定位功能时,会遇到一个非常让人困扰的问题,那就是uniap...
    99+
    2023-05-14
  • 怎么解决内存泄漏问题
    本篇内容介绍了“怎么解决内存泄漏问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题排查首先确定内存泄漏问题出现的时间,发现在该时间点的上...
    99+
    2023-06-16
  • C++中内存泄漏问题的分析与解决方案
    C++中内存泄漏问题的分析与解决方案概述:内存泄漏是指程序在动态分配内存后,没有及时释放导致内存无法再被程序使用的情况。在C++开发中,内存泄漏是一个常见且严重的问题,一旦发生,会导致程序运行效率下降,最终可能导致程序崩溃。本文将对C++中...
    99+
    2023-10-22
    分析(Analysis) 解决方案(Solution) 内存泄漏(Memory Leak)
  • linux查看日志定位问题怎么解决
    要在Linux系统上查看日志并定位问题,可以按照以下步骤进行操作: 打开终端窗口,使用以下命令之一进入日志目录: `/var/...
    99+
    2023-10-26
    linux
  • 如何定位、解决maven依赖冲突问题
    目录 1.依赖冲突的原因 2.复现一个依赖冲突场景 3.如何定位依赖冲突 3.1.maven show dependencies 3.2.maven helper 4.依赖路径最短优先原则 1.依赖冲突的原因 如果maven项目中,A依...
    99+
    2023-09-03
    算法 linux 前端 原力计划
  • golang内存逃逸问题怎么解决
    在Golang中,内存逃逸问题是指当一个变量在函数内部被分配的时候,它会在函数结束后继续存在,即离开了函数作用域,这样就会导致内存泄...
    99+
    2023-10-21
    golang
  • 解决Linux system v 共享内存问题
    system v 共享内存 #include <sys/types.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int...
    99+
    2022-06-04
    Linux system v 共享内存 Linux 共享内存
  • 如何解决JAVA内存泄漏问题
    本篇内容介绍了“如何解决JAVA内存泄漏问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录什么是内存泄漏内存泄漏的原因内存泄漏有哪些情况...
    99+
    2023-06-20
  • drawimage内存泄漏问题怎么解决
    解决drawImage内存泄漏问题的方法如下:1. 及时释放资源:使用完image对象后,可以调用`image = null;`来手...
    99+
    2023-09-05
    drawimage
  • java内存泄漏问题怎么解决
    这篇文章主要介绍“java内存泄漏问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java内存泄漏问题怎么解决”文章能帮助大家解决问题。1、概念Java中的内存泄露是指不再使用的对象的内存...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作