当buffer cache中的数据块被修改后,服务器进程生成redo数据并写入到redo log buffer中。当满足以下条件时,LGWR会将redo log buffer中的条目开始写入在线重做日志:
--redo log buffer满1/3.
--每3秒超时(Timeout).
--log_buffer中的数据到达1M.
--事务提交时.
当LGWR将redo log buffer中的重做条目写入到在线重做日志文件或磁盘后,用户进程就可以复制新的条目到redo log buffer,以覆盖内存中被写入到磁盘的条目。LGWR写入速度通常很快,足以确保缓冲区的空间总可以写入新条目,即使在对重做日志的访问很频繁时也是如此。
如果我们的系统拥有快速处理器和I/O相对较慢的磁盘,处理器可能会填满缓存区的其余空间,这时会促使LGWR移动缓冲区的部分数据到磁盘。在这种情况下,
较大的日志缓冲区能够临时掩盖较慢磁盘对系统带来的影响。你这可做下面的选择:
--提升checkpoint或归档进程
--提升LGWR性能(也许你可以将所有的在线重做日志放置到速度更快的裸设备)合理使用redo log buffer:--执行批量操作时使用批量提交,以至LGWR能够更高效的写入重做条目到在线重做日志文件中。
--当加载大量数据时,使用nologging操作。设置Log Buffer redo log buffer由初始化参数LOG_BUFFER决定,修改该参数需要重启实例。
适当的redo log buffer参数值能够明显的提升系统吞吐量,尤其对于插入,更新,删除大数据量的系统。
默认的log buffer值:MAX(0.5M,(128K*number of cpus)),通常默认值是足够的。
增加log buffer的值对系统性能或可恢复性不会产生负面影响,而仅仅会使用额外的内存。评估Log Buffer关注redo buffer allocation retries等待事件:用户进程等待redo log buffer空间的次数。
redo buffer allocation retries的值应该接近于0。这个等待由log buffer太小或checkpointing导致。你
可以增加log buffer的值,或者提升checkpointing或归档进程。
另一个需要关注的等待事件:log buffer space。
v$session_wait视图指明在”log buffer space%”事件过程中,是否存在因会话向日志缓冲区中写入数据的速度大于LGWR写出数据的速度,而产生的任何对日志缓冲区空间的等待。
如果出现log buffer space等待事件,
可以增加log buffer的值
或将重做日志文件移动到更快的磁盘,如条带化磁盘。
参考:
Configuring and Using the Redo Log Buffer
http://docs.oracle.com/cd/B19306_01/server.102/b14211/memory.htm#i29756
分享到:
相关推荐
43 直接强行把redo log写入磁盘?非也,揭秘redo log buffer.pdf
44 redo log buffer中的缓冲日志,到底什么时候可以写入磁盘?l.pdf
行业-43 直接强行把redo log写入磁盘?非也,揭秘redo log buffer.rar
行业-44 redo log buffer中的缓冲日志,到底什么时候可以写入磁盘?l.rar
41 在Buffer Pool执行完增删改之后,写入日志文件的redo log长什么样.pdf
行业-41 在Buffer Pool执行完增删改之后,写入日志文件的redo log长什么样.rar
Redo log 是用于恢复和一个高级特性的重要数据,一个redo条目包含了相应操作导致的数据库变化的所有信息,所有redo条目最终都要被写入...Redo log buffer是为了避免Redo文件IO导致性能瓶颈而在sga中分配出的一块内存。
绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer、Share Pool、Redo Log Buffer等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上。所以除非是面对一个...
Oracle 数据库常用命令和概念 ...重做日志存储缓冲区(Redo Log Buffer) JAVA存储区(Java Pool) 大型存储区(Large Pool) SGA总容量=共享池+缓冲区高速缓存+大型存储区+Java存储区+日志缓冲区
前言 如果有人问你“数据库事务有哪些特性”?你可能会很快回答出原子性、一致性、...重做日志 redo log 分为两部分:一部分是内存中的重做日志缓冲(redo log buffer),是易丢失的;二部分是重做日志文件(redo lo
2. sync_binlog=1的时候,表示每次提交事务都会执行fsync 1. 存在redo log buffer中,物理上是在MySQL进程内存中,就是图中
(1)先写志(write log first),将随机写优化为顺序写 (2)将每次写优化为批量写 (1)事务提交时,将redo log写Log Buffer,就
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1 # 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志...
7.9 Redo Log Buffer的大小设置 7.10 commit做了什么? 7.11 日志的状态 7.12 日志的块大小 7.13 日志文件的大小 7.14 如何调整日志文件大小 7.15 为什么热备份期间产生的Redo要比...
7.9 Redo Log Buffer的大小设置 7.10 commit做了什么? 7.11 日志的状态 7.12 日志的块大小 7.13 日志文件的大小 7.14 如何调整日志文件大小 7.15 为什么热备份期间产生的Redo要比...
7.9 Redo Log Buffer的大小设置 7.10 commit做了什么? 7.11 日志的状态 7.12 日志的块大小 7.13 日志文件的大小 7.14 如何调整日志文件大小 7.15 为什么热备份期间产生的Redo要比...
Oracle数据库由两部分组成:实例和数据库 实例是由一块共享内存区域以及一些后台进程组成。 1.SGA SGA为共享内存区域,也叫...3.redo log buffer 4.java pool 5.large pool 6.stream pool 7.fixed sga 一:share pool
MYSQL面试题。 BufferPool、B+树、索引、explain、MVCC、Redo Log、Undo Log、binlog
被程序语句获得的锁 3.redo log buffer –>把Alias前缀于每个Column上可以减少解析的时间 –>ORACLE解析sql语句时会把小写的字母转换成大写的再执行 –>在索引列上使用NOT会停止使用索引转而执行全表扫描 –>在索引...
§3.4.17 日志缓冲区大小(LOG_BUFFER) 76 §3.4.18 检查点块数(LOG_CHECKPOINT_INTERVAL) 76 §3.4.19 检查点间隔(LOG_CHECKPOINT_TIMEOUT) 76 §3.4.20 对大卸出文件大小(MAX_DUMP_FILE_SIZE) 76 §3.4.21 对大回滚...