数据库管理-第八十三期 炒点冷饭(20230620)

news2024/11/25 18:37:40

数据库管理 2023-06-20

  • 第八十三期 抄点冷饭
    • 1 ORA-04031
    • 2 Shared Pool
    • 3 Library Cache
    • 4 Doc ID 2590172.1
    • 5 Bug 34832725
    • 总结

第八十三期 抄点冷饭

上周,借着剩余的两天年假,又从300多个小时中拿了3天出来,加上前后两个周末,去泰国完了一圈,整体还是很爽的,这里分享一些照片,具体游记后面详见公众号:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1 ORA-04031

ORA-04031: unable to allocate xx bytes of shared memory(“xxx”,“xxx”,“xxx”,“xxx”),是一个Oracle数据库中比较典型的报错,从报错的字面意思就能很好理解,数据库语句执行无法从SGA的shared pool中获取需要的内存,大多数情况只会偶发出现(毕竟硬件资源是有限的);但是我也遇到过一直触发,语句无法执行的情况,这一般就涉及BUG、配置错误等原因了。

2 Shared Pool

只要是影响语句的报错,我们都应该尽量避免出现,毕竟你不知道那些开发有没有做好失败重试机制,更有甚者一个报错会拖垮整个应用。但从4031这个报错来看,就需要回过头看看Shared Pool到底是用来干什么的:
在这里插入图片描述
首先Shared Pool是SGA中的一个组成部分,无论是基于自动管理还是手动管理,在SGA中都需要考虑与其他组件之间的关系,尤其是与Buffer Cache之间的关系(毕竟更多的数据刷到内存性能相对更好)。
在这里插入图片描述

  • Library Cache
    是一种共享内存结构,用于存放可执行的SQL和PL/SQL代码。简单点来说,SQL执行的时候会尝试使用以前执行过的信息,诸如已解析的SQL、SQL执行计划、解析过和编译过的PL/SQL程序单元等信息就存放在这里。
  • Data Dictionary Cache
    是存放数据库元数据的地方,比如表或视图的结构和用户信息。
  • Server Result Cache
    用于存放SQL执行结果和PL/SQL函数结果缓存。

其他Shared Pool中的组件就不太重要了。在Shared Pool中其实Library Cache往往是占用内存空间最大的地方,那么控制Library Cache大小就是减少出现4031的重要手段。

3 Library Cache

无论是Shared SQL Area还是Private SQL Area,里面存放的都是已解析的SQL、SQL执行计划、解析过和编译过的PL/SQL程序单元等信息。减少Library Cache中记录的SQL信息就可以极大减少内存空间占用,从一般优化建议来看就是使用绑定变量来减少:

SQL1:
select * from daily_sales where shipped_from='WAREHOUSE1';
SQL2:
select * from daily_sales where shipped_from='WAREHOUSE2';

SQL3:
select * from daily_sales where shipped_from=:A;

对于数据库来说,SQL1和SQL2不是一条语句,在Library Cache用会生成两条SQL信息,且不同语句之间无法复用执行计划会产生硬解析,这样不仅增大了内存占用,也增加了内存消耗。如果将shipped_from的匹配内容像SQL3那样传入变量A中,那么在Library Cache中就只会生成一条信息,也可以很方便的复用执行计划。
当然还有一些看似完全一样的操作也会增加占用:

SQL4:
create table x1 (id number,name varchar2(20));

drop table x2 [purge];

SQL5:
create table x1 (id number,name varchar2(20));

SQL4和SQL5语句完全一样,但是因为对应表的object_id产生了变化,在Library Cache中也会生成不同version的信息,增加占用。我这里处理过的一个业务就是因为每天大量的此类操作,导致自动管理的SGA,总计120GB,db cache被shared pool积压到了不足5GB,要不是因为是Exadata,可能早卡崩了。

4 Doc ID 2590172.1

ORA-04031 on Multitenant Database with Excessive Amounts of KGLH0 and / or SQLA Memory and Parameter SHARED_POOL_SIZE or SGA_MIN_SIZE Set at the PDB Level
在这里插入图片描述
在第二十二期的时候我是遇到过这个问题的,莫名其妙报4031,就是因为在PDB内设置了shared_pool_size和sga_min_size,遇到了只能通过下面命令处理:

alter system flush shared_pool;

由于PDB只有2个,后面就通过在CDB层面控制db_cache_size和shared_pool_size处理该问题。

5 Bug 34832725

[SHRD CRSRS] ORA-4031 and / or High Shared Pool Latch Contention During Session Creation in 19.11 and Above
在这里插入图片描述
在这里插入图片描述
这也是一个经常出发4031的一个BUG,之前在一个省的一体机上的19.17触发了并且查了很久,我这里的19.16和19.17上并没有触发,从后台反馈来看主要涉及19.15和19.17两个版本。现在的处理方法要么是flush shared_pool,要么打one-off patch和升级到19.18、19.19的修复版本或19.20。

总结

休假回来整体浑浑噩噩的,这一期实际上还算是炒第二十二期的冷饭。
老规矩,知道写了些啥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结合符号性记忆,清华等提出ChatDB,提升大模型的复杂推理能力

结合符号性记忆,清华等提出ChatDB,提升大模型的复杂推理能力 随着大语言模型(Large Language Models)的爆火,例如 ChatGPT,GPT-4,PaLM,LLaMA 等,如何让大语言模型更好的…

自动化测试如何区分用例集合?你一定要知道

目录 前言 业务量和复杂度增长现状是什么? 如何区分自动化测试的用例集合? 区分用例集合的过程要注意什么? 总结: 前言 有同学在后台问到:业务比较复杂,有很多串行并行甚至组合的业务场景,执…

NeurIPS 2022|DeepMind最新研究:大模型背后的ICL可能与数据分布密切相关

NeurIPS 2022|DeepMind最新研究:大模型背后的ICL可能与数据分布密切相关 大模型自然语言处理机器学习 传统的文本语言模型倾向于两阶段的训练模式,即首先在大规模语料库上进行预训练,然后在目标下游任务上进行微调,这…

应届毕业生自荐信7篇

应届毕业生自荐信1 尊敬的贵公司领导: 您好! 非常感谢您在百忙中抽空审阅我的自荐信,给予我毛遂自荐的机会。作为一名大专的应届毕业生,我热爱我的专业并为其投入了巨大的热情和精力。在几年的学习生活中,系统学习了物…

入行IC,优选哪些工作城市?

首先大家要知道大公司的一个布局,他们大都是在北上广深,一般他们都是总部,市场客户支持肯定是要放在这些地方,因为这些地方离客户比较近,ZF也能给予一些优惠政策。 国内优秀的IC设计公司主要分布在以下几个城市: 1.上…

创新项目,用心服务 | 凌恩客户亲述“我和凌恩的故事”

主人公简介 武冲,山东省果树研究所草莓团队负责人,副研究员,主要从事草莓新品种选育、种苗繁育及栽培技术研究,主持省部级科研项目3项,以第一作者或通讯作者发表论文30余篇,其中SCI论文8篇,授权…

centos下的Nginx的安装

1.Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强。 其他服务器介绍:Apache服务器、Tomcat服务器、Lighttpd服务器 2.nginx依赖安装 yum -y instal…

Ansible部署和常用模块

一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 …

Codesys高速计数应用(ST功能块)

Codesys如何创建FB请参看下面文章链接: CODESYS增量式PID功能块(ST完整源代码)_RXXW_Dor的博客-CSDN博客增量式PID的详细算法公式和博途源代码,请参看下面的文章链接:博途1200/1500PLC增量式PID算法(详细SCL代码)_博图scl语言pid增量编码器_RXXW_Dor的博客-CSDN博客。http…

Doo Prime 德璞资本:期货开户条件大盘点,你知道几个?

期货交易作为国内投资交易市场中的一大板块,越来越受到广大投资者的关注,期货市场是一种特殊的金融市场,需要满足一定的条件才能开通期货账户,但是很多人想要进行期货交易,却不知道期货开户条件是什么?一般…

【TA100】3.6 纹理压缩

一、什么是纹理压缩 ● 纹理压缩是: ○ 为了解决内存、带宽问题,专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术。 ● 区分图片格式和纹理压缩格式 ○ 概念上讲 ■ 图片格式:● 是图片文件的存储格式,通常在硬盘、…

Python之Flask Blueprint(蓝本)

文章目录 一、前言二、实例讲解2.1 蓝本创建2.2 导入蓝本2.3 蓝本注册 参考资料 一、前言 在进行Python Web开发时选择Flask框架。项目模块划分阶段,使用Blueprint(这里暂且称之为“蓝本”)。Blueprint通过把实现不同功能的module分开,从而把一个大的ap…

强化学习从基础到进阶-常见问题和面试必知必答[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代

【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧…

选择排序 - C语言实现

目录 🥰前言 ✅选择排序 🥝基本思想 🥝实现逻辑 🥝动图演示 复杂度分析 😍代码实现 🚩优化改进-->二元选择排序 😍 改进代码 前言 🥰在学数据结构的第一节课就知道了数据结…

02. 青龙面板应用——安装依赖拉取仓库运行京东脚本(保姆级图文)

目录 1. 安装依赖1.1 常用依赖1.2 安装指定依赖 2. 定时规则3. 常用的仓库地址4. 添加订阅5. 运行订阅6. 获取京东手机版cookie7. 在青龙面板中添加京东cookie8. 测试任意一个京东的定时任务总结 欢迎关注 『青龙面板』 专栏,持续更新中 欢迎关注 『青龙面板』 专栏…

Linux基础服务1——Openssh

文章目录 一、基本简介二、登录示例2.1 当前用户登录2.2 指定用户登录 三、ssh主机密钥四、ssh免密登录五、服务端配置文件5.1 连接端口号5.2 限制只能使用普通用户登录5.3 密钥登录 六、SSH安全注意事项 一、基本简介 常见远程登录工具: telnet,认证明文…

Java 获取水库流域并判断雨量站是否在水库流域范围内或附近

获取水库流域并判断雨量站是否在水库流域范围内或附近 准备工作 水库流域区域的geojson文件雨量站的经纬度 工具类 这里有两个方法: isInsideBoundary:判断雨量站是否在流域范围内calculateNearestDistance:计算雨量站和流域边界点最近距…

100种思维模型之马斯洛需求层次理论-81

马斯洛需求层次理论是人本主义科学理论之一,由美国心理学家亚伯拉罕马斯洛在1943年在《人类激励理论》论文中所提出。 文中将人类需求像阶梯一样从低到高按层次分为五种,分别是:生理需求、安全需求、社交需求、尊重需求和自我实现需求。 一、…

如何使用Divi建立会员网站 – 第1部分

欢迎来到这个由 2部分组成的系列的第 1部分,我将在其中向您展示如何通过结合MemberPress和 Divi来构建一个完整的会员网站。我将带您了解如何设置您的会员网站,其中包含销售在线课程或产品所需的一切,包括自定义注册页面、电子邮件通知以及在…

K8S的架构理论概述

一、Kubernetes介绍 1、什么是Kubernetes? 用于自动部署、扩展和管理“容器化( containerized) 应用程序”的开源系统 可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是–个生态极其丰富的容器编排框架工具 由来: …