Large DML insert/update hanging tips

本文提供了执行大型批量插入操作的最佳实践,包括通过分批提交、使用专用回滚段、并行化插入作业、禁用索引等方法来避免挂起和提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Expert Oracle Tips by Burleson Consulting
August 24, 2010

Question:  We were trying to insert approximately 76 million rows with about 4 gigabytes of space with a batch job when the insert operation failed with the archive log error.  What are the best practices for performing large batch insert jobs to avoid hanging?
Answer: When you run a large batch insert or updates job you risk aborting with:

1 – Insert aborts with a ORA-01555 snapshot too old

2 - Insert hangs when your archive redo log directory becomes full.

There are several approaches to performing large batch update or tuning insert jobs:

  • Divide and Conquer:  Make the job re-startable and commit every 1 5 minutes to release held rollback segments (undo logs).
  • Check space in archived redo log filesystem:  Make sure that you have enough spaced to hold all of the new archived redo logs.  See my notes on monitoring Oracle redo log activity.
  • Dedicated undo: Assign a giant, dedicated rollback segment to the batch job, large enough to hold all of the before images for any updates.
  • Parallelize the insert job:  There are two types of parallelism for large DML jobs: 
    (1) You can use parallel DML, or
    (2) submit multiple simultaneous insert jobs, making sure to you have enough freelists allocated to the table to prevent buffer busy waits. 
    Multiple freelists add additional segment header blocks, removing the bottleneck.  You can also use Automatic Segment Space Management (bitmap freelists) to support parallel DML, but ASSM has some limitations.
  • Bulk DML: Consider using PL/SQL bulk operators to improve load speed by reducing context switching.
  • Consider NOLOGGING: Take a full backup first and run the insert with the NOLOGGING clause.  Note:  INSERT APPEND supports only the subquery syntax of the INSERT statement, not the VALUES clause. For more information on the subquery syntax of INSERT statements see Oracle nologging tips.
  • Use insert append: Using the “append” hint to your insert ensures that you always grab a fresh, dead-empty block from your freelists.  If you are doing parallel DML, the Append mode is the default and you don't need to specify an APPEND hint. 
  • Disable/drop indexes:  It's far faster to rebuild indexes after the data load, all at-once. Also indexes will rebuild cleaner, and with less I/O if they reside in a tablespace with a large block size.

REF:Oracle Tuning- The Definitive Reference Second Edition

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值