百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

优化体系--oracle数据库I/0等待事件优化

mhr18 2024-10-07 10:29 26 浏览 0 评论

概述

前面针对awr报告的几个等待事件做了详细介绍,今天主要总结了oracle数据库I/0相关的等待事件和Oracle 数据库 I/O 相关竞争等待的处理方法。


oracle数据库I/0相关的等待事件

1、数据文件 I/O 相关的等待事件包括以下:

? db file sequential read(数据文件顺序读)

? db file scattered read(数据文件多块读)

? db file parallel read(数据文件并行读)

? direct path read

? direct path write

? direct path read (lob)

? direct path write (lob)

2、控制文件 I/O 相关的等待事件包括以下:

? control file parallel write

? control file sequential read

? control file single write

3、重做日志文件 I/O 相关的等待事件包括以下:

? log file parallel write

? log file sync

? log file sequential read

? log file single write

? switch logfile command

? log file switch completion

? log file switch (clearing log file)

? log file switch (checkpoint incomplete)

? log switch/archive

? log file switch (archiving needed)

4、高速缓存区 I/O 相关的等待事件包括以下:

? db file parallel write

? db file single write

? write complete waits

? free buffer wait


下面介绍Oracle 数据库 I/O 相关竞争等待的处理方法

1、优化Oracle数据库的SQL语句来减少数据库对I/O的需求:

如果数据库没有任何用户的SQL运行的话,一般来说只会产生很少的磁盘I/O或者几乎没有磁盘I/O,基本上来说数据库产生I/O的最终原因都是直接或者间接的由于用户执行SQL语句导致的。

这也就意味着可以控制单个SQL语句避免其产生大量的I/O来减少整个数据库对磁盘I/O的需求,通过优化SQL语句改变其执行计划以便让其产生尽可能少的I/O

一般典型的存在问题的情况仅仅只是很少的几个SQL语句,但是由于其相应的执行计划不理想,会导致产生大量的物理磁盘I/O,从而使得整个数据库的性能非常之差。因此,让用户执行的SQL语句优化产生比较好的执行计划来减少磁盘I/O是一种非常行之有效的方法。

2、调整实例的初始化参数来减少数据库的I/O需求:

一般来说可以通过两种途径:

2.1、通过内存缓存来减少I/O

数据库的I/O分为两种,一种是实际读取了数据文件的物理I/O,一种是从缓存中读取数据的逻辑I/O,可以通过使用一定数量的内存缓存来减少物理I/O(例如高速缓存区、日志缓存区以及各种排序区等等)。适当的增大高速缓存区,可以有更多的缓存供给数据库的进程使用,从缓存中读取所需要的数据,这样产生的I/O都是逻辑I/O,而不是直接从物理磁盘上读取数据,减少了物理I/O的产生。设置一个适当的排序区,可以减少在排序操作中读取临时表空间数据文件所在磁盘的次数,而尽可能多的使用缓存中的排序区来排序。其他的缓存区的工作原理基本都是一致的,都是通过使用缓存来减少读取物理磁盘的次数来降低I/O。

PS:这里顺便介绍下怎么看高速缓存区是不是值得优化

--测量Database Buffer Cache的性能
select 1 - ((physical.value - direct.value - lobs.value) / logical.value) "Buffer Cache Hit Ratio"
 from v$sysstat physical,
 v$sysstat direct,
 v$sysstat lobs,
 v$sysstat logical
 where physical.name = 'physical reads'
 and direct.name = 'physical reads direct'
 and lobs.name = 'physical reads direct (lob)'
 and logical.name = 'session logical reads';

当>90%则说明调整充分的。命中率是高的,如果低于90%就需要优化高速缓存区了。

2.2、调整一次读取多个BLOCK的大小

单独的一次多个BLOCK读取的操作的大小是由实例的初始化参数db_file_multiblock_read_count来控制的。如果执行比较大的I/O操作,一次读取的多个BLOCK大小越大,所需要的时间就会越短。

Oracle 10gR2以后会根据相应的操作系统及buffer cache以最优化的方式来自动设定该参数的值。通常情况下该值为1MB/db_block_size。

在最大I/O为1MB的情况下,block的大小为8KB,则参数的值为128。如果在最大I/O为64KB,block为8KB,则参数的值为8。

对于OLTP和batch环境该参数的值为4到16,DSS环境应设置大于16以上或大的值。

该参数的变化对数据库性能产生整体性的影响,过大的设置会导致大量SQL访问路径发生变化,如原先的索引扫描倾向于使用全表扫描。

因此,在配置数据库初始化参数的时候,根据操作系统的I/O吞吐能力都会设置的一次读取多个BLOCK的大小尽量多,以减少读取I/O的次数。

3、在操作系统级别上优化I/O:

在操作系统级别上优化磁盘的I/O,以提高I/O的吞吐量,如果操作系统支持异步I/O,尽量去使用异步I/O;还可以使用高级文件系统的一些特性,例如直接I/O读取,忽略掉操作系统的文件缓存,也就是我们平时所说的使用裸设备。还有一种可行的方法是增大每次传输的最大I/O大小的限制,以便每次能够传输的I/O尽可能的大。

