大页内存配置引发的数据库性能问题

这篇具有很好参考价值的文章主要介绍了大页内存配置引发的数据库性能问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景:

        用户来电报故障,他们一套正常运行的Oracle数据库,突然出现了10分钟左右的性能卡顿问题,期间全部的业务操作都变慢,他们通过查看问题期间的awr报告,发现数据库在问题时间出现大量的libary cache等待事件,但每秒的硬解析并不高,不知道是什么原因导致的数据库性能问题,需要我们查找问题的原因。

问题分析:

        分析问题时间段的awr报告,可以看到问题期间的TOP等待事件相比与正常时间段,多了很多的涉及SGA内存池buffer pool,shared pool的内存latch锁等待事件。

大页内存配置引发的数据库性能问题,数据库,oracle,dba,运维,问题分析

        查看数据库的配置以及运行指标,问题时间段数据库的负载相对还是比较高的,属于业务的高峰期,每秒的SQL执行35699次,并且存在一定数量的SQL硬解析每秒平均17次,此外,数据库的服务器内存配置为1T,SGA配置为500G,其中buffer cache和shared pool的配置分别为450048M以及50097M,这个内存配置还是比较大的。

大页内存配置引发的数据库性能问题,数据库,oracle,dba,运维,问题分析

大页内存配置引发的数据库性能问题,数据库,oracle,dba,运维,问题分析

        继续往下分析,由于数据库服务器没有配置OSW等其他的资源监控工具,我们只能通过AWR里面操作系统的性能统计进行分析,可以看到问题时间段内存分页写入磁盘虚拟内存swap的计数VM_OUT_BYTES(Bytes paged out due to virtual memory swapping)数量有大幅的增长,短时间出现这么多的内存分页操作,很有可能是当时的操作系统内存已经耗尽或是内存参数配置不合理导致,而内存分页写入到磁盘的操作,会导致数据库性能出现下降甚至卡顿,因为在内存里面的操作速度跟在磁盘里面的操作速度不是一个量级的,这也难怪问题时间段数据库出现大量的内存池latch锁等待。

大页内存配置引发的数据库性能问题,数据库,oracle,dba,运维,问题分析

        分析数据库当前的内存使用情况,当前服务器的配置内存为1T,HugePage巨页内存分配了402G,但可以看到HugePages_Free的剩余内存为396G,也就是说数据库其实没有使用到这一部分的巨页内存 ,而服务器程序进程的通常也不会使用到巨页内存,所以这部分内存被完全闲置。

大页内存配置引发的数据库性能问题,数据库,oracle,dba,运维,问题分析

        从数据库实例最近一次启动的alert日志,也可以看到数据库实例初始化SGA的时候并没有用到巨页内存。

大页内存配置引发的数据库性能问题,数据库,oracle,dba,运维,问题分析

        计算服务器总的内存分配情况,数据库SGA配置500G,PGA配置125G,因为SGA没有存放在HugePage巨页内存里面,所以实际的服务器内存分配情况为SGA+PGA+HugePage=1027G,这里还没算上集群以及操作系统其他服务使用使用到的内存,而服务器的内存为1T,实际可以使用为1010G左右,所以当前服务器的内存已经属于超配的情况。

        对于服务器的内存出现超配的问题,只要数据库并发负载增高或者出现大排序或是使用了大量内存的慢语句,都很有可能会导致操作系统物理内存分页写入了磁盘虚拟内存,进而导致一个平常看起来运行正常的数据库突然出现了性能卡顿的问题。

问题解决:

        当前的数据库服务器内存为1T,SGA配置为500G,对于这种大内存的数据库,开启大页内存的做法是合理的,因为它可以确保数据库SGA内存不会交换出去以及减少内存页的分配争用,但对于设置大页内存,一定要按正确的步骤进行设置,并确认数据库实例SGA内存已经使用到,小心将提升性能的方法变成引发性能恶化的问题。

大页内存大致步骤可以参考以下

        1 计算大页内存的配置大小,可以使用官方的hugepages_settings.sh脚本进行评估或者按公式(SGA大小/M+5120M)/2M。

        2 关闭数据库实例,并确认数据库实例使用到的共享内存已经释放。

        3 变更配置操作系统文件/etc/sysctl.conf,配置大页内存参数。

--设置大页内存页数
vm.nr_hugepages= 66560
--设置大页内存的用户oracle的gid
vm.hugetlb_shm_group =54321

        4 变更配置操作系统文件/etc/security/limits.conf,设置oracle用户大页内存资源限制为无限制。

oracle   soft   memlock  unlimited
oracle   hard   memlock  unlimited

        5 生效大页内存参数,并通过操作系统/proc/meminfo文件确认大页内存是否被使用。

