作者:罗贵林

原文链接:https://mp.weixin.qq.com/s/2e5eKSoGlU9J4Rjq1zwLnw

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

问题描述


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

想了解更多关于数据库、云技术的内容吗?

快来关注“数据和云"、"云和恩墨,"公众号及"云和恩墨"官方网站,我们期待大家一同学习与进步!

小程序”DBASK“在线问答,随时解惑,欢迎了解和关注!

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

  1. 经验之谈:内存问题造成数据库性能异常怎么破?

    导读:在使用数据库的过程中,内存不足常常会引起数据库异常.但是内存不足,又会为数据库带来哪些具体的影响呢?本次,我们将通过某客户现场数据库在某个时段内性能严重下降的案例来展示由于主机内存不足而造成数据 ...

  2. java直接内存为什么快_直接内存与 JVM 源码分析

    直接内存(堆外内存) 直接内存有一种叫法,堆外内存. 直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存.这个差别与之前的堆.栈.方法区,那些内存都是经过了虚拟化.所以严 ...

  3. 苹果内存不够怎么办_手机内存清理了还是不够用?不知道这些方法,真是太可惜了...

    手机会越用越卡?手机内存不够大,内存不够怎么办?最好的方法就是清理自己的内存,那么你知道自己手机里面的内存怎样清理干净吗?是否还会有一些清理不掉的缓存呢,就算你点了清理,甚至删除了一俩个软件,手机仍然 ...

  4. 16g内存 32g内存游戏区别_电脑内存8G和16G的差别大吗?打游戏需要多大内存?

    Hello大家好,我是兼容机之家的小牛. 电脑内存是除了CPU之外最重要的元件之一,电脑内存的多少直接影响着运行大型软件.多任务时电脑的流畅程度,很多玩家在第一次购买电脑的时候并不知道应该购买内存多大 ...

  5. oracle使用 union all 用自增序列_值得收藏的Oracle数据库性能优化

    值得收藏的Oracle数据库性能优化 年尾了,新的一波面试军又要开始了,被问到最多的可能就是性能优化,尤其是数据库性能优化,这个面试题不管是初中高级工程师都会被问到.因此我觉得下面31点ORACLE优 ...

  6. oracle union all 特别慢_值得收藏的Oracle数据库性能优化

    前言 年尾了,新的一波面试军又要开始了,被问到最多的可能就是性能优化,尤其是数据库性能优化,这个面试题不管是初中高级工程师都会被问到.因此我觉得下面31点ORACLE优化还是值得调几个去面试.也方便以 ...

  7. sql 2008服务器响应慢,SQL Server 2008停止响应后,Web服务器不活动

    我最近设置了几台服务器,旨在将我们的网站移动到它们.一个是Windows Web Server 2008,另一个是运行Sql Server 2008的Windows Server 2008 Stand ...

  8. 内存泄漏代码_调查内存泄漏第1部分–编写泄漏代码

    内存泄漏代码 前几天,我发现了这个小问题:该服务器运行了一段时间,然后掉下来了. 然后通过启动脚本重新启动,整个过程重复进行. 听起来并没有什么坏处,因为它虽然对数据造成了重大损失,但对业务的重要性并 ...

  9. 内存泄漏分析_调查内存泄漏第2部分–分析问题

    内存泄漏分析 这个小型系列的第一个博客介绍了如何创建一个非常泄漏的示例应用程序,以便我们可以研究解决服务器应用程序上基于堆的问题的技术. 它展示了Producer-Consumer模式的一个大问题,即 ...

最新文章

  1. vs 编译android so
  2. python怎么读取txt文件第二行-Python:如何选择文本文件的第一行,以及第二行……?...
  3. 分析Linux磁盘管理与文件系统专题三
  4. OSGi:进入微服务架构的门户
  5. c语言math函数 sgn,常用矩阵计算C语言代码
  6. python中的date的含义_python中date、datetime、string的相互转换
  7. CentOS6.x系统挂载NTFS分区的移动硬盘
  8. android numberpicker,NumberPicker实现滑动选择
  9. 扩展JS格式化(Format)功能及评论树
  10. Don't Panic! KRACK 没你想象的那么糟
  11. 在CentOS6.7搭建Qt5.6.2环境
  12. 适合小白使用的python编辑器_5个适合小白的Python开发必备工具(推荐)
  13. linux怎么增加用户账号,linux怎么添加用户
  14. 零延迟!海康大华宇视网络监控摄像头RTSP浏览器网页无插件播放终极解决方案
  15. python绘图设置正交坐标等距_python – 使用cartopy在其他项目中绘制投影数据
  16. 百度AI市场热品试用 | 台面式双目活 体检测USB摄像头
  17. wordpress 邮件_停止在WordPress中使用一次性电子邮件地址
  18. 把梳子卖给和尚的故事
  19. 随机红包 java_微信随机生成红包金额算法java版
  20. Excel对比Python实现方差分析

热门文章

  1. 数据库MySQL入门第一天
  2. Android端发送字符到Wed端,android应用端向web端获取字符串。
  3. java中start与loop_java for-loop问题
  4. Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
  5. 如何自己去写一个鼠标驱动_为什么要用哈密顿采样器(Hamiltonian Monte Carlo),以及如何自己写一个...
  6. 组合赋权法之python
  7. 小程序开发之基础知识(0)
  8. easypoi list中的map导出_如何优雅的导出 Excel
  9. python查询最高分_精通 Oracle+Python,第 1 部分:查询最佳应践
  10. java坐标移动题目case_用java怎样编写一个二维坐标平移程序