4、通过使用RAID、SAN、NAS来平衡数据库的I/O:

4.1、RAID

RAID是Redundent Array of Independent Disks的缩写,直译为"廉价冗余磁盘阵列",也简称为"磁盘阵列"。RAID的优点是传输速率高并且可以提供容错功能。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。因为普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。

RAID分为以下几个级别:

RAID 0: RAID 0并不是真正的RAID结构,没有数据冗余. RAID 0连续地分割数据并并行地读/写于多个磁盘上.因此具有很高的数据传输率.但RAID 0在提高性能的同时,并没有提供数据可靠性,如果一个磁盘失效,将影响整个数据.因此RAID 0不可应用于需要数据高可用性的关键应用。

RAID 1: RAID 1通过数据镜像实现数据冗余,在两对分离的磁盘上产生互为备份的数据. RAID 1可以提高读的性能,当原始数据繁忙时,可直接从镜像拷贝中读取数据.RAID 1是磁盘阵列中费用最高的,但提供了最高的数据可用率.当一个磁盘失效,系统可以自动地交换到镜像磁盘上,而不需要重组失效的数据。

RAID 2:从概念上讲, RAID 2同RAID 3类似,两者都是将数据条块化分布于不同的硬盘上,条块单位为位或字节.然而RAID 2使用称为"加重平均纠错码"的编码技术来提供错误检查及恢复.这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂.因此,在商业环境中很少使用。

RAID 3:不同于RAID 2, RAID 3使用单块磁盘存放奇偶校验信息.如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据.如果奇偶盘失效,则不影响数据使用.RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。

RAID 4:同RAID 2, RAID 3一样, RAID 4, RAID 5也同样将数据条块化并分布于不同的磁盘上,但条块单位为块或记录. RAID 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,成为写操作的瓶颈.在商业应用中很少使用。

RAID 5: RAID 5没有单独指定的奇偶盘,而是交叉地存取数据及奇偶校验信息于所有磁盘上.在RAID5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量. RAID 5更适合于小数据块,随机读写的数据.RAID 3与RAID 5相比,重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘.而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作.在RAID 5中有"写损失",即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。

4.2、SAN

SAN(Storage Area Network, 存储局域网)是独立于服务器网络系统之外几乎拥有无限存储能力的高速存储网络,这种网络采用高速的光纤通道作为传输媒体,以FC (Fiber Channel, 光通道)+ SCSI(Small Computer System Interface, 小型计算机系统接口)的应用协议作为存储访问协议,将存储子系统网络化,实现了真正高速共享存储的目标。一个完整的SAN包括: 支持SAN的主机设备,支持SAN的储存设备,用于连接SAN的连接设备,支持SAN的管理软件,支持SAN的服务。

4.3、NAS

网络附加存储设备(Network Attached Storage,NAS)是一种专业的网络文件存储及文件备份设备,或称为网络直联存储设备、网络磁盘阵列。

NAS是基于LAN的,按照TCP/IP协议进行通信,面向消息传递,以文件的I/O方式进行数据传输。在LAN环境下,NAS已经完全可以实现异构平台之间的数据级共享,比如NT、UNIX等平台的共享。

一个NAS包括处理器,文件服务管理模块和多个的硬盘驱动器用于数据的存储。NAS可以应用在任何的网络环境当中。主服务器和客户端可以非常方便地在NAS上存取任意格式的文件,包括SMB格式(Windows)NFS格式(Unix, Linux)和CIFS格式等等。

NAS系统可以根据服务器或者客户端计算机发出的指令完成对内在文件的管理。NAS是在RAID的基础上增加了存储操作系统,因此,NAS的数据能由异类平台共享。

因此,利用RAID、SAN、NAS的技术在多个物理磁盘之间平衡数据库的I/O,尽量避免数据库产生I/O竞争的瓶颈。

5、手工分配数据文件到不同的文件系统、控制器和物理设备来重新调整数据库I/O

如果数据库目前的存储设备不算太好,那么采用这种方法是一个不错的选择。

这样可以让所有的磁盘得到充分的利用,不至于出现某些磁盘的I/O过于太高,而某些磁盘就根本没有被使用的情况,使得在配置较低的情况下得到一个比较好的数据库性能。


篇幅有限,关于oracle数据库I/0等待事件优化就介绍到这了。后面会分享更多关于DBA方面的内容,感兴趣的朋友可以关注下!!

相关推荐

甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入

IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...

甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云

IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...

Spring Boot 自定义数据源设置,这些坑你踩过吗?

你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...

一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)

今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...

低代码建模平台-数据挖掘平台(低代码平台的实现方式)

现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...

navicat 17.2.7连接oracle数据库提示加载oracle库失败

系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...

开源“Windows”ReactOS更新:支持全屏应用

IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...

SSL 推出采用全模拟内置混音技术的模拟调音台Oracle

英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...

47道网络工程师常见面试题,看看有没有你不会的!

你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...

汉得信息:发布EBS系统安装启用JWS的高效解决方案

e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...

36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!

前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

手把手教你在嵌入式设备中使用SQLite3

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...

JAVA语言基础(java语言基础知识)

一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...

取消回复欢迎 发表评论: