阅读更多
LGWR进程将LOG BUFFER中的日志条目写往在线日志的条件有如下三个:
事务提交时。
LOG BUFFER中的日志条目超过1MB时。
每隔3秒时。
除此之外,Oracle还通过隐含参数_log_io_size来进一步控制LGWR进程写日志条目,当LOG BUFFER中的日志量超过该参数值时,LGWR进程会被自动激活写日志。该参数值默认为0,表示LOG BUFFER容量的1/3,其单位是REDO LOG BLOCK。如下所示:
NAME VALUE PDESC
------------------------------ ---------- --------------------------------------------------
_log_io_size 0 automatically initiate log write if this many redo
LGWR进程性能的下降直接关系到整个系统的性能,所以减少重做日志量可以从某种程度上减轻系统的压力,以下为常见的减少日志量的方法:
使用NOLOGGING选项。NOLOGGING有三个级别,分别是SQL级别、表级别、表空间级别。
通过SQL*LOADER装载大量数据时,使用DIRECT LOAD 选项。
需要保存临时数据时,尽量使用临时表。使用临时表本身不会创建对于数据的重做日志。
若LOB数据量较大,使用NO LOGGING属性。
使用临时表存放中间结果集。
对已经有索引的表执行DIRECT LOAD时,在不影响SELECT语句的前提下,可以按以下步骤进行安装:
(1)将索引修改为UNUSABLE状态。
(2)装载数据。
(3)将以NOLOGGING方式重建索引。
注意 在数据库级别开启了FORCE LOGGING之后,所有的NO LOGGING操作依然会LOGGING。千万不能在生产系统中设置隐含参数_disable_logging,设置成TRUE之后可能会导致数据库无法启动。