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的方式来帮助用户提高写的效率.
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 |
Immediate
日志信息会立即写入磁盘(每次提交时都必须做一次磁盘I/O操作)
batch
Oracle会对日志信息进行缓冲. Oracle会按照其自己安排的时间将此日志信息写入到磁盘.
也就是说,多个I/O操作将组成一个批次进行处理
wait
直到提交(commit)操作成功完成,commit命令才会返回
nowait
Oracle不会等待提交返回,而是直接将控制权返回给客户端
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9390331/viewspace-747952/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9390331/viewspace-747952/
本文深入探讨了 Oracle 数据库中的 Commit Write 参数,解释了它如何调整事务提交时的行为特征,以应对 web2.0 网站的写密集型应用需求。详细介绍了 COMMIT_WRITE 参数的不同设置选项及其对 LGWR 和 REDO 日志的影响,包括 IMMEDIATE、BATCH、WAIT 和 NOWAIT 模式的具体行为。同时,对比了默认设置与自定义设置的区别,并提供了实际应用建议。
859

被折叠的 条评论
为什么被折叠?



