导读:在使用数据库的过程中,内存不足常常会引起数据库异常。但是内存不足,又会为数据库带来哪些具体的影响呢?本次,我们将通过某客户现场数据库在某个时段内性能严重下降的案例来展示由于主机内存不足而造成数据库日志写入卡顿的问题分析过程。通过本案例,我们也可以对相关问题的分析方法及解决建议有一些深入的了解。

问题描述


2020年1月15号凌晨2点左右客户产线异常,应用后台消息报错业务处理超时。此外,在16号凌晨2点左右和下午2点左右,也发生业务处理超时,影响较大。

故障时段数据库的等待事件信息如下:

问题分析


  1. 查看数据库故障时间段的ash信息,可以看到确实在1:56~1:57分的时候,等待比较严重:

select trunc(sample_time, 'mi'), count(1)

from gv$active_session_history

where sample_time >=  to_date('2020-01-16 01:50:00', 'yyyy-mm-dd hh24:mi:ss')

and sample_time < to_date('2020-01-16  01:59:00', 'yyyy-mm-dd hh24:mi:ss')

and event is not null

group by trunc(sample_time,  'mi')

order by 1;

2.     进一步分析等待事件,可以看到log file sync等待排名第一,而其他等待事件很少。因此主要是log filesync等待事件发了超时:

select inst_id, event, count(1)

from gv$active_session_history

where sample_time >=

to_date('2020-01-16  01:50:00', 'yyyy-mm-dd hh24:mi:ss')

and sample_time <

to_date('2020-01-16  01:58:00', 'yyyy-mm-dd hh24:mi:ss')

and event is not null

group by inst_id, event

order by 1, 3 desc;

3.    进一步查看lgwr 的 trace,但没有发现异常信息。

4.    继续查看log file sync等待信息,可以看到都是被同一条SQL的会话阻塞。该SQL对应的文本为insert into xxx……,是用于业务写日志的语句,体现在应用日志上就是卡在进程刚开始的时候超时的执行。

5.    由于告警日志和LGWR TRACE里都没有异常信息,于是我们可以查看那条SQL的执行情况,发现故障时点每次执行时间变长了。

6.    继续查询故障时段log file sync、LGWR wait for redo copy等待事件直方图信息。从这条insert sql执行历史信息,调用次数并没有突增的情况,但是log filesync/LGWR wait for redo copy等待抖动比较严重:

根据故障处理经验来判断,LGWR抖动比较严重,怀疑物理IO出现了问题。

7.    分析排查物理IO问题,IO没看到异常情况,所以在这里排除了IO引起的日志写入抖动的问题。

8.    查询故障时段SQL占用CPU排名的情况

而该sql_id的sql_text则是:

对故障时间点的ASH报告进行分析,故障时间点这个select 1 from dual占用的cpu最高,这个sql一般是weblogic等中间件测试连接池连接用的,一般不会引起CPU的使用问题,且总体CPU使用率并没有撑满。故在这里可以排除CPU使用影响的情况,由于这套数据库平时内存的使用率就是98%左右,只剩2G空闲内存,而故障时点,只剩几百兆内存。

因此,分析到这里基本可以定位是内存消耗过高引起的问题,这里考虑到触发故障的时间点有高度规律性,于是考虑可能是由于一些定时任务引起的,于是检查了crontab,job定时任务、备份等,但都没发现有故障时间的运行的信息。

这个时候考虑数据库主机层面上定时任务和进程分析一些信息,由于以前出现故障的时候,有让客户开启oswatch采集,故这次也同样从osw中top的采样时间进行检查,且最终发现在异常时osw的采样时间也变长了,说明故障出现的时候整个操作系统都有受影响。

9.    查看osw中ps的信息

将osw采样的时间加大到42秒的和正常15秒内的两个时间进行比对,可以发现故障出现的事件点内,多出来的一个进程是CVU的JAVA进程。故怀疑是cvu的java进程对主机的内存造成了大量的消耗。

查看cvu的运行日志,可以看到cvu是6小时执行一次,而在1:56和13:56的时候主机确实都运行了这个进程。当然,cvu服务停用并不影响数据库实例正常使用,只是在运行cluvfy时有调用到,而在01:56:25~01:57:07这个中间系统中是卡着的,且内存的free一直减少。

从vmstat上看,也验证了异常时主要是内存问题,交换空间页面切换和系统调用次数也在加大。

综合以上的分析,可以确认是cvu定时调用导致内存消耗过大,而内存本身就不足,在调用的那一瞬间引起了数据库主机内存抖动,引起了数据库主机的卡顿,临时处理方法是停止cvu服务,在之后的跟踪中没有发现同样的故障发生,故障处理完成。

cvu定时任务是集群软件调用cvu工具定时检查集群运行状态,记录到日志文件中的。它的运行导致现有服务器内存资源过于紧张,导致几乎所有进程都变慢。

问题解决


