您当前的位置:首页 > 电脑百科 > 数据库 > Oracle

oracle影响数据库打开速度的因素-前滚和回滚

时间:2022-08-05 15:36:36  来源:  作者:葫芦儿的成长记录

当Oracle发起一个事务需要更改数据时,如果所涉及的数据块不在BUFFER CACHE中,那么Oracle服务进程首先会将相关数据块从数据文件中读进BUFFER CACHE进行更改(直接路径读除外),更改后的数据块被称为脏块(DIRTY BLOCK)。当事物提交或者回滚时,基于性能上的考虑,脏块并不会立刻写至数据文件,而是由LGWR进程优先将脏块的信息写至ONLINE REDOLOG,只有当LGWR进程返回写成功之后,事务才算提交成功。这就是Oracle为了保证不丢数据的“日志优先写”原则。提示 为了保证数据不丢失,LGWR进程写REDOLOG时,一般会采用同步I/O。

日志写优先的问题

“日志优先写”原则带来的问题就是当数据库异常宕机时,可能会仍有部分脏块在BUFFER CACHE的脏缓冲区列表中,并没写进数据文件。

实例前滚及后滚(先前滚后回滚)

前滚:通过redolog重构未写进数据文件的脏块信息,通知DBWR进程将脏块写进数据文件

回滚:回滚异常宕机时未提交的脏的数据块,未回滚的事务,通过扫描undo进行这些事务的回滚。

启动数据库时,首先会由服务器进程进行实例恢复(CRASH RECOVERY,又叫前滚),即服务器进程扫描ONLINE REDOLOG,在BUFFER CACHE中重构未写进数据文件的脏块信息之后,会通知DBWR进程将脏块写进数据文件。CRASH RECOVERY完毕以后,BUFFER CACHE里既有数据库异常宕机时已经提交还没有写入数据文件的脏数据块,又包含了事务被突然终止,以致既没有提交又没有回滚的事务所弄脏的数据块。CRASH RECOVER完成操作之后则由SMON进程扫描UNDO段头进行事务恢复(TX RECOVERY,又叫后滚),最终将数据库恢复至宕机前的那一刻。图4-4清晰地展示了这一过程。

 

由前面分析可知,除去硬件性能等因素以外,数据库打开的速度受两个自身因素影响:

◆ 在线日志(ACTIVE和CURRENT状态)所对应的脏块数量。脏块数量越多,数据库恢复的时间就越长,数据库打开速度越慢。需要恢复的脏块的数量可以在CRASH RECOVERY日志中看到,如下所示:

Sat Jul 28 22:27:47 2012Completed redo scan134146 redo blocks read,8902 data blocks need recovery

◆ 需要恢复的事务的数量和大小。事务数量越多,事务越大,数据库打开越慢。为加快事务恢复速度,后台进程往往采用并行恢复,其并行度主要受参数
fast_start_parallel_rollback影响。

CHECKPOINT优化

Oracle引入增量CHECKPOINT的目的是将BUFFER CACHE中的脏块写操作分散到不同的时间点完成,但在I/O压力比较大的业务系统下,过于频繁的脏块写操作显然会给系统带来额外的负担,甚至影响业务系统的响应时间,那么我们需要对此进行一些优化,我们不能改变CHECKPOINT的算法,但是可以减少DBWR进程写脏块的频率。以下便是业务系统在不同I/O压力下的优化思路。

在I/O压力比较大的系统中,建议设置参数FAST_START_MTTR_TARGET为0或者将参数设置成较大值(如3000),从而降低DBWR写脏块的频率,使得脏块尽可能地保存在BUFFER CACHE中。对于ONLINE REDOLOG,如果其大小过小,容易引起在线日志的频繁切换,从而导致频繁的CHECKPOINT。为缓减I/O压力,在日志量较大的系统中,可以设置比较大的ONLINE REDOLOG(比如2GB或者4GB)。如果系统内存充足,建议设置较大的BUFFRE CACHE,不但更多的数据块可以保存在缓冲区中,而且可以进一步减少增量CHECKPOINT的频率。如果观察到DBWR进程比较繁忙(比如该进程CPU占用率较高),则可以设置db_writer_processes参数增加DBWR进程数量,从而加快CHECKPOINT速度。

提示 一般情况下,日志切换维持在20分钟左右比较合适。

在I/O压力较小的系统中,建议不要设置参数FAST_START_MTTR_TARGET(事实上Oracle默认就不设置该参数)。实践经验表明,数据库在异常宕机后的启动过程中,扫描和应用ONLINE REDOLOG的速度一般都能在几分钟内能完成。ONLINE REDOLOG的应用速度不仅跟脏块数量有关,还跟扫描数据文件头的数量有关,数据文件越多,其扫描速度越慢。

参考《DBA实战攻略》



Tags:数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
当Oracle发起一个事务需要更改数据时,如果所涉及的数据块不在BUFFER CACHE中,那么Oracle服务进程首先会将相关数据块从数据文件中读进BUFFER CACHE进行更改(直接路径读除外),更改...【详细内容】
2022-08-05  Tags: 数据库  点击:(0)  评论:(0)  加入收藏
Oracle EM ExpressOracle EM Express 是 Oracle Enterprise Manager Database Express 是缩写,是Oracle数据库一个基于 Web 的数据库管理工具,使用 EM Express,可以执行管理任...【详细内容】
2022-08-04  Tags: 数据库  点击:(1)  评论:(0)  加入收藏
前言在实际的项目开发中,为了提高响应的速度,通常都会将热点的数据保存到缓存中,减少数据库的查询,有效提高服务端的响应速度,但是添加缓存之后也引入缓存与数据库的一致性问题,本...【详细内容】
2022-08-01  Tags: 数据库  点击:(10)  评论:(0)  加入收藏
大数据从业者一定知道MPP数据库。什么?你还不知道什么是MPP! 在说清楚这个问题之前,我们来聊聊常见的DBMS架构。 数据库的常见架构模式 DBMS的系统架构指定CPU可以直接访问哪...【详细内容】
2022-08-01  Tags: 数据库  点击:(24)  评论:(0)  加入收藏
TD,国产免费开源的数据库表设计工具。可用于设计mysql,oracle,sql server等主流数据库表结构云版体验地址:http://team.nyawei.cn/桌面版本地址(支持windows,linux,mac等系统):http...【详细内容】
2022-07-29  Tags: 数据库  点击:(8)  评论:(0)  加入收藏
德州大学阿灵顿分校计算机科学与工程系教授江泓今天与大家分享我们实验室最近的一项研究:在企业级应用环境下,数据库系统高并发I/O带来的性能挑战。该项研究发表在今年的Eur...【详细内容】
2022-07-28  Tags: 数据库  点击:(10)  评论:(0)  加入收藏
巨量引擎用户使用场景:企业使用巨量引擎做推广时会收集到很多线索,需要推广人员将线索信息同步到数据库中进行存储备份,但人工手动操作不仅费时费力,且容易出错,一旦客户的某项数...【详细内容】
2022-07-27  Tags: 数据库  点击:(22)  评论:(0)  加入收藏
数据持久化数据持久化就是 将内存中的数据模型转换为存储模型 ,以及 将存储模型转换为内存中的数据模型 的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模...【详细内容】
2022-07-27  Tags: 数据库  点击:(22)  评论:(0)  加入收藏
SchemaHero 是一个开源的声明式数据库 schema 迁移的云原生工具,可将 schema 定义转换为可在任何环境中应用的迁移脚本。作为 CLI 工具和 Kubernetes Operator 编写的 Schema...【详细内容】
2022-07-27  Tags: 数据库  点击:(11)  评论:(0)  加入收藏
缺乏自主的关键技术是国产数据库被诟病最多的痛点。众所周之,国产数据库中,绝大多数是基于开源数据库改造的,尤其是基MySQL或 PostgreSQL改造的居多,这本身无可厚非。自研,并非只...【详细内容】
2022-07-25  Tags: 数据库  点击:(8)  评论:(0)  加入收藏
▌简易百科推荐
当Oracle发起一个事务需要更改数据时,如果所涉及的数据块不在BUFFER CACHE中,那么Oracle服务进程首先会将相关数据块从数据文件中读进BUFFER CACHE进行更改(直接路径读除外),更改...【详细内容】
2022-08-05  葫芦儿的成长记录    Tags:数据库   点击:(0)  评论:(0)  加入收藏
Oracle EM ExpressOracle EM Express 是 Oracle Enterprise Manager Database Express 是缩写,是Oracle数据库一个基于 Web 的数据库管理工具,使用 EM Express,可以执行管理任...【详细内容】
2022-08-04  正义凛然奶茶XH    Tags:数据库管理   点击:(1)  评论:(0)  加入收藏
select * from user$ where name='users'---查询用户select * from dba_users;--修改用户密码alter user users identified by 23456....;commit;---修改时间alter...【详细内容】
2022-07-30  90的程序爱好者    Tags:oracle密码   点击:(11)  评论:(0)  加入收藏
oracle怎么查看表属于哪个用户Oracle查询表所属用户方式一:SELECT * FROM DBA_TABLES WHERE TABLE_NAME='表名';方式二:SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE...【详细内容】
2022-07-22  网站建设和维护    Tags:oracle   点击:(29)  评论:(0)  加入收藏
oerr 命令 错误代码分析示例-01数据库没有启动 执行语句尝试触发错误 使用oerr分析错误代码 错误提示// *Cause: Oracle was not started up. Possible causes include the...【详细内容】
2022-07-15  正义凛然奶茶XH    Tags:Oracle   点击:(23)  评论:(0)  加入收藏
在本教程中,我们将逐步介绍如何下载Oracle 11g数据库并演示如何安装在Windows 10 64位机器上,以便在系统中学习和实践PL/SQL编程。下载并安装Oracle数据库首先,需要到Oracle官...【详细内容】
2022-06-23  黄家自留地    Tags:Oracle   点击:(78)  评论:(0)  加入收藏
说明: 开头带有“SQL>”标识的,表示是一个sql语句。 简单介绍SGA参数的调整、表空间的调整。调整sga_max_size、processes、sessions、transactions大小。 下面显示oracle默认...【详细内容】
2022-06-14  JencyChen    Tags:Oracle   点击:(90)  评论:(0)  加入收藏
所需软件:oracle11.2.0.4安装包、Xshell 6、Xmanager 6环境说明:宿主机ip:192.168.88.2虚机ip:192.168.88.200虚机内存:2G虚机主机名:vm-demooracle数据库名:orcloracle实例名:orcl...【详细内容】
2022-06-13  JencyChen    Tags:Oracle   点击:(57)  评论:(0)  加入收藏
oracle中锁的分类:enqueues---队列类型的锁,通常和业务相关的通常dml操作导致,数据写入latches--系统资源方面的锁,防止资源争用,比如内存结构,sql解析等。比如需要访问某个资源,但...【详细内容】
2022-06-01  葫芦儿的成长记录    Tags:Oracle   点击:(106)  评论:(0)  加入收藏
概述在 Oracle 11g 安装并建库后,需要进行一些调整,使数据库能够稳定、高效地运行。花了一段时间整理了以下的参数设置规范,仅供参考。一、建库参数设置1、进程及会话数(默认15...【详细内容】
2022-05-24  IT智能化专栏    Tags:   点击:(57)  评论:(0)  加入收藏
站内最新
站内热门
站内头条