【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

image.png

主要观察排在前几位的进程的%CPU,一般当负载异常时,前面两三个进程的%CPU会在100%。

top命令也可以看到平均负载load average的情况。

2)执行iostat命令查看CPU平均利用率

image.png

说明:

  • %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   %idle
           0.05    0.00    0.16    0.10    0.00   99.70

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    1.01    0.00    0.00   98.99

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    1.00    1.00    0.00   98.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.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 en
 where sql_id is not null and en.event#=ash.event# and ash.sample_time > sysdate -&min/(24*60)
 group by ash.sql_id
 order 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语句。

image.png

将异常的PID代入Oracle的几个常用的性能视图:

SQL>
set long 999999999999999999
set pages 200
select st.sql_id,st.sql_test
  from v$sqltext st,v$session se,v$process p
 where st.sql_id = se.sql_id
   and se.paddr = p.addr
   and 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_m
  from gv$session
 where (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语句后,反馈给业务或应用或开发进行检查处理,同时也需要配合他们进行分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/718268.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

房间预订系统怎么做

在这个日新月异的时代,旅游已经成为了许多人生活中不可或缺的一部分。然而,在规划一场完美的旅行时,房间预订往往是一个让人头疼的问题。今天,我要为大家揭秘一款颠覆传统的房间预订系统——它不仅仅是一个预订工具,更…

需求虽小但是问题很多,浅谈JavaScript导出excel文件

最近我在进行一些前端小开发,遇到了一个小需求:我想要将数据导出到 Excel 文件,并希望能够封装成一个函数来实现。这个函数需要接收一个二维数组作为参数,数组的第一行是表头。在导出的过程中,要能够确保避免出现中文乱…

使用 calibre 拆分电子书合辑

文章目录 引言下载插件拆书设置封面等元信息 引言 下载电子书合辑后,想拆分为单独成册的文件 https://bookfere.com/post/603.html 教程使用 calibre 的 EpubSplit 插件,这里我跟着实践,记录在此,希望能帮助你。 本文基于 macOS …

【工程2区】毕业神刊 —— 1-2个月录用!非黑!非预警!

【欧亚科睿学术】 电力能源类SCIE ✅ 进展超顺 ✅ 录用率高 ✅ 领域相关均可 【期刊简介】IF:1.0-2.0,JCR2区,中科院4区 【版面类型】正刊,仅少量版面 【终审周期】走期刊部系统,预计3个月左右录用 【检索情况…

计算机图形学入门13:纹理映射常见问题、MipMap

上一章介绍了纹理映射,这一章介绍纹理映射常见的问题。 1.纹理太小 1.1产生原因 例如要渲染一面墙,它的分辨率4K,但与它对应的纹理大小是256x256,这样要怎样?显然纹理会被拉大。当墙面上一个点去查询纹理时&#xff0…

浏览器开发公司Brave 将自己的搜索结果与其 Leo AI 助手集成

Brave Software是一家开发浏览器的公司,其主要产品是Brave浏览器。Brave浏览器基于Chromium项目开发,具有高性能和隐私保护的特点。此外,Brave浏览器还提供了“off record”模式,允许用户在不记录浏览历史的情况下使用浏览器。关于…

通用视频模板解决方案,视频生产制作更轻松

对于许多企业来说,视频制作往往面临着技术门槛高、制作周期长、成本投入大等难题。为了解决这些问题,美摄科技凭借其领先的跨平台视频技术和完善的工具链,推出了面向企业的视频通用模板解决方案,为企业视频制作带来了全新的革命性…

宁德等保测评公司有哪些?位于哪里?

据悉2024年中国百强城市就包含福建宁德。宁德市,福建省辖地级市,GDP快速增长,拥有众多自然风光和历史文化名镇,是一个生活幸福的城市。这里的小伙伴在问,宁德等保测评公司有哪些?位于哪里? 宁德…

RAG系列之:深入浅出 Embedding

RAG系列之:深入浅出 Embedding 什么是文本向量化? 文本向量化就是将文本数据转成数字数据,例如:将文本 It was the best of times, it was the worst of times. 转成 [0, 1, 0, 2, 2, 2, 2, 2, 0, 1]。 为什么要进行文本向量化…

阿三再现强盗行为,vivo、OPPO或彻底失去印度市场

不知道大伙儿有没有发现哈,近些年越来越多别国打着「保护本土企业」这一免死金牌对咱们中国企业展开肆无忌惮的排挤和打压。 就拿最近发生在汽车这一大件商品上的事件举例: 上个月老美宣布对来自中国的电动汽车关税税率由 25% 提升至 100%,…

从根源解决问题:构建体系化BOM管理机制与解决方案

BOM(物料清单)是设计与生产间的纽带,其准确及时对企业的竞争力至关重要。然而,维护BOM数据时,常遇到录入错误、信息孤岛及跨部门沟通障碍等难题,直接影响生产效率和成本。为此,道合顺将探讨确保…

centos7 离线安装zip和unzip

解压的时候发现不能解压,报-bash: unzip: command not found 1、访问https://www.rpmfind.net/linux/rpm2html/search.php?query=zip&submit=Search+…&system=centos&arch=#/ 2、输入zip和centos搜索,选择el7下载 3、输入unzip和centos搜索,选择el7下载: 安…

MySQL服务无法启动,服务没有报告任何错误(cmd里面)

安装压缩包版MySQL时,有时会此问题 解决方法 方法一、MySQL默认3306端口被占用,此时结束占用该端口的任务进程即可; 1.进入cmd,查找占用的端口 netstat -aon|findstr 3306 发现进程编号(也就是PID)为2084的进程占用了此端口&am…

Android出海实战:Firebase Analytics埋点

大家好,我是小编阿文。欢迎您关注我们,经常分享有关Android出海,iOS出海,App市场政策实时更新,互金市场投放策略,最新互金新闻资讯等文章,期待与您共航世界之海。 写在伊始 Google Analytics&…

Python 引入中文py文件

目录 背景 思路 importlib介绍 使用方法 1.导入内置库 importlib.util 2.创建模块规格对象 spec importlib.util.spec_from_file_location("example_module", "example.py") 3.创建模块对象 module importlib.util.module_from_spec(spec) …

VMWARE安装Centos8,并且使用ssh连接虚拟机

VMWARE安装Centos8,并且使用ssh连接虚拟机 安装VMWARE安装Centos 8SSH连接 安装VMWARE 参考这篇文章: https://blog.csdn.net/weixin_74195551/article/details/127288338 安装Centos 8 首先在aliyun镜像仓库下载: https://mirrors.aliyun.com/centos/8/isos/x86_64/ 我下载…

高等数学笔记(一):映射与函数

一、映射 1.1 映射的概念 存在一个法则 f ,使得对 X 中每个元素 x ,在 Y 中有唯一确定的元素 y 与之对应(X、Y 非空集) 称 f 为从 X 到 Y 的映射,如图所示 其中 y 称为元素 x(在映射 f 下)的…

目录文件管理

文章目录 Linux目录结构树形目录结构根目录常见的子目录子目录的作用 查看及检索文件查看文件内容cat格式 more格式操作方法 less格式操作方法 head格式 tail格式 统计文件内容wc格式选项 检索和过滤文件内容grep格式选项查找条件 备份及恢复文档压缩命令gzip bzip2格式压缩解压…

LLM中表格处理与多模态表格理解

文档处理中不可避免的遇到表格,关于表格的处理问题,整理如下,供各位参考。 问题描述 RAG中,对上传文档完成版式处理后进行切片,切片前如果识别文档元素是表格,那么则需要对表格进行处理。一般而言&#x…

黑龙江等保测评的流程和注意事项

黑龙江等保测评(信息安全级别保护评估),是根据国家信息安全等级保护的有关标准,以保证信息系统的安全性,对信息系统所做的一种安全性评价。下面是对等保进行评估的具体过程和说明: 一、黑龙江等保测评流程 …