Oracle中的LOB字段解读

 问题背景:


LOB字段是Oracle数据库用于存储大数据对象的字段类型,包括BLOB、CLOB、NLOB、BFILE;
当LOB字段大小超过4k时,数据库会单独为该LOB字段分配额外的BLOB Segments存储BLOB对象,存储在lobsegment中的lob缺省不在缓冲区缓存,对于lob的读写都是物理IO,代价非常高,所以对于大于4kb的lob字段更新效率非常低;
被删除或更新的BLOB字段所占用空间不会自动批量回收,当所在表有大量的删除、更新操作时,BLOB所在Segments会迅速耗尽空间,新的INSERT需要空间时,会在高水位线上加锁后,回收曾使用但已经过期的BLOB空间,由于该操作效率很低,此时数据库就会有大量的‘enq:HW – contention’等待,相关SQL会由于该等待而串行执行,业务受影响十分严重。因此LOB字段不适合在有大批量删除、更新操作的并发场合使用;

 

已知解决办法:

为避免由于LOB该特性造成的的风险,对LOB字段的使用应遵循如下要求:

1.存储在lobsegment中的lob可以在定义的时候指定使用cache(默认是nocache),这对于中等大小的lob(比如几k~几十k)很有效果,减少物理IO

2. 有大批量删除、更新操作,而且有并发插入的表中,建议不要使用LOB字段,比如日志表。可以使用多个varchar(4000)字段进行拼接来代替;

3. 使用LOB字段时,为LOB字段手工单独指定和表所在表空间不同的表空间;

4. 版本11g使用LOB字段时,建议使用Securefile(默认basefile),如果单条记录显著大于block size,使用compress选项。

5. 将数据存储到文件系统中,数据库字段中存储文件地址,这种方法好像和bfile差不多;


问题:


1. 对于大容量不经常更新的lob除采用上面的解决办法外,还有什么好的方法;
2. 对于大容量的超过4000字节的文本,如果需要经常更新(如:发表文章,帖子后需要修改),采用什么解决方案比较好;
3. 单个字段大容量信息存储大家有些什么好的方法;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值