导读:在使用数据库的过程中,内存不足常常会引起数据库异常。但是内存不足,又会为数据库带来哪些具体的影响呢?本次,我们将通过某客户现场数据库在某个时段内性能严重下降的案例来展示由于主机内存不足而造成数据库日志写入卡顿的问题分析过程。通过本案例,我们也可以对相关问题的分析方法及解决建议有一些深入的了解。本文出自《云和恩墨月技术通讯(2月刊)》,下载链接:https://www.modb.pro/doc/2249(复制到浏览器中打开或者点击左下角“阅读原文”)

问题描述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服务,在之后的跟踪中没有发现同样的故障发生,故障处理完成。

提示:在处理数据库问题时,很多时候主机的相关性能信息及计数信息可以帮我们更精准的定位问题,譬如内存使用信息、当前进程信息、网络计数信息等,尤其是RAC集群中。在过往的多个案例中,也很大程度上利用了Oracle osw工具采集的主机性能信息。因此,强烈建议在数据库主机上尽量部署osw工具,以便在出故障之后更好的定位根因。

oracle数据库内存不足导致查询变慢,经验:探索内存问题如何造成数据库性能严重异常...相关推荐

  1. Mongo聚合函数使用Sort排序时内存不足导致查询失败,开启allowDiskUse=true

    目录 1.问题描述 2.问题解决 1. Java代码方式解决办法 2. Mongo 原生聚合函数解决办法 1.问题描述 由于项目原因, 需要向数据存储至mongo,在使用过程中 , 单个documen ...

  2. 数据库主从延迟导致查询不准确的解决思路

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 当数据达到一定量的时候,数据库会成为整个系统的瓶颈,一般采取的优化策略为读写分离,数据 ...

  3. 线上突然查询变慢怎么核查

    目录 系统架构 网络层面 网络丢包,重传 网卡满 比如大字段 网络链路变长 受到IO影响 CPU/MEM 服务 资源抢占 FullGc 数据库 没有走索引 并行更新同一条数据 数据分布不均 查询不合适 ...

  4. python2执行程序内存溢出导致被killed的问题因果分析

    问题来源: 执行一段程序,对某个函数重复执行,当执行到一半时,就显示被killed,重复几次均如此.为什么会这样呢? 第一步.定位被killed的根本原图: 使用vi /var/log/message ...

  5. 怎么升级计算机内存容量,简单几步 快速确认电脑内存如何升级

    对于喜欢玩游戏的人来说,能在极致特效下畅玩自己喜欢的游戏,是一件再好不过的事情了.但对于不了解硬件的游戏玩家,往往会存在一个误区,认为显卡才是决定游戏流畅度的唯一标准.其实不然,显卡在游戏流畅度方面确 ...

  6. Oracle数据库案例整理-Oracle系统执行时故障-Shared Pool内存不足导致数据库响应缓慢...

    1.1       现象描写叙述 数据库节点响应缓慢,部分用户业务受到影响. 查看数据库告警日志,開始显示ORA-07445错误,然后是大量的ORA-04031错误和ORA-00600错误. 检查数据 ...

  7. 数据库数据变大会导致查询慢_是什么导致数据库变慢?

    数据库数据变大会导致查询慢 Why is my database so slow? This query used to be so much faster. Why does it take so ...

  8. oracle数据库无法查询,【案例】Oracle报错ORA-01194 ORA-01110 由于数据库SCN不一致导致无法启动...

    天萃荷净 使用_allow_resetlogs_corruption打开无归档日志rman备份库,运维DBA反映服务器宕机后,开启数据库报错ORA-01194 ORA-01110,分析原因为Oracl ...

  9. 连接oracle内存溢出,Linux主机内存溢出导致oracle的SYS用户无法正常登陆

    一般情况下,ORACLE DBA看到如下情况的第一反应是,数据库实例没有启动或者是数据库环境变量没有设置正确,今天遇到的情况均不是以上两种情况,有点特别,且来看看为哪般. oracle@POC-SV1 ...

最新文章

  1. 《Android App开发入门:使用Android Studio 2.X开发环境》——导读
  2. Javascript获取数组中最大和最小值
  3. 【消息队列】kafka是如何保证消息不被重复消费的
  4. android的rgb转bitmap,Android: 格式为RGB_565的bitmap问题
  5. java上传与下载文件_java实现文件的上传和下载功能
  6. 纽交所再次反转重新推动“摘牌” 三大运营商回应来了
  7. [Java] 获取当前Project所在的路径
  8. Python Compiling Environment (Anaconda+VS code+GitKraken+Github)
  9. Windows Server 2008 多元密码策略之ADSIEDIT篇
  10. checked exception和runtime exception and error
  11. http://www.myeclipseide.com/ 官网打不开的问题!myeclipse 官网!
  12. 前端合并单元格(行合并、列合并)
  13. airpods版本号_怎么看airpods版本号 苹果airpods查看固件版本教程详解
  14. 哪些情况会造成小程序违规或下架
  15. Linux解压缩解压tar.gz文件
  16. html中文本旋转90度,css如何使文字方向转90度
  17. EOJ 唐纳德与子串 (Easy)
  18. Android应用商店大全
  19. Django计算机毕业设计jspm高校职称申报系统(程序+LW)Python
  20. Maleimide-PEG-Biotin,Biotin-PEG-MAL,生物素PEG马来酰亚胺用于生物分子检测

热门文章

  1. 京东淘汰“三类人” VS 亚马逊PIP, 企业是否有员工淘汰权?
  2. 设计模式(六)桥连模式Bridge(结构型)
  3. Druid连接池连接MySQL数据库
  4. ie模版字符串_【探秘ES6】系列专栏:模版字符串
  5. python基础(一)字符串查找
  6. venv:虚拟环境创建
  7. 语音助手唤醒动画怎么做?3步教你AE制作动画
  8. python管理文件神器 os.walk
  9. 解决windows10网络适配器出现问题
  10. Windows安装npm淘宝镜像npm ERR! errno -4048 npm ERR! code EPERM npm ERR! syscall unlink