本次案例出现的主要原因是由于cvu定时任务进程的调用导致现有服务器内存资源过于紧张,引起了数据库主机内存抖动,造成数据库卡顿。临时处理方法是停止cvu服务,在之后的跟踪中没有发现同样的故障发生,故障处理完成。

本文出自《云和恩墨技术通讯》,在“数据和云”公众号后台回复关键词“云和恩墨技术通讯”可查看往期文档进行下载。


推荐阅读:144页!分享珍藏已久的数据库技术年刊

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

经验之谈:内存问题造成数据库性能异常怎么破?相关推荐

  1. sql 2008服务器内存一直居高不下_经验之谈:内存问题造成数据库性能异常怎么破?...

    作者:罗贵林 原文链接:https://mp.weixin.qq.com/s/2e5eKSoGlU9J4Rjq1zwLnw 导读:在使用数据库的过程中,内存不足常常会引起数据库异常.但是内存不足,又会 ...

  2. mysql 数据库大小与内存关系_【MYSQL】CPU资源和可用内存大小对数据库性能的影响...

    前言 可能影响到数据库性能的几个点,其一就是服务器硬件,也是本节要说的CPU与可用内存. 引入 当热数据超过可用内存大小,MemCache存储引擎缓存层容易失效(当缓存大量失效时,容易产生大量的网络传 ...

  3. oracle实例的内存(SGA和PGA)调整,优化数据库性能

    一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...

  4. MySQL(InnoDB剖析):53---性能调优之(CPU的选择、内存的重要性、磁盘对数据库性能的影响)

    一.CPU的选择 用户首先需要清楚当前数据库的应用类型.一般而言,可分为两大类:OLTP(Online Transaction Processing,在线事务处理)和OLAP(Online analy ...

  5. oracle 监控内存和硬盘的排序比率_最好使它小于 .10,监控数据库性能的SQL

    监控数据库性能的SQL 1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_T ...

  6. 历年双11实战经历者:我们是如何做数据库性能优化及运维-CloudDBA和天象

    8月24日阿里云数据库技术峰会上,阿里云高级DBA专家玄惭带来面对超大规模的数据库集群,尤其是在每年像双11这样重大促销活动中,阿里云是如何进行运维和优化的.本文主要介绍了天象和CloudDBA两个产 ...

  7. Oralce日常高效率巡检_数据库性能、安全检查

    高效进行 Oracle 日常巡检--数据库性能与安全检查 ​对于线上的业务,oracle的数据库运行的稳定性和安全性是用户关心的一个至关重要的问题,除了通过监控平台对数据库进行监控以外,还需要定期对数 ...

  8. oracle张大鹏,Oracle数据库性能优化

    目录 第一篇 优化工具篇 第 1 章 DBA 优化之路 1.1 学习的建议 1.2 工具推荐 1.3 关于操作系统方面的建议 1.4 关于Oracle初始化参数的调整 1.5 关于Statspack的 ...

  9. 事务对性能影响_MySQL数据库性能优化史诗级大总结

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 大数据真好玩点击右侧关注,大数据真好玩! ...

最新文章

  1. Python操作数据库之 MySQL
  2. SpringBoot-14-MyBatis预热篇,MySQL小结
  3. python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...
  4. Hystrix使用Commond的三种方式
  5. 汇编-函数调用的理解
  6. Cage验证码生成器快速上手
  7. linux系统shell知识点,linux shell 知识点
  8. bootstrap基础学习十篇
  9. JAVA API----Date类
  10. 在Linux环境下搭建CCID测试环境
  11. 吃鱼还是吃肉 (10 分)
  12. 视频教程-以太坊区块链实战视频教程(全球同步升级)-区块链
  13. WT6255 WIFI/BT调试文档
  14. 教的好、口碑好的Web前端培训机构有哪些?
  15. 一个在图片上写字的方法
  16. 图神经网络的池化操作
  17. hadoop命令无法创建目录
  18. CPU架构及移动处理器芯片厂商盘点
  19. 安超云生态|安超云与PingCAP完成兼容互认证 携手打造协同生态
  20. SOLID 设计原则 (有点长但很透彻)

热门文章

  1. linux代理过载命令_我们基于Linux的机器人的未来,数据过载和管理以及更多新闻
  2. 平安 开源 数据库 实践_自举开源业务的3个最佳实践
  3. (47)网页布局常用工具
  4. 神奇 | 神奇,原来 Linux 终端下还有这两种下载文件方式
  5. Bootstrap3 弹出提示插件的方法
  6. Bootstrap3 插件的调用方式
  7. 计算机的英语谚语,英语谚语大全_2017考研:计算机专业考研复习要点_沪江英语...
  8. 不能在计算机网络上共享的打印机驱动程序,打印机已经共享,可是当别的电脑安装共享的打印机驱动程序时提示 windows 没法连接到打印机。拒绝访问??...
  9. Ubuntu命令行和图形界面选择设置
  10. html注释的内容如何修改,如何用自定义元素替换HTML注释