关于纠结的recycle pool的设置(r3笔记第5天)

作者: admin 分类: 公众号存档            0 次浏览 发布时间: 2014-09-24 22:58

公众号:杨建荣的学习笔记 · 作者:r3笔记第5天 · 发布:2014-09-24 22:58:24 · 原文链接

现在生产环境中目前有一个很大的中继表,作为多个流程的数据流动所用,数据量很大。里面有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.

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注