【Oracle生产运维】数据库服务器负载过高异常排查处理
说明
在Oracle数据库运维工作中,经常会遇到Oracle数据库服务器平均负载(load average)突然异常升高,如果放任不管,严重的情况下会出现数据库宕机、服务器重启等重大故障。因此,当发现数据库服务器平均负载异常高的时候,必须予以重视,并立即开展处理工作。
很多刚工作或者是没这方面处理经验的同学可能遇到这种情况就会开始慌张,不知从何下手,无法快速定位出引起负载异常的原因。
下面介绍我在工作中常用的排查思路供大家参考。截图的结果皆在实验环境中截取,与实际生产环境有较大出入,只作为操作演示。
1 负载过高现象
巡检发现、监控平台或者在操作系统中执行命令,显示load average值异常过高。
Linux常用的load average监控命令:
[oracle@oracle11g ~]# sar -q 1 5
此命令可以查看当前的平均负载,以及一分钟以来、五分钟以来和十五分钟以来的平均负载。
引起Oracle数据库服务器负载异常增高的原因有很多不同情况,以下是比较常见的情况:
- 大量排序、SQL解析、慢SQL引起CPU过高;
- 大量直接路径读、全表扫描、并发读写引起IO繁忙。
2 确认高负载类型
需要确认负载突然异常增高是CPU还是IO或者共同引起的,缩小问题范围,为下一步定位具体原因做准备。
登录数据库服务器,切换到orace用户。
2.1 检查平均负载
[oracle@oracle11g ~]$ sar -q 1 5
Linux 2.6.32-642.el6.x86_64 (oracle11g) 06/09/2024 _x86_64_ (1 CPU)05:34:11 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
05:34:12 AM 0 382 0.49 0.43 0.47
05:34:13 AM 0 382 0.49 0.43 0.47
05:34:14 AM 0 382 0.49 0.43 0.47
05:34:15 AM 0 382 0.49 0.43 0.47
05:34:16 AM 0 382 0.49 0.43 0.47
Average: 0 382 0.49 0.43 0.47
说明:
- runq-sz:运行队列,也就是等待运行的进程数;
- plist-sz:进程创建的总数,包括线程;
- ldavg-1:最后1分钟的平均负载;
- ldavg-5:最后5分钟的平均负载;
- ldavg-15:最后15分钟的平均负载。
如果runq-sz值很高,表明可能是CPU资源使用率过高引起的,若值低可能是IO过高引起的。
这里只是一个初步判断,需要执行下面的命令确认猜测。
2.2 检查CPU使用率
1)执行top命令查看所有进程的cpu和内存使用情况
[oracle@oracle11g ~]$ top -c
主要观察排在前几位的进程的%CPU,一般当负载异常时,前面两三个进程的%CPU会在100%。
top命令也可以看到平均负载load average的情况。
2)执行iostat命令查看CPU平均利用率
说明:
- %user:用户空间的cpu使用率;
- %idle:空闲的cpu。
如果%idle过高,说明CPU使用率过高。
2.3 检查I/O传送速率
1)查看IO等待
%iowait为CPU等待IO的百分比,如果非常高,则说明IO有瓶颈。
[oracle@oracle11g ~]$ iostat -c 1 5
Linux 2.6.32-642.el6.x86_64 (oracle11g) 06/09/2024 _x86_64_ (1 CPU)avg-cpu: %user %nice %system %iowait %steal %idle0.05 0.00 0.16 0.10 0.00 99.70avg-cpu: %user %nice %system %iowait %steal %idle0.00 0.00 1.01 0.00 0.00 98.99avg-cpu: %user %nice %system %iowait %steal %idle0.00 0.00 0.00 0.00 0.00 100.00avg-cpu: %user %nice %system %iowait %steal %idle0.00 0.00 1.00 1.00 0.00 98.00avg-cpu: %user %nice %system %iowait %steal %idle0.00 0.00 0.00 1.02 0.00 98.98
2)查看IO速率
[oracle@oracle11g ~]$ sar -b 1 5
Linux 2.6.32-642.el6.x86_64 (oracle11g) 06/09/2024 _x86_64_ (1 CPU)05:42:33 AM tps rtps wtps bread/s bwrtn/s
05:42:34 AM 12.12 4.04 8.08 129.29 97.98
05:42:35 AM 12.12 0.00 12.12 0.00 114.14
05:42:36 AM 8.08 0.00 8.08 0.00 97.98
05:42:37 AM 15.15 4.04 11.11 129.29 130.30
05:42:38 AM 43.43 7.07 36.36 226.26 502.02
Average: 18.18 3.03 15.15 96.97 188.48
说明:
- tps:每秒钟的I/O操作总数。这个值如果持续很高,可能表明磁盘I/O非常繁忙;
- rtps:每秒钟的读操作数。高读操作数可能表明有大量的数据被读取;
- wtps:每秒钟的写操作数。高写操作数可能表明有大量的数据被写入;
- bread/s:每秒钟从物理设备读入的数据量,单位为 块/s。块的大小通常为512字节;
- bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s;
- rb/c 和 wb/c:分别是每次读取和写入操作的平均块数。如果这个值很低,可能表明有许多小的I/O请求,这可能导致磁盘性能问题。
3 定位问题,找出引起高负载的SQL语句
Oracle数据库问题的大部分原因基础都是由SQL语句引起的。
假设经过上面的排查,确定为CPU使用率高引起的高负载,下面通过几个脚本定位到引起CPU使用率过高的SQL语句。
3.1 直接找到引起高负载的TOP SQL
登录数据库,检查近xx分钟的资源使用率(CPU、IO)TOP5的SQL:
SQL>
select ash.sql_id,sum(decode(ash.session_state,'on cpu',1,0)) "cpu",sum(decode(ash.session_state,'waiting',1,0)) -sum(decode(ash.session_state,'waiting',decode(en.wait_class,'user i/o',1,0),0)) "wait",sum(decode(ash.session_state,'waiting',decode(en.wait_class,'user i/o',1,0),0)) "io",sum(decode(ash.session_state,'on cpu',1,1)) "total"from v$active_session_history ash,v$event_name enwhere sql_id is not null and en.event#=ash.event# and ash.sample_time > sysdate -&min/(24*60)group by ash.sql_idorder by sum(decode(ash.session_state,'on cpu',1,1)) desc;
根据sql_id找到对应的sql_text:
SQL> select SQL_TEXT from v$sqltext where sql_id = '&sql_id' order by piece;
3.2 根据进程号找出SQL
前面查看cpu负载的时候使用了top命令,输出的信息中就包含有进程号PID,根据这个PID可以定位到具体是哪条SQL语句。
将异常的PID代入Oracle的几个常用的性能视图:
SQL>
set long 999999999999999999
set pages 200
select st.sql_id,st.sql_testfrom v$sqltext st,v$session se,v$process pwhere st.sql_id = se.sql_idand se.paddr = p.addrand p.spid = '&PID'order by st.piece;
得到的sql_test即为引起CPU高负载的SQL语句。
3.3 根据等待事件判断找出SQL
此方法需要对常见的等待事件比较熟悉。
查看当前正在执行的会话和相应等待事件:
SQL>
set lines 300
col machine for a20
col username for a20
col event for a30
col program for a25
col state for a10
select inst_id,sid,serial#,sql_id,sql_hash_value shv,event,username,program,machine,blocking_instance bi,blocking_session bs,seconds_in_wait wait_mfrom gv$sessionwhere (event not like '%dbms%' and event not like '%gcs remote%' and event not like '%mon timer%'and event not like '%SQL Net%' and event not like '%Streams AQ%' and event not like '%jobq slave wait%'and event not like '%ASM background timer%' and event not like '%DIAG idle wait%'and event not like '%VKTM logical idle Wait%' and event not like '%ges remote message%' and event not like '%Space Manager slave idle wait%' and event not like '%class slave wait%' and event not like '%wait for unread message on broadcast channel%' and event not like '%pmon timer%')and status = 'ACTIVE' and wait_class != 'idle'and sql_id is not null order by event,sql_id desc;
主要看出现大量重复的sql_id和event。
注意,当同时存在大量与CPU和IO相关的等待事件时,应根据前面排查的结果侧重分析。即,当明确了是CPU问题时,就应带看CPU相关的等待事件对应的sql_id。
3.4 查看ASH或AWR报告
生成ASH报告或AWR报告需要将快照时间段设置在高负载期间。
当负载异常持续事件是短时间(10-20分钟)时,生成ASH报告。当负载异常持续事件是长时间(1小时以上)时,生成AWR报告。
分析报告也是需要对等待事件比较熟悉,此处就不对ASH报告和AWR报告的分析方法做说明,请自行查阅资料。
报告生成方法:
------ASH
# su - oracle
$ cd
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/ashrpt.sql------AWR
# su - oracle
$ cd
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/awrrpt.sql
报告生成的目录在oracle用户家目录下。
4 问题处理
找出引起高负载的问题SQL语句后,反馈给业务或应用或开发进行检查处理,同时也需要配合他们进行分析。
相关文章:
【Oracle生产运维】数据库服务器负载过高异常排查处理
说明 在Oracle数据库运维工作中,经常会遇到Oracle数据库服务器平均负载(load average)突然异常升高,如果放任不管,严重的情况下会出现数据库宕机、服务器重启等重大故障。因此,当发现数据库服务器平均负载…...
IIR和FIR两种滤波器有什么区别?
概念的区分 IIR(Infinite Impulse Response,无限脉冲响应)和FIR(Finite Impulse Response,有限脉冲响应)滤波器是两种常见的数字信号处理滤波器类型,它们在结构、性能和用途上有显著区别&#…...
让GNSSRTK不再难【第二天-第4部分】
第12讲 GNSS授时与PPS 12.1 为什么需要高精度时间 授时的传统理解就是时间传递或者对时。比如以前手机没这么方便时,大家还都使用石英钟手表看时间时,大家都习惯晚上七点准时对着中央一套的报时,来校准你家的机械钟或者挂钟,这就…...
「OC」UI练习(一)—— 登陆界面
「OC」登陆界面 明确要求 一个登陆界面的组成,用户名提示以及输入框,密码提示提示以及输入框,登陆按钮,以及注册按钮,根据以上要求我们将我们的组件设置为成员变量。 //viewControl.h #import <UIKit/UIKit.h>…...
基于机器学习和深度学习的NASA涡扇发动机剩余使用寿命预测(C-MAPSS数据集,Python代码,ipynb 文件)
以美国航空航天局提供的航空涡扇发动机退化数据集为研究对象,该数据集包含多台发动机从启动到失效期间多个运行周期的多源传感器时序状态监测数据,它们共同表征了发动机的性能退化情况。为减小计算成本,需要对原始多源传感器监测数据进行数据…...
计算机组成原理-常见计算题含IEE754
一、补码加减运算 二、溢出判断 采用一位符号位 采用双符号位 三、定点数的移位运算 算术右移 算数左移 反码的算术移位 补码的算术移位 四、浮点数的表示 一个右规的例子 五、IEEE754 移码...
InnoDB存储引擎非常重要的一个机制--MVCC(多版本并发控制)
Mysql是如何实现隔离性的?(锁MVCC) 隔离性是指一个事务内部的操作以及操作的数据对正在进行的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。隔离性可以防止多个事务并发执行时,可能存在交叉执行导致数据的不…...
【DevOps】服务器硬件基础知识
目录 前言 1、处理器(CPU):服务器的“大脑” 2、内存(RAM):服务器的“工作台” 3、存储(Storage):服务器的“仓库” 4、 网络接口(NIC)&…...
6.10 c语言
7.1 if-else语句 简化形式 if(表达式)语句块 阶梯形式 if(表达式1)语句块1 else if(表达式2)语句块2 嵌套形式 if() if() 语句1 else 语句2 else if() 语句3 else 语句4 表达式一般情况下为逻辑表达式或关系表达式 #include <stdio.h>//从小到大排序,输出顺…...
jenkins插件之Jdepend
JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…...
vue3之基于el-image实现图片预览
实现的功能: 图片可放大预览,支持放大、缩小、向左向右旋转查看可点击任意一张图后进行左右切换查看大图 主要使用的方法:splice和concat 主要代码 // template中 <div><el-imagev-for"(item, index) in imgsData":src&q…...
wooyun_2015_110216-Elasticsearch-vulfocus
1.原理 ElasticSearch具有备份数据的功能,用户可以传入一个路径,让其将数据备份到该路径下,且文件名和后缀都可控。 所以,如果同文件系统下还跑着其他服务,如Tomcat、PHP等,我们可以利用ElasticSearch的备…...
Fedora的远程桌面
要在 Fedora 40 上开启远程桌面功能。 首先,要确保已安装 gnome-remote-desktop 和 vino 包。 这些软件包通常默认安装在 Fedora 的 GNOME 桌面环境中。 可以按照以下步骤操作: 1、判断电脑是否安装了 gnome-remote-desktop 和 vino 包: tomfedora:…...
CSS id选择器
目录 任务描述 相关知识 id选择器 id选择器语法 类选择器与id选择器的区别 编程要求 任务描述 在本关中,你将通过id选择器的方式完成页面菜单栏样式布局,栏目导航等任务。 完成任务之后,基本页面效果如下: 动态效果如下&am…...
22.搭积木
上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/717 题目描述 小爱用积木搭起一座金字塔。为…...
手机投屏到电脑时,手机提示连接失败
前言 注意,本方法建立在你已经通过其他帖子等解决了前置条件的情况下,手机提示连接失败情况下,包括但不限于关闭防火墙、安装无线投屏工具、手机和电脑连接在同一个WiFi频段下、关闭杀毒软件等。 具体操作方法 1、请进入设置 > 系统和…...
软件测试--Mysql快速入门
文章目录 软件测试-mysql快速入门sql主要划分mysql常用的数据类型sql基本操作常用字段的约束:连接查询mysql内置函数存储过程视图事务索引 软件测试-mysql快速入门 sql主要划分 sql语言主要分为: DQL:数据查询语言,用于对数据进…...
什么是PV操作
PV操作是一种在操作系统中用于同步和互斥的机制,它基于信号量(Semaphore)的概念。在并发编程中,多个进程或线程可能会同时访问共享资源,PV操作可以用来确保这些访问是同步的,以防止竞态条件和数据不一致的问题。 PV操作包括两个原子操作: P操作(Proberen,测试):这…...
差动放大器
差动器的出现是为了解决直接耦合电路存在的零点漂移问题,另外,差动放大器还有灵活的输入,输出方式。 一,基本差动放大器 差动放大器在电路结构上具有对称性,三极管VT1,VT2同型号,R1R2,R3R4,R5…...
【数据结构与算法 经典例题】括号匹配问题
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 目录 一、问题描述 二、解题思路 🍃破解之道 🍃…...
2024年6月最新开源电视影视TVAPP原生源码和后台管理平台源码及完整教程
本套源码为本人维护更新完善半年左右的还在使用开发的源码,与市面上倒卖的残次品不一样,没有可比性,向下兼容安卓4.0,向上兼容安卓13以上TV电视系统, 完全无闪退,弹窗报错,卡死、异常死循环残次…...
[大模型]GLM4-9B-chat Lora 微调
本节我们简要介绍如何基于 transformers、peft 等框架,对 LLaMA3-8B-Instruct 模型进行 Lora 微调。Lora 是一种高效微调方法,深入了解其原理可参见博客:知乎|深入浅出 Lora。 这个教程会在同目录下给大家提供一个 nodebook 文件,…...
目标检测算法YOLOv9简介
YOLOv9由Chien-Yao Wang等人于2024年提出,论文名为:《YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information》,论文见:https://arxiv.org/pdf/2402.13616 ;源码见: https://github.com/W…...
达梦数据库搭建守护集群
前言 DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)…...
OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建
OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…...
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
文章目录 前言一、项目初始化搭建1、创建项目:test_models_django2、创建应用app01 二、配置mysql三、创建model实例,自动创建数据库表1、创建对象User类2、执行命令 四、思考问题(****)1、是否会生成新表呢(答案报错&…...
对象创建的4种模式
1. 工厂模式 这种模式抽象了创建具体对象的过程,用函数来封装以特定接口创建对象的细节 缺点:没有解决对象识别的问题(即怎样知道一个对象的类型) function createPerson(name, age, job) {var o new Object();o.name name;o.ag…...
如何判断 是否 需要 CSS 中的媒体查询
以下是一些常见的使用媒体查询的场景: 响应式布局:当设备的屏幕尺寸变化时,我们可以使用媒体查询来调整布局,以适应不同的屏幕尺寸。 设备特性适配:我们可以使用媒体查询来检测设备的特性,如设备方向、分辨…...
设计模式-装饰器模式(结构型)
装饰器模式 装饰器模式是一种结构模式,通过装饰器模式可以在不改变原有类结构的情况下向一个新对象添加新功能,是现有类的包装。 图解 角色 抽象组件:定义组件的抽象方法具体组件:实现组件的抽象方法抽象装饰器:实现…...
升级HarmonyOS 4.2,开启健康生活篇章
夏日来临,华为智能手表携 HarmonyOS 4.2 版本邀您体验,它不仅可以作为时尚单品搭配夏日绚丽服饰,还能充当你的健康管家,从而更了解自己的身体,开启智能健康生活篇章。 高血糖风险评估优化,健康监测更精准 …...
开源众包/深圳网站建设推广优化公司
转载地址:http://blog.sina.com.cn/s/blog_56d04ca701000axw.html 飞鸽传书(IP Messenger)是一个小巧方便的即时通信软件,它适合用于局域网内甚至广域网间进行实时通信和文档共享。特别是在局域网内传送文件/文件夹的速度非常快!…...
做美篇发网站/外链是什么意思
又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和GDI的一些运用。 理论: 在学习多线程之前,首先要了解一下什么是进程? 进程:(关键字Process)进程是一个具有一定独立功能的程序关于某个数据集合…...
贵阳设计网站建设/北京seo排名外包
方法一、 微服务项目的开发过程中,工程会非常多,经常要启动很多个服务,才能完成一项测试。启动的多了,容易开发者带来错乱的感觉,很不方便管理。在idea作为开发工具时,推荐一个很好用的功能--Run Dashboar…...
完成网站的建设工作内容/淘宝店铺推广方式有哪些
dedecms怎么给权限 Linux空间用户都是可以自定义网站目录权限的 data、templets、uploads、html(或a) 将这些目录权限设置为读、写、但不能执行权限,linux环境目录权限代码为:766 相关推荐:《dedecms教程》 include、member、plus、后台管…...
做电子商务系统网站/晋城今日头条新闻
这个问题严格来说是肯定有的,kafka只能保证分区内的有序性。 下面是kafka作者Jay Kreps的blog中介绍kafka设计思想的一段话。 Each partition is a totally ordered log, but there is no global ordering between partitions (other than perhaps some wall-clock…...
织梦做双语版网站/创建一个网站需要什么
QC七大手法是品质管理的七种工具,随着生产技术与理念的发展,QC七大手法逐渐从旧QC七大手法衍生出了新QC七大手法,本文对新旧QC七大手法做一概述。 旧QC七大手法一、查检集数据 (设备点检讨论)二、层别作解析 ÿ…...