oracle LOB的优化方法

1.LOB表创建语句

先来看一下创建lob的语句,默认的创建一个tlob表后,其实际完全sql如下:

  CREATE TABLE "DSG"."TLOB"
   (	"ID" NUMBER(*,0),
 "C_LOB" CLOB,
 "B_LOB" BLOB
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS"
 LOB ("C_LOB") STORE AS BASICFILE (
  TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
  NOCACHE LOGGING )
 LOB ("B_LOB") STORE AS BASICFILE (
  TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
  NOCACHE LOGGING )

2.常见优化方法

  1. 设置chunk size
    chunksize是oracle 块大小的整数倍.最大为32k.如果经常保存大的lob可以将此chunsize调大,否则会浪费lob空间
  2. cache选项
    cache选项告诉oracle对于lob数据是否存放到缓存中,如果存放到缓存中,则在读写的时候为db file sequential reads.如果不设置cache,则使用直接路径读写.默认为不打开cache.
  3. logging
    是否写日志.

3.basicfile和securefile lob

默认为basicfile,经过测试securefile比basicfile性能更好

1)创建securefile lob

SQL> create table tlob2(id int,b_lob blob) LOB("B_LOB") STORE AS securefile;

2)将basicfile转换为securefile lob

alter table tlob move lob("b_lob") store as securefile (tablespace xxx);

注意:这里会move lob段,会进行锁表,如果lob很大会占用大量临时空间,而且会导致长时间锁表,
因此,最好在设计之初就将表设计为securefile lob

4.PCTFREE对lob的影响

pctfree这个参数定义了一个块保留空间的百分比,保留空间是为了将来可能发生的更新操作,因为更新可能增大被更新行占用的空间,如果此时该块没有可利用空间,那么只有发生row migrate了,从而会降低I/O性能。换句话说,就是当一个块的利用率达到1-pctfree的时候,oracle就将该块从freelist中移除,不再向该块插入数据。所以说pctfree是控制什么时候将块从freelist中移除的。
因此对于永远或者几乎不进行update的lob表,可以将pctreee设置为0

注意:建议在11.2.0.3以后再使用securefile lob,否则可能遇到一些严重的bug.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值