如何处理no free block in dictionary cache

首页    知识库    常见问题    如何处理no free block in dictionary cache

问题现象

1、共享集群中,创建用户卡住

2、查询表或视图报错

 

问题的风险及影响

1、共享集群中create tableuser等,因为需要等其他节点返回消息,如果某个节dc不够,则会卡住。

2、查询创建等报错,影响业务使用。

image2024-11-13_15-30-5

 

问题影响的版本

23.2.7.100及之前的所有版本

 

问题发生原因

dc pool不足

 

解决方法及规避方式

1、如果sql pool占用share pool的剩余空间,可以先清share pool

alter system flush shared_pool;

如果有用,可以不重启。

2、如果条件允许,增share pool :

alter system set SHARE_POOL_SIZE=8G scope=spfile;

dc占比:

alter system set SQL_POOL_SIZE=xx(默50 scope=spfile;

alter system set DICTIONARY_CACHE_SIZE=xx(默25 scope=spfile;

需要重启。

 

问题分析和处理过程

1、查alert.log,发现报错

image2024-11-13_15-30-53

2、查看视 

v$share_pool

  可以看share pool DICTIONARY CACHE POOL占用的空间,和剩SHARE POOL 的空间。

  SQL POOL DICTIONARY CACHE POOL不够时,会用剩余SHARE POOL

v$global_mpool

可以看SQL POOL DICTIONARY CACHE POOL的使用情况。

v$dict_cache

查看各个dc的使用情况,通过查看这个视图,发现表dc都被占用情况,之后再分析导致该情况的原因。

ref_Count表示该dc的引用次数,只有ref_Count=0时,改dc才可以淘汰使用。

memory_context_used字段代表每dc占用的空间大小,可以用该字段看到每张表dc占用情况。

select count(*) from v$dict_cache where ref_Count= 0 ;

select count(*) from v$dict_cache where ref_Count > 0 ;

select sum(memory_context_used) from v$dict_cache where memory_context_used is not null

image2024-11-13_15-52-19

dba_tab_statistics

-- 查看上一次执行统计信息的时间

Select timestamp(LAST_ANALYZED) from dba_tab_statistics where LAST_ANALYZED is not null order by 1 desc limit 10;

3、查run.log

 

浏览量:0