ITPub博客

首页 > Linux操作系统 > Linux操作系统 > commit_write参数

commit_write参数

原创 Linux操作系统 作者:victorymoshui 时间:2012-10-30 21:00:45 0 删除 编辑

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

Property Description
Parameter type String
Syntax COMMIT_WRITE = '{IMMEDIATE | BATCH},{WAIT |NOWAIT}'
Default value If 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

Modifiable Yes (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 values Single-quoted, comma-separated list of either IMMEDIATE or BATCH, and either WAIT or NOWAIT.
Basic No
Real Application Clusters Each 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参数使用设定值和使用默认值还是有所区别的。


自己整合+参考:http://www.dbthink.com/?tag=commit_write



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

下一篇: Undo的管理
请登录后发表评论 登录
全部评论

注册时间:2009-08-26

  • 博文量
    173
  • 访问量
    303816