commit_write参数

本文深入探讨了 Oracle 数据库中的 Commit Write 参数,解释了它如何调整事务提交时的行为特征,以应对 web2.0 网站的写密集型应用需求。详细介绍了 COMMIT_WRITE 参数的不同设置选项及其对 LGWR 和 REDO 日志的影响,包括 IMMEDIATE、BATCH、WAIT 和 NOWAIT 模式的具体行为。同时,对比了默认设置与自定义设置的区别,并提供了实际应用建议。

Oracle 10gR2中引人了一个新的参数commit_write, 可以通过调整此参数调整Oracle在Commit时的行为特征.

随着web 2.0网站的涌现, 写越来越成为传统的RDBMS数据库的瓶颈, 而lgwr的写一直是Oracle数据库中最终的瓶颈所在, 在早期的版本中, 所有的事务必须先申请redo log buffer的空间才能进行变更, 提交变更时也必须确保底层的IO写到物理磁盘, 除非使用磁盘或者存储的Write Cache,否则写密集的应用会遭遇大量的log file sync, 用户端在提交Commit命令之后必须等待lgwr进程写好此事务相关的redo日志才能返回, 以达到满足ACID标准的Durability的目的. 或许是为了吸引部分此类用户使用Oracle数据库来解决此类问题, Oracle改进了lgwr Commit相关的处理, 以弱化Durability的方式来帮助用户提高写的效率.




关于oracle 的commit write参数,在10gR2的官方文档中可以看到介绍:

COMMIT_WRITE

PropertyDescription
Parameter typeString
SyntaxCOMMIT_WRITE = '{IMMEDIATE | BATCH},{WAIT |NOWAIT}'
Default valueIf this parameter is not explicitly specified, then database commit behavior. defaults to writing commit records to disk before control is returned to the client.

If only IMMEDIATE or BATCH is specified, but not WAIT or NOWAIT, then WAIT mode is assumed.

If only WAIT or NOWAIT is specified, but not IMMEDIATE or BATCH, then IMMEDIATE mode is assumed

ModifiableYes (at both session-level and system-level). Values supplied for COMMIT_WRITE in an ALTER SYSTEM or ALTER SESSION statement must be separated by a comma.
Range of valuesSingle-quoted, comma-separated list of either IMMEDIATE or BATCH, and either WAIT or NOWAIT.
BasicNo
Real Application ClustersEach instance may have its own setting

COMMIT_WRITE is an advanced parameter used to control how redo for transaction commits is written to the redo logs. The IMMEDIATE and BATCH options control how redo is batched by Log Writer. The WAIT and NOWAIT options control when the redo for a commit is flushed to the redo logs.

Immediate
日志信息会立即写入磁盘(每次提交时都必须做一次磁盘I/O操作)
batch
Oracle会对日志信息进行缓冲. Oracle会按照其自己安排的时间将此日志信息写入到磁盘.
也就是说,多个I/O操作将组成一个批次进行处理

wait
直到提交(commit)操作成功完成,commit命令才会返回
nowait
Oracle不会等待提交返回,而是直接将控制权返回给客户端





可以看到在默认的情况下,commit_write参数是空

SQL> show parameter commit_write;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
commit_write                         string


在默认情况下(为空),表示的其实可以理解为(immediate,wait)

但是对于像plsql 中,其缺省的commit其实就是commit nowait。
所以设置为默认值时,对于其他的sql语句,提交(commit)时采用的是wait模式,而plsql是nowait。

但是对于设置为immdiate,wait模式后,也会将plsql的提交方式转变为wait,所以对于commit_write参数使用设定值和使用默认值还是有所区别的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9390331/viewspace-747952/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9390331/viewspace-747952/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值