Oracle数据库故障处理-存储单块读hang分析处理

news2024/12/30 16:36:04

1 故障描述

2023年1月27日下午接到业务反馈数据库存在大量的锁表阻塞信息,并且业务的页面以及数据库的一些查询均处于阻塞状态,简单的查询sql也需要查询很长时间且未返回结果,数据库hang状态。

2 故障原因分析

2.1 数据库层面分析

接到业务反馈后,第一时间登录数据库使用如下语句查询数据库正在进行的事物以及会话select count(1) ,event from v$session group by event,发现大部分会话处于TX-INDEX CONTENTION,db file sequential read,read by Other session 等待状态,数据库处于hang状态无法进行事务处理,查询数据库alert日志未发现明显错误信息。

以下为对数据库等待的分析认知:

  1. TX-INDEX CONTENTION

enq: TX - index contention 常出现在高并发场景下,由于索引分裂产生的竞争等待。最常见的索引竞争一般发生在主键索引上,主键值从序列(sequence)中获取,每个事务都会生成一条新的记录,每条记录都要获得一个新的序列号,基于b tree 索引的右倾原则,操作基本都在最右边的叶节点上,都希望能够维护同一个内存内存,最典型的竞争形式。

索引 split 会导致 enq:TX-index contention 事件,经常性伴有 enq: TX - allocate ITL 等待,通过buffer busy waits 可确定是做 split 导致,因为在做 index split 时,会写 index 数据到 new buffer 里。

常规的解决方案:

1)Hash(散列)分区索引,优先考虑这种方式。

2)将索引重新创建为反向索引,缺点是无法 RANGE SCAN。

3) 如果索引关键字是从序列(sequence)生成的,则增加序列的高速缓存大小,默认是20,一般都要设置为 1W。

4) 定期 rebuild 索引来减轻这样现象,表特别大时做 rebuild 要慎重,对空间要求比较多。

参考:Troubleshooting ‘enq: TX - index contention’ Waits (Doc ID 873243.1)

从上述分析中可以知道对于sequence的主键索引容易右边倾斜,导致索引叶节点繁忙出现大量的enq: TX - index contention。

  1. db file sequential read

db file sequential read 事件有三个参数:file#,first block#, block count, 在oracle 10g里,此等待事件在归于 User I/O wait class 下面的. 处理db file sequential read 事件要牢牢把握下面三个主要思想:

1)oracle 进程需要访问的block不能从SGA 中获取,因此oracle 进程会等待block从I/O读到SGA

2)两个重要参数TIME_WAITED,AVERAGE_WAIT,是以单个session获取的

3)影响较大的db file sequential read 一般很像应用程序问题

Common Causes, Diagnosis, and Actions

db file sequential read 等待事件被SQL 语句初始化,主要从index,rollback(or undo) segments, tables(通过rowid访问表),control files 和data file headers中进行single-block read.

访问数据对象(table,index)总是会产生Physical I/o需求,当出现db file sequential read等待事件时,并不意味着数据库产生系统问题,基至它大量出现都不是一件坏事.真正要引起注意的是像enqueue 和latch free等待事件,它们总是引起系统性题的根源.并且它们使single-block(单块读取)变得因难了.

初步分析数据库hang死原因为数据库出现TX-INDEX CONTENTION等待,主键索引分裂导致数据库出现大量的hang

数据库大量出现 TX-INDEX CONTENTION等待从上述分析得知主键分裂索引导致,于是想将主键索引进行重建,将主键索引重建为反向键索引。

Alter index netmaintainnew.pk_gis_position rebuild reverse online;

 由于需要在线重建而且存在大量的inert语句导致锁死,于是希望将所有的insert语句进行kill,但是在进行kill数据库session的过程中发现进程无法被删除并且使用操作系统命令kill -9也无法进行数据库进程清除。

数据库完全hang死且通过sqlplus /as sysdba的方式也无法进入数据库进行管理,于是和管理员商定将数据库进行重启。

   sqlplus  -prelim  / as sysdba

shutdown abort

 但是等待好久数据库值的local=no以及数据库的dbw0和dbw1进程均无法正常退出,使用kill -9命令也无法进行清除,使用ipcs –ma查询共享信息并且使用ipcrm 删除则提示共享内存已经不存在。重启数据库失败数据库根本无法进行停止 。

联系管理员只能在将主机进行重启,杀掉hang死的数据库进程,将主机重启后,使用HA命令手动进行挂在并启动数据库 ,发现 没过一会数据库继续hang死并进入了死循环,于是在启动数据库时未开启监听,将主键索引进行反向化,程序启动时TX等待消失,但是数据库还是存在大量的db file sequential read read by other session等待。

 于是通过如下命令查询数据库等待的p1和p2参数,发现P1和P2参数一致未变化。表现在39号文件和33号文件对应的数据库目录为/nmmp/oracle/oradata2/,此时数据库文件的单块读取一直hang死。

2.2 主机层面分析

  在数据库层面已经无法进行处理问题,查询主机的相关信息errpt信息如下:

 

发现在hdisk3的盘出现了大量的 PH和IH错误,且通过分析HDISK3大部分都存在于oradata2.

且通过IOSTAT查询发现数据库的IO停滞 。

1 hdisk2磁盘使用率接近100%,但是不存在kb_read.

2 数据库大部分的io等待时间集中在39号文件和33号文件,而文件都集中存储在oradata2,正是hdisk3的主要分区。

3 数据库大部分等待均在IO,但是iostat确看不到IO流动 ,而且涉及到数据文件的进程全部hang死无法进行删除等操作。

数据库的读写io一直为0。很诧异。初步判断HDISK3对应的盘出现问题导致数据库数据文件39和33号文件单块读hang死。

验证判断:

在数据库关闭的条件下将39号数据文件cp到其他目录发现也是hang死。

3 故障处理过程

从上述分析原因可知存储单块读hang死,于是和管理员分析决定,建立新的存储避开hdisk3,并使用rman方式进行数据库应急恢复。

使用RMAN进行数据库恢复。并将数据文件更换到新的存储避开hdisk3

bplist -C client -t 4 -l -R /|more

bplist -C client -t 4 -l -R /|more

-rw-rw---- oracle      oinstall      8388608 Jan 27 09:03 /cntrl_54244_1_1127206988

-rw-rw---- oracle      oinstall     7002880K Jan 27 09:00 /al_54242_1_1127206828

-rw-rw---- oracle      oinstall     6853632K Jan 27 09:00 /al_54243_1_1127206828

-rw-rw---- oracle      oinstall      8388608 Jan 27 03:03 /cntrl_54241_1_1127185398

-rw-rw---- oracle      oinstall     5498880K Jan 27 03:00 /al_54239_1_1127185227

-rw-rw---- oracle      oinstall     4637440K Jan 27 03:00 /al_54240_1_1127185227

-rw-rw---- oracle      oinstall      8388608 Jan 26 22:00 /cntrl_54238_1_1127167227--------------------1111

-rw-rw---- oracle      oinstall   1018429440 Jan 26 21:59 /al_54236_1_1127167169

-rw-rw---- oracle      oinstall   1009778688 Jan 26 21:59 /al_54237_1_1127167169

-rw-rw---- oracle      oinstall      8388608 Jan 26 17:03 /cntrl_54235_1_1127149386

-rw-rw---- oracle      oinstall   1018429440 Jan 26 17:02 /al_54233_1_1127149344

-rw-rw---- oracle      oinstall    101187584 Jan 26 17:02 /al_54234_1_1127149344

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RESTORE CONTROLFILE FROM 'cntrl_54109_1_1126602188';

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

RMAN> RUN {

2> ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

3> ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

4> SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

5> RESTORE CONTROLFILE FROM 'cntrl_54109_1_1126602188';

6> RELEASE CHANNEL ch00;

7> RELEASE CHANNEL ch01;

8> }

using target database control file instead of recovery catalog

allocated channel: ch00

channel ch00: sid=525 devtype=SBT_TAPE

channel ch00: Veritas NetBackup for Oracle - Release 7.5 (2012020807)

allocated channel: ch01

channel ch01: sid=524 devtype=SBT_TAPE

channel ch01: Veritas NetBackup for Oracle - Release 7.5 (2012020807)

sent command to channel: ch00

sent command to channel: ch01

Starting restore at 28-JAN-23

channel ch01: skipped, autobackup already found

channel ch00: restoring control file

channel ch00: restore complete, elapsed time: 00:00:44

output filename=/nmmp/oracle/oradata/orcl/control01.ctl

output filename=/nmmp/oracle/oradata/orcl/control02.ctl

output filename=/nmmp/oracle/oradata/orcl/control03.ctl

Finished restore at 28-JAN-23

released channel: ch00

released channel: ch01

RMAN> mount database;

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RESTORE DATABASE;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RESTORE CONTROLFILE FROM 'cntrl_54238_1_1127167227';

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

214723

2023/01/28 19:50恢复到20号

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RECOVER DATABASE UNTIL SEQUENCE 214723;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

2023/1/22 23:28:00       2023/1/22 23:42:18  214837

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RECOVER DATABASE UNTIL SEQUENCE 214838;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

2023/1/24 23:35:42         2023/1/24 23:51:54         214963

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RECOVER DATABASE UNTIL SEQUENCE 214964;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

2023/1/27 8:04:52  2023/1/27 9:00:25  215121

-rw-rw---- oracle      oinstall      8388608 Jan 27 09:03 /cntrl_54244_1_1127206988

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RESTORE CONTROLFILE FROM 'cntrl_54244_1_1127206988';

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=NBU01,NB_ORA_CLIENT=client';

RECOVER DATABASE UNTIL SEQUENCE 215122;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

}

Alter database open resetlogs;

lsnrctl start listener_orcl

将数据库使用rman恢复完成后,数据库运行正常。

4 故障解决建议

通过上述对故障的分析,问题主要出现在hdisk3存储在进行数据库单块读时hang住,数据库进行随之hang死,建议对数据库存储进行检查分析。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如果放在几年前,无法想到互联网会蜕变成今天这样一副模样

如果放在几年前,你是万万无法想到互联网会蜕变成今天这样一副模样。尽管如此,这样一种蜕变却在真实地发生着。不知道你有没有发现就连前两年火爆的短视频人们都懒得刷了。所有的这一切都在告诉我们,互联网正在发生一场深刻而又彻底的嬗变。如…

SQL Server数据库版本总结

一、为什么要写这篇文章 之所以专门写一篇文章来整理归纳SQL Server各个版本的功能区别,是因为遇到过两次真实的客户案例,因为数据库版本选取不当,导致生产系统宕机的情况。 案例一 某客户安装了 32位 版本的SQL Server 2008 R2 数据库&…

人工智能轨道交通行业周刊-第31期(2023.1.16-1.29)

本期关键词:磁悬浮原理、小米石、通信铁塔维护、桥隧工巡检、地方铁路十大新闻 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路…

element 日期组件实现只能选择小时或者只能选择小时、分钟

前言 在使用 element 框架时,总是会有一些满足不了现有项目需求的问题,这个时候就需要我们对 element 的组件进行改造,最近有一个需求就是要求日期组件只能选择年月日时,不要分钟和秒,找了一圈,发现 elemen…

【Markdown】CSDN 的 Markdown 编辑器锚点使用-进阶篇

1. 原始 Markdown 代码 1.1 “目录”元素 [TOC](8.6 InnoDB ClusterSet 的状态和拓扑)1.2 “1号标题-1”元素 # InnoDB ClusterSet 状态1.3 “1号标题-2”元素 <h1> <a id"innodb-clusterset-topology">InnoDB ClusterSet 拓扑</a> </h1>…

压缩包文件如何设置和删除密码

压缩软件除了可以压缩和解压文件&#xff0c;还可以作为加密软件&#xff0c;给压缩的文件设置密码来保护文件。 今天就来看下两个常用的压缩软件是如何设置和删除密码的。 先说说WinRAR这个最常用的压缩软件&#xff0c;它可以根据不同的需求设置单次密码和永久自动加密。 …

2023年度国家自然科学基金项目开放申报及注意事项

根据国家自然科学基金委员会发布的通告&#xff0c;2023年国家自然科学基金项目申报系统已于1月15日开放。知识人网整理了主要内容&#xff0c;提醒申报者注意。一、日程节点&#xff1a;1.集中接收工作于2023年3月1日开始&#xff0c;3月20日16时截止。2.申请人于2023年1月15日…

笔记本电脑拆机并更换固态硬盘的方法

本文介绍为笔记本电脑拆机、更换固态硬盘的具体方法。 在文章Win10电脑出现No Bootable Device且无法开机或开机后蓝屏无限重启的多个解决方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/122923896&#xff09;中我们提到&#xff0c;一些由电脑硬盘…

高频算法:删除有序数组中的重复项

今天要讲的算法题是LeetCode上的第26题&#xff0c;先贴题目&#xff1a; 首先题目中给出了几个比较关键的条件&#xff0c;首先就是升序排列的数组&#xff0c;这样的话至少我们不需要进行排序的操作&#xff0c;直接从前向后进行比较&#xff0c;我们就能知道数组中的哪些元…

基于SpringBoot、Mybatis-Generator实现数据库表自动生成全套后台代码

背景我们在日常开发过程&#xff0c;大多数都是使用主流MVC架构&#xff0c;如下图所示。从图中可以看出&#xff0c;我们主要的业务代码基本都是从Controller->Service->Dao/Mapper&#xff0c;由Dao/Mapper则通过Mybatis连接数据库连接池的方式与数据库进行指令数据交互…

实现简单的栈与队列

前言&#xff1a;前面已经详细地介绍了基本的顺序表和链表&#xff0c;这次要介绍的是数据结构中的栈与队列。从本质上来说&#xff0c;二者是特殊的线性表&#xff0c;是依赖于顺序表或链表来实现的&#xff0c;所以只要能够很好地掌握顺序表和链表&#xff0c;再了解清楚栈与…

STM32F103学习笔记(11)——压力传感器GZP6859D使用

一、简介 数据手册&#xff1a;https://item.szlcsc.com/3590436.html GZP6859D 型压力传感器采用 SOP6 封装形式&#xff0c;内部集成了高精度 ADC 芯片&#xff0c;对传感器芯片输出的偏移、灵敏度、温漂和非线性进行数字补偿&#xff0c;以供电电压为参考&#xff0c;产生一…

基于Java实现对Excel表格数据的读写(附B站详细讲解视频)

文章目录 Maven依赖设置导入相应jar包 读取.xlsx表格文件数据 写入数据到.xlsx表格文件 读写后缀名为.xls类型的表格文件&#xff08;旧版表格文件&#xff09; 详细视频教程 Maven依赖设置导入相应jar包 <project xmlns"http://maven.apache.org/POM/4.0.0" …

论文理解【Offline RL】——【One-step】Offline RL Without Off-Policy Evaluation

标题&#xff1a;Offline RL Without Off-Policy Evaluation文章链接&#xff1a;Offline RL Without Off-Policy Evaluation代码&#xff1a;davidbrandfonbrener/onestep-rl发表&#xff1a;NIPS 2021领域&#xff1a;离线强化学习&#xff08;offline/batch RL&#xff09;—…

【深度学习】知识蒸馏原理以及实践从0到1

文章目录前言1、知识蒸馏1.1 是什么&#xff1f;1.2 训练流程1.3 问题与挑战2、落地使用2.1 后续问题&#xff1a;总结前言 有没有什么方法可以在不扩展硬件的情况下利用这些强大但庞大的模型来训练最先进的模型&#xff1f;目前&#xff0c;有三种方法可以压缩神经网络&#…

一文搞懂JDK8 HashMap源码

目录前言常量和变量构造器put方法resize扩容get方法前言 HashMap的源码非常经典&#xff0c;里面用到了哈希表、链表、红黑树等数据结构&#xff0c;而且又是用纯Java实现的&#xff0c;所以成为了Java程序员必读的源码之一。 事先了解下哈希表&#xff08;散列表&#xff09…

portraiture2023手动磨皮的p图插件

可以手动磨皮的p图软件&#xff0c;大部分美颜软件只能一键磨皮或简单调整磨皮强度&#xff0c;本文会介绍一款可自动、可手动磨皮的p图软件。人像p图软件哪个好用&#xff1f;本文还会盘点一下好用的人像p图软件。 portraiture2023功能特点 2x性能和精细的输出质量将您的皮肤…

AES加密算法

AES算法原理 对称加密算法&#xff08;用于取代DES算法&#xff0c;发展历史DES-3DES-AES&#xff09; 明文长度固定为128位&#xff08;DES&#xff1a;64位&#xff09;&#xff0c;密钥长度可128位、192位、256位&#xff08;DES&#xff1a;64位&#xff09; 加密原理 …

你是如何对待植物神经紊乱的?

大家好&#xff0c;你们是如何对待植物神经紊乱这种疾病的&#xff1f; 你们知道吗&#xff1f;植物神经紊乱是一种情绪情志障碍伴躯体化症状的特殊且复杂的疾病&#xff0c;这种疾病可能会导致浑身的不适。 并且&#xff0c;很多植物神经紊乱的患者发现&#xff0c;这种疾病是…

【GD32F427开发板试用】硬件SPI通信驱动CH376芯片,用单片机实现U盘数据下载

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;周文杰 SPI通信作为单片机多种基础数据传输模式中的一种&#xff0c;驱动外部芯片CH376实现数据导出到U盘功能在实际工程项目中是很方便的。本…