提问,如果把表keep到内存后,读取大表的时候, 还会触发直接路径读吗?

线上问题
一、原服务器内存24G、oracle设置内存为18G、目前服务器扩容到64G

二、部分热点表数据行已上百万、读取过于频繁、考虑KEEP到内存中

解决方案
一、内存调整
注:

1、正常设置为物理内存的75% 、线上设置成48G

2、sga_target不能大于sga_max_size,可以设置为相等

3、SGA加上PGA等其他进程占用的内存总数必须小于操作系统的物理内存

4、修改完成后重启数据库生效

--显示内存分配情况
show parameter sga;
--修改占用内存的大小
alter system set sga_max_size=48000m scope=spfile;
--修改SGA的大小:
alter system set sga_target=48000m scope=spfile;

二、设置表KEEP内存
注:

1、设置后及时生效、线上设置了10G空间的缓存、查询了实际需要KEEP的表、实际占用空间为5G、设置10G够用几年

--查看KEEP缓存空间
show parameter db_keep_cache_size
--设置KEEP缓存空间
alter system set db_keep_cache_size=10000M scope=both;

三、添加表到KEEP中
注:

1、设置后及时生效

2、想要看具体详细数据、可以直接查询dba_segments表

--将表缓存到内存中
alter table t_cdeli_wait_processing_info storage(buffer_pool keep);
--取消表缓存
alter table t_cdeli_wait_processing_info storage(buffer_pool default);
--查询总大小
select component,current_size from v$sga_dynamic_components where component='KEEP buffer cache';
--查询已缓存表
select segment_name from dba_segments where BUFFER_POOL = 'KEEP';
————————————————
版权声明:本文为CSDN博主「wucao110」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wucao110/article/details/125271195

标签: none

评论已关闭