现在生产环境中目前有一个很大的中继表,作为多个流程的数据流动所用,数据量很大。里面有clob字段,加上庞大的数据量,表就显得很臃肿了。
目前在做大批量的数据处理的时候发现了一些问题,事物数在不断增加的情况下,数据的处理速度也在不断的降低。最后出现了一些资源的问题。
在抓取了awr和同事的分析之后,产品部门建议把对应的clob放入recycle pool里面。一方面能够降低buffer cache的负载。让clob的部分尽快的从缓存中不断的刷新。
对于recycle pool的设置没有问题,可以设置db_recycle_cache_size来实现,但是这些操作在生产环境中一定要多评估和分析,因为有一些潜在的问题和风险。
首先就是来看sga中是否有足够的空间,因为这个库在开始的时候没有考虑recycle,keep pool的设置,根据很多的项目的反馈,目前用处还不是很大,所以就没有分配足够的空间,sga绝大部分都给了shared pool, buffer_cache,其他的pool都相应的分配了较少的一部分缓存。
这样如果要分配足够缓存,留给recycle pool的部分就很有限了。估算下来,不到200M左右的样子,直观感觉,这样的设置还不如不设置,可能没达到预期的目标还可能使问题更加严重。
第2个思路就是从sga的其他池中拿出一部分的缓存来,分配给recycle pool,这个思路也是很自然的。或者考虑设置sga_target来调高实现,不过这个部分,自己还是有阴影的。
一条sql语句导致的数据库宕机问题及分析 http://blog.itpub.net/23718752/viewspace-1141131/
所以我是不敢自己往枪口上撞的。
还有一个思路就是根据系统的资源情况来分配更多的sga资源,可以调高sga_max_size,这个部分需要重启数据库实例。如果调高的幅度较大,还需要看看内核参数是否有潜在的影响,是否也需要相应的调高。
这个部分还是有影响的。
服务器增加内存后无法重启数据库的问题及解决 http://blog.itpub.net/23718752/viewspace-1137256/
考虑了如上的一些情况,就给产品部门去了封邮件,让他们来帮助评估一下设置的recycle pool最小或者建议值是多少,我来根据这个参数来考虑使用哪种方法。因为产品部门这方面要更专业一些。
自己琢磨了半天,最后的结果也不一定就是最优的。
过了一会,产品部门回邮件了,综合了我的顾虑,他们认为这部分的修改可以稍微延后一些,影响不是特别大,至少从目前的评估来看,不过从长远的情况来看他们建议还是需要这个变更。建议值为500M。
有了这些思路,我查看了这两天的系统负载。数据库负载时相当的高。如果做了以上的变更,可能得不偿失。所以就先把这部分的变更做了更为详细的实现步骤,在测试环境测试之后才能提交给客户。
最后的结果就是下面的步骤。
1.
Alter system set sga_max_size=20G scope=spfile;
Alter system set db_recycle_cache_size=2G scope=spfile;
2.
Bring down DB instance
Restart DB instance.
3.
Run below sql statement under PRDAPPO.
alter table trb1_pub_log modify lob(GENERAL_DATA_C) (storage (buffer_pool recycle) cache);
4.
and use below statement to check if recycle setting is properly, column buffer_pool value should be RECYCLE.
set linesize 200
col table_name format a30
col column_name format a30
col segment_name format a30
col buffer_pool format a20
set pages 50
select table_name,column_name,se.segment_name,buffer_pool from user_segments se,user_lobs sl
where se.segment_name=sl.segment_name
and sl.table_name='TRB1_PUB_LOG';
example like below.
TABLE_NAME COLUMN_NAME SEGMENT_NAME BUFFER_POOL
------------------------------ ------------------------------ ------------------------------ --------------------
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
PUB_LOG GENERAL_DATA_C SYS_LOB0002403829C00014$$ RECYCLE
18 rows selected.