dml过程中会产生锁,先了解下锁的模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
如果使用非online,会阻塞表上的DML交易,造成长时间的交易超时。
使用online,会等待dml的锁释放之后,在创建,会加上创建时间。
总结:
1. 非online方式创建索引,不能存在正在执行的DML,否则create index就会抛出ORA-00054。如果非online创建索引过程中,有正在执行的DML,则这些操作会hang,直到create index执行完成。换句话说,对于频繁DML的表,因为并发操作,有可能一直无法创建索引,也有可能创建索引的过程中,影响其他DML操作。
2. online方式创建的索引,如果存在正在执行的DML,会一直等待,直到所有DML完成。如果使用online创建索引过程中,有正在执行的DML,则不会影响。
3. 对于非online,创建索引过程中,会阻碍其他的DML,对于online,创建过程中,不会阻碍其他DML。
4. 相对来说,online比非online对现有DML的影响较小,但是二者,都存在无法创建的可能。
5. 针对无法创建的可能,一种方法,就是暂停业务,暂停所有DML操作,这样可以顺利地创建完成,此时选择非online,相比使用online,可以更快创建
本文探讨了数据库中创建索引的在线和非在线方式对DML操作的影响。非在线创建索引会阻塞DML,可能导致交易超时,而在线方式会在DML完成后创建,减少干扰。在线方式相对更佳,但两者都有可能因并发DML导致创建失败。为确保顺利创建,一种策略是在业务暂停时使用非在线方式。
2426

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



