oracle 写入数据的过程

本文详细介绍了Oracle数据库中事务处理的具体步骤,包括从事务开始到提交的全过程,并解释了checkpoint的作用及其实现方式。

1、事务开始;

2、buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;

3、事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;

4、事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;

5、当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中。

附:checkpoint由ckpt进程触发oracle进行checkpoint动作,将data buffer中的脏块(已经写在redo里记录但是没有写到datafile里的)的内容写入到data file里并释放站用的空间,由dbw后台进程完成,并修改controlfile和datafile的scn.
一般手工执行(alter system checkpoint)是由于要删除某个日志但是该日志里还有没有同步到data file里的内容,就需要手工check point来同步数据,然后就可以drop logfile group n.

[@more@]

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

转载于:http://blog.itpub.net/11423276/viewspace-995410/

### 优化 Oracle 数据库写入性能解决方案 #### 调整日志缓冲区 (Log Buffer) 增大重做日志缓冲区(Redo Log Buffer)有助于减少频繁的日志切换,从而加快事务提交的速度。通过设置 `LOG_BUFFER` 参数来增加其大小,可以有效改善批量插入或高并发场景下的写入性能[^1]。 ```sql ALTER SYSTEM SET LOG_BUFFER = 1048576 SCOPE=SPFILE; ``` #### 合理规划表空间与数据文件布局 对于大规模的数据导入操作,建议预先分配足够的连续磁盘空间给目标表所在的表空间,并采用本地管理的表空间(Local Managed Tablespaces),这能显著降低碎片化带来的负面影响并加速I/O处理过程[^2]。 ```sql CREATE BIGFILE TABLESPACE myts DATAFILE '/path/to/datafile.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; ``` #### 利用直接路径加载(Direct Path Load) 当需要向现有表中大量追加记录时,启用直接路径模式可绕过常规的SQL引擎机制,直接将新行写入数据块内,极大提高了吞吐量。可通过指定 `APPEND` 提示实现这一点[^3]。 ```sql INSERT /*+ APPEND */ INTO target_table SELECT * FROM source_table; COMMIT; ``` #### 减少不必要的约束检查 在大批量插入期间临时禁用外键、唯一性和其他复杂类型的约束条件,待全部数据成功载入后再重新激活它们。这样做可以在一定程度上减轻CPU负担以及缩短整体耗时[^4]。 ```sql -- 禁用约束 ALTER TABLE emp DISABLE CONSTRAINT fk_deptno; -- 执行插入... INSERT INTO emp (...) VALUES (...); -- 恢复约束有效性 ALTER TABLE emp ENABLE NOVALIDATE CONSTRAINT fk_deptno; ``` #### 控制索引维护开销 创建过多的索引会拖累DML语句的表现,尤其是在执行更新和删除动作的时候尤为明显。因此,在设计阶段应谨慎评估哪些字段确实有必要建立索引;另外还可以考虑延迟重建失效后的索引来换取更流畅的写入流程。 ```sql -- 插入前暂停某些非必要的索引 ALTER INDEX idx_emp_name UNUSABLE; -- 进行插入... -- 完成后恢复索引可用性 ALTER INDEX idx_emp_name REBUILD ONLINE; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值