【YashanDB 知识库】如何处理 no free block in dictionary cache

简介: 在共享集群中,创建用户和查询表或视图时可能出现卡住或报错现象。原因是 dc pool 不足,导致 create table、user 等操作需等待其他节点返回消息而卡住,影响业务使用。此问题存在于23.2.7.100及之前版本。解决方法包括清理 share pool 或增大其容量,并调整 SQL 和 DICTIONARY CACHE POOL 的占比。通过查看 alert.log、v$share_pool、v$global_mpool、v$dict_cache 和 dba_tab_statistics 视图进行问题分析。

问题现象
1、共享集群中,创建用户卡住

2、查询表或视图报错

问题的风险及影响
1、共享集群中,create table、user 等,因为需要等其他节点返回消息,如果某个节点 dc 不够,则会卡住。

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

1.jpeg

问题影响的版本
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,发现报错

2.jpeg

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

3.jpeg

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

相关文章
|
11月前
|
SQL 存储 关系型数据库
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
|
10月前
|
SQL 测试技术 数据库
【YashanDB知识库】IMP跨网络导入慢问题
问题现象:290M数据,本地导入2分钟,跨机导入耗时显著增加(最高30分钟)。 原因分析:`imp`逐条SQL通过网络传输至yashanDB执行,交互频繁导致性能下降。 影响版本:客户测试环境22.2.8.3。 解决方法:将导入文件上传至与yashanDB同机后使用`imp`,减少网络延迟。 经验总结:优化`imp`工具,支持直接上传文件至服务器端执行,降低网络依赖。
|
10月前
|
监控 数据库
【YashanDB 知识库】ycm 托管数据库时报错 OM host ip:127.0.0.1 is not support join to YCM
在托管数据库时,若 OM 的 IP 被设置为 127.0.0.1,将导致无法托管至 YCM,并使数据库失去监控。此问题源于安装时修改了 OM 的监听 IP。解决方法包括:将 OM 的 IP 修改为本机实际 IP 或 0.0.0.0,同时更新 env 文件及 yasom 后台数据库中的相关配置。经验总结指出,应避免非必要的后台 IP 修改,且数据库安装需遵循规范,不使用仅限本机访问的 IP(如 127.0.0.1)。
|
10月前
|
监控 网络安全 数据库
YashanDB 知识库:ycm 纳管主机安装 YCM-AGENT 时报错 “任务提交失败,无法连接主机”
在安装 ycm-agent 纳管主机时,可能出现因端口未开放导致的报错问题。此问题会阻止 YCM 对主机和数据库的监控功能,影响版本为 `yashandb-cloud-manager-23.2.1.100-linux-aarch64.tar`。原因是目标主机(如 10.149.223.121)未开放 9070 或 9071 端口。解决方法包括关闭防火墙、添加白名单或开放指定端口,需与管理员确认操作。处理过程涉及网络检查、端口测试等步骤。端口问题解决后,若再次安装报唯一键错误,需先移除失败主机再重试。
|
10月前
|
监控 Java Shell
【YashanDB 知识库】ycm 托管数据库时,数据库非 OM 安装无法托管
本文主要介绍了因数据库未按规范使用 yasboot 安装导致的问题及解决方法。问题表现为无 yasom 和 yasagent 进程,且目录结构缺失,致使 ycm 无法托管与监控。分析发现可能是数据库版本旧或安装不规范引起。解决方法为先生成配置文件,安装 yasom 和 yasagent,再生成并修改托管配置模板,最终通过命令完成托管至 yasom 和 ycm。总结强调了按规范安装数据库的重要性以避免类似问题。
|
11月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
11月前
|
数据库
【YashanDB知识库】服务器重启后启动yasom和yasagent进程时有告警
【YashanDB知识库】服务器重启后启动yasom和yasagent进程时有告警
|
11月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
11月前
|
SQL 关系型数据库 PostgreSQL
【YashanDB 知识库】从 PostgreSQL 迁移到 YashanDB 如何进行数据行数比对
【YashanDB 知识库】从 PostgreSQL 迁移到 YashanDB 如何进行数据行数比对
|
11月前
|
SQL 关系型数据库 MySQL
【YashanDB 知识库】YashanDB 支持 MySQL 多表更新语句的解决方法
【YashanDB 知识库】YashanDB 支持 MySQL 多表更新语句的解决方法

热门文章

最新文章