oracle创建数据表kcb,Oracle调优-常用表KEEP到内存中

数据迁移后性能受到影响,需要将老数据库中keep到内存中的表在新库中keep到内存中,使用如下方法。

新库设置db_keep_cache_size为适当值,这个值的大小不能小于需要keep的表的大小。

查看老库中需要keep的表信息:

select s.owner,

s.segment_name,

s.partition_name,

s.bytes / 1024 / 1024 as "size(m)"

from dba_segments s

where owner = 'XXX'

and segment_name in

(select table_name from dba_tables where owner = 'XXX' and buffer_pool='KEEP')

order by 4 desc

查询老库中需要keep表总大小:

select sum(s.bytes / 1024 / 1024 / 1024) as "total keep size(G)"

from dba_segments s

where segment_name in

(select table_name from dba_tables where owner = 'XXX' and buffer_pool='KEEP')

生成keep脚本:

select 'alter table XXX.'||s.segment_name||' storage(buffer_pool keep);' as "脚本"

from dba_segments s

where owner = 'XXX'

and segment_name in

(select table_name from dba_tables where owner = 'XXX' and buffer_pool='KEEP')

keep表到内存中:

select 'alter table XXX.'||s.segment_name||' cache;' as "脚本2"

from dba_segments s

where owner = 'XXX'

and segment_name in

(select table_name from dba_tables where owner = 'XXX' and buffer_pool='KEEP')

上两个脚本整合:

select 'alter table XXX.'||s.segment_name||' storage(buffer_pool keep) cache;' as "脚本"

from dba_segments s

where owner = 'XXX'

and segment_name in

(select table_name from dba_tables where owner = 'XXX' and buffer_pool='KEEP')上述三个脚本输出结果放在plsql中执行即可。

附录:与cache到内存相关的命令

--表缓存

alter table ..... storage(buffer_pool keep);

--查看哪些表被放在缓存区 但并不意味着该表已经被缓存

select table_name from dba_tables where buffer_pool='keep';

--查询到该表是否已经被缓存

select table_name,cache,buffer_pool from user_TABLES where cache like '%Y';

--已经加入到KEEP区的表想要移出缓存,使用

alter table table_name nocache;

--查询当前用户下表的情况

select table_name,cache,buffer_pool from user_TABLES;

--对于普通LOB类型的segment的cache方法

alter table t2 modify lob(c2) (storage (buffer_pool keep) cache);

--取消缓存

alter table test modify lob(address) (storage (buffer_pool keep) nocache);

--查询段

select segment_name,segment_type,buffer_pool from user_segments;

--对基于CLOB类型的对象的cache方法

alter table lob1 modify lob(c1.xmldata) (storage (buffer_pool keep) cache);

--查询该用户下所有表内的大字段情况

select column_name,segment_name from user_lobs;

--取消表缓存

alter table XXX storage(buffer_pool default);

ps:

查看keep空间的剩余大小:

select p.name,a.cnum_repl "total buffers",a.anum_repl "free buffers"

from x$kcbwds a, v$buffer_pool p

where a.set_id=p.LO_SETID and p.name='KEEP';

查看keep空间的大小:

select component,current_size from v$sga_dynamic_components

where component='KEEP buffer cache';

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29135257/viewspace-2143694/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值