平台人生
作者平台人生·2016-12-18 18:20
软件开发工程师·平台人生

数据库使用中的陷阱之LOB字段

字数 762阅读 4737评论 0赞 0

作者韩涛
文章来自微信公众号平台人生


今天介绍数据库中另一个小陷阱-LOB字段。LOB字段是Oracle数据库用于存储大数据对象的字段类型,包括BLOB、CLOB、NLOB、BFILE,最大大小10gR2可以到8T,在11g可到128T(和block size有关)。单表定义中可以包括多个LOB字段。除此之外,LOB字段在初始化时还可以设定很多属性,包括enable/disable storage in row、chunk size、cache/nocache、logging/nologging等等。今天我们主要关注logging/nologging属性。

LOB字段在创建时可设置logging/nologging属性,设置为logging时会把对LOB字段的修改,记录到redolog中用于数据恢复。在进行LOB对象创建时,默认为logging属性,若设置为nologging,只是lobsegment数据变化不写入redolog,不会影响其他row和column的数据redo记录工作。虽然指定nologging属性可以带来减少产生日志量的好处,但是也有可能会带来enq: CF-contention的问题。在数据库中任何需要读取控制文件的动作都需要申请CF锁,用于保证控制文件事务一致性。如果LOB字段创建时设置为nologging属性,当LOB字段所在表有大量的DML操作时,需要频繁获取CF锁用来更新控制文件中的SCN号,从而引起大量enq: CF-contention等待事件争用,导致业务缓慢。若设置为logging模式,会将更新信息存在归档日志中,定期由后台进程完成与控制文件同步,从而降低控制文件访问,避免大面积的CF-contention冲突。所以在使用LOB字段时还是尽量遵循ORACLE的默认值吧!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

相关文章

相关问题

相关资料

X社区推广