sysctl -p

        6 启动数据库实例。

        7 确认数据库实例使用到大页内存,并通过数据库启动的alert日志和操作系统/proc/meminfo文件确认大页内存是否被使用。文章来源地址https://www.toymoban.com/news/detail-831964.html

到了这里,关于大页内存配置引发的数据库性能问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 功能测试也可以发现数据库相关的性能问题

    很多同学认为功能测试和性能测试是严格分开的,功能测试人员无法发现性能问题。其实不是这样的,功能测试人员在验证功能时也可以发现性能问题;一些功能反而在功能测试环境不好验证,需要在性能环境上测试。     今天咱们就说一下测试涉及数据库操作的功能时如何

    2024年02月14日
    浏览(51)
  • 酷克数据简丽荣:“模型热”将引发云计算与数据库行业大变革

    随着LLM智能涌现的发生和API的爆发式发展,各行各业都在关注如何用好通用模型,如何调校好适合自己的行业应用。LLM最重要的输入是数据,最频繁的接口是数据库。模型应用的普及会对数据库产生哪些影响?大模型时代对企业的数据管理能力和范式提出了哪些新的要求?

    2024年02月10日
    浏览(41)
  • 记录恶意SQL注入引发的RDS只读数据库CPU飚100%

    前言 : 在广州这座城市下着小雨的晚上,我正在厨房洗着碗,突然手机有来电,脱下手套,一看是来自阿里云的告警电话。打开飞书查看告警内容,发现某个业务的RDS只读实例CPU飚到100%,下意识觉得是不是有慢查询导致,想着不会有啥问题,上去kill慢查就好了,结果发现是

    2024年03月19日
    浏览(47)
  • MySQL:想实现sql语句进行批量删除数据库或表,而引发的熬夜探究

    因为在自测过程中,创建了很多数据库,一个个手动删除属实有点对不起程序员这个身份,那么有没有简单的sql语句操作来进行批量删除数据库呢?于是便有了本篇文章 上面图片是AI创作,未经允许,不可商用哦! 删库跑路需谨慎, 放弃一切亦不易。 了解到数据库或表的信

    2024年01月16日
    浏览(60)
  • Spring 工程数据库密码用户配置问题

    在 Spring 工程中,连接 MySQL 数据库的用户名和密码通常保存在配置文件中(比如 application.properties 或者 application.yml),而在跑测试用例时,这些配置信息往往需要与生产环境隔离开来。 可以使用 Spring 的配置文件来解决这个问题,具体方法如下: 在主配置文件中只写明用户

    2024年02月09日
    浏览(44)
  • SpringBoot项目application配置文件数据库密码上传git暴露问题解决方案

    项目中含有配置文件,配置文件中含有数据库的用户名和密码,上传git直接对外网开放。那后果会怎样可想而知。 jasypt(Java Simplified Encryption)是一个简化的开源 Java 加密工具库 输出 使用很简单,只需要引入jasypt-spring-boot-starter依赖,然后将配置文件中的明文换成\\\"ENC(密文即可)“

    2024年04月14日
    浏览(51)
  • 内存数据库如何发挥内存优势?

    与以磁盘存储为主的普通数据库相比,内存数据库的数据访问速度可以高出几个数量级,能大幅提高运算性能,更适合高并发、低延时的业务场景。 不过,当前大部分内存数据库仍然采用 SQL 模型,而 SQL 缺乏一些必要的数据类型和运算,不能充分利用内存的特征实现某些高

    2024年02月03日
    浏览(46)
  • Redis缓存设计与性能优化【缓存和数据库不一致问题,解决方案:1.加过期时间这样可以一段时间后自动刷新 2.分布式的读写锁】

    在大并发下,同时操作数据库与缓存会存在数据不一致性问题 1、双写不一致情况 2、读写并发不一致 解决方案: 1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生缓存不一致, 可以给缓存数据加上过期时间,每隔一

    2024年04月13日
    浏览(54)
  • Redis内存数据库

    Redis内存数据库 NoSQL数据库简介 Redis简介 Redis应用场景 windows下安装和使用Redis 在linux下安装redis Redis数据可视化RedisDesktopManager Redis配置 Redis 数据类型 Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List) Redis 集合(Set) Redis 有序集合(sorted set) Redis key命令 Redis连接命令 Redis服务器命令

    2024年02月09日
    浏览(43)
  • springboot启动加载数据库数据到内存

    一般来说,springboot工程环境配置放在properties文件中,启动的时候将工程中的properties/yaml文件的配置项加载到内存中。但这种方式改配置项的时候,需要重新编译部署,考虑到这种因素,今天介绍将配置项存到数据库表中,在工程启动时把配置项加载到内存中。 springboot提供了

    2024年01月17日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包