关于纠结的recycle pool的设置

简介: 现在生产环境中目前有一个很大的中继表,作为多个流程的数据流动所用,数据量很大。里面有clob字段,加上庞大的数据量,表就显得很臃肿了。 目前在做大批量的数据处理的时候发现了一些问题,事物数在不断增加的情况下,数据的处理速度也在不断的降低。

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

目录
相关文章
|
消息中间件 数据库 开发者
深入理解Python中的异步编程:从基础到高级应用
在当今高并发、低延迟的应用需求下,异步编程已成为提升性能的关键技术之一。本文不仅剖析了Python中异步编程的基本原理,如事件循环、协程与async/await语法,还深入探讨了异步编程的高级应用场景,如Web框架(如FastAPI)中的异步IO操作、异步数据库交互及构建高效的任务处理系统。通过实战案例,引导读者从理论到实践,全面掌握Python异步编程的精髓,让代码飞起来,轻松应对大规模并发挑战。
|
算法 搜索推荐 开发者
解锁Python代码的速度之谜:性能瓶颈分析与优化实践
探索Python性能优化,关注解释器开销、GIL、数据结构选择及I/O操作。使用cProfile和line_profiler定位瓶颈,通过Cython减少解释器影响,多进程避开GIL,优化算法与数据结构,以及借助asyncio提升I/O效率。通过精准优化,Python可应对高性能计算挑战。【6月更文挑战第15天】
1935 1
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
1091 4
|
前端开发 Java 应用服务中间件
Docker+Nginx打包部署前后端分离项目
最近做了一个前后端分离的权限管理系统项目,今天想用自己的服务器部署下,本地部署测试是没问题的,但是部署在服务器上还是出现了许多小插曲,这里大概记录一下吧。
1102 0
Docker+Nginx打包部署前后端分离项目
|
机器学习/深度学习 算法 决策智能
基于PSO优化的LSTM网络数据预测matlab仿真
基于PSO优化的LSTM网络数据预测matlab仿真
279 0
|
关系型数据库 MySQL 数据库
MySQL的分组和分组后筛选语句(十七)
MySQL的分组和分组后筛选语句(十七)
760 0
MySQL的分组和分组后筛选语句(十七)
|
机器学习/深度学习 存储 Java
印度小哥在「我的世界」里搭神经网络,做图像识别,网友:这是「别人的世界」
在沙盒游戏《我的世界》中,有人搭建了完整的校园,有人举办了毕业典礼,有的人从零开始制作计算机,玩家们层出不穷的创意总能让人眼前一亮。现在,又有一位印度程序员展现了真正的技术:在《我的世界》里搭建神经网络。
345 0
印度小哥在「我的世界」里搭神经网络,做图像识别,网友:这是「别人的世界」
|
机器学习/深度学习 存储 算法
算法系统学习-最最简单递归算法分析和迭代法
系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点
213 0
|
负载均衡 算法 搜索推荐
一文了解分布式一致性算法EPaxos
分布式系统一个核心的问题就是数据的一致性。Paxos算法是分布式一致性中的经典算法,用来解决一个分布式系统如何就某个值(决议)达成一致的问题。本文从Paxos的问题引出EPaxos,介绍EPaxos的基本概念与直观理解。阅读本文需要一些Paxos或Raft等分布式一致性算法背景。
5219 0
一文了解分布式一致性算法EPaxos