oracle数仓rac两个节点查询耗时不一致问题处理

问题描述

数据库节点1查询比节点2查询慢。现场操作应用发现发现同一sql语句在节点2上只要2分钟左右,在节点1,该条sql执行要超过30分钟。

处理过程

根据问题,初步判断是由于错误的执行计划,导致性能问题,但实际上对两个节点做trace跟踪发现执行计划都一致,后续通过awr报告和10046事件跟踪发现由于“gc cr multi block”耗时造成节点一慢,这是oracle RAC大事务处理特性,两边都查有可能触发数据融合,导致查询变慢。

只要把大事务的指定一个节点上执行,特别是跑批量业务,同一sql语句在同一节点上执行,修改scanip成vip,分别指定到两个vip上,修改如下内容

(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =172.16.1.13)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME =gwkgware)))

把“172.16.1.13”分别改成vip地址“172.16.1.11、12”这两个地址,修改并行查询本地读取数据和连接数大小,数据库参数如下:

sql>alter system set parallel_force_local=true

sql> alter system set processes=5000 scope=spfile sid='*'

sql> shutdown immediate

sql> startup

具体过程如下:

1)通过分别执行查询sql语句,收集awr、ash报告,查看top事件

从上面分析看出“gc cr multi block request”,问题消耗主要在gc上。

2)分别对两个节点,查询分析执行计划情况

SQL> set autot on

SQL> select

2 '出场' as opertype,

3 sum(case when substrb(operator, 1, 1) = 'Z' then 1 else 0 end) in_zhzk,

4 count(*) dnum

5 from XPGCO_JZX.tyardoper

6 where data_source in ('XHCT','HR','HT')

7 and operdate > trunc(sysdate, 'dd')

8 and (opertype = 'OUTIF')

9 and conid in (select conid from XPGCO_JZX.tinyard where nvl(intradeflag, '0') = '0' and (opertype = 'OUTIF')) group by data_source;

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ---------- ---------- ----------

Parse 1 0.00 0.00 0 0 1 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 2 47.02 3646.48 1042681 1214748 0 2

------- ------ -------- ---------- ---------- ---------- ---------- ----------

total 4 47.03 3646.49 1042681 1214748 1 2

Misses in library cache during parse: 1

Optimizer mode: ALL_ROWS

Parsing user id: SYS

Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max) Row Source Operation

---------- ---------- ---------- ---------------------------------------------------

2 2 2 HASH GROUP BY (cr=1214748 pr=1042681 pw=0 time=1443681669 us starts=1 cost=324210 size=41 card=1)

360 360 360 HASH JOIN SEMI (cr=1214748 pr=1042681 pw=0 time=1360532233 us starts=1 cost=324209 size=41 card=1)

377 377 377 TABLE ACCESS BY INDEX ROWID BATCHED TYARDOPER (cr=293 pr=107 pw=0 time=30674 us starts=1 cost=4 size=30 card=1)

377 377 377 INDEX RANGE SCAN INDEX_TYARDOPER (cr=6 pr=2 pw=0 time=1444 us starts=1 cost=3 size=0 card=1)(object id 223446)

19754672 19754672 19754672 TABLE ACCESS FULL TINYARD (cr=1214455 pr=1042574 pw=0 time=4189352622 us starts=1 cost=324153 size=216784194 card=19707654)

检查跟踪执行结果,两个节点基本上一致,那么执行计划没有问题。

3)通过10046进行跟踪

最终跟踪结果发现,节点1

Elapsed times include waiting on following events:

Event waited on Times Max. Wait Total Waited

---------------------------------------- Waited ---------- ------------

PGA memory operation 20 0.00 0.00

library cache lock 4 0.00 0.00

library cache pin 3 0.00 0.00

Disk file operations I/O 24 0.00 0.00

SQL*Net message to client 2 0.00 0.00

gc cr grant 2-way 258 0.00 0.09

db file sequential read 1736 0.01 3.39

gc cr block 2-way 26 0.00 0.00

gc cr multi block mixed 3938 3.76 830.37

db file parallel read 618 0.02 1.87

gc cr multi block grant 12868 3.76 2739.71

db file scattered read 10589 0.02 35.05

gc current block 2-way 402 0.00 0.12

latch: gcs resource hash 1 0.00 0.00

gc cr disk read 302 0.00 0.10

SQL*Net message from client 2 231.62 231.62

主要慢在“gc cr multi block mixed”、“gc cr multi block grant”上,根据oracle RAC大事务查询的特性对应用节点访问的ip进行调整,分别调整为两个节点的vip。

4)调整后发现应用有报“ORA-12520”错误

检查后台日志,有“TNS-12520”报错,参考官方资料发现,当process连接数达到设置最大值的80%才会报这个错,但不影响业务。通过select * from v$resource_limit去查询process连接数情况,当前连接数1600多,最大连接数为2000,确实达到80%以上。

只要调整processes值就可以了。原来processes值为2000,调整为5000,重启数据库恢复。

sql> alter system set processes=5000 scope=spfile sid='*'

sql> shutdown immediate

sql> startup

结论

两个节点查询速度不一致原因为查大事务,同一个sql最好在一个节点上查询,这是oracle rac的一个特性,当大事务查询在不同节点上执行,容易触发数据融合,导致其中一个节点查询变慢,特别是数据仓库执行批量业务。

所以此次调整了应用连接地址,从原来的scanip调整为vip访问。

另外调整两个参数如下:

1、parallel_force_local值为true

2、调整processes值到5000

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

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

相关文章

编程流程图

对于复杂流程,我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下: processOn: 这个是我之前 一直的选择,他可以画上面的这些,流程图,网页操作,但是他不是免费的,查过…

JavaScript事件冒泡和捕获

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 事件传播是JavaScript中非常重要的一个概念,它描述了从嵌套元素到祖先…

【C++干货铺】哈希结构在C++中的应用

目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 1.unordered_map的构造 2. unordered_map的容量 3. unordered_map的迭代器 4. unordered_map的元素访问 5. unordered_map的查询 6. unordered_map的修改操作 7. unordered_map的桶操作 底层结构 …

mysql+node.js+html+js完整扫雷项目

一.下载 可以直接下载绑定资源, 也可以访问:克隆仓库:mine_clearance: mysqlnode.jshtmljs完整扫雷项目 (gitee.com) 二.运行sql数据文件 将mysql数据文件导入到本地 先在本地localhost里创建数据库 mine_clearance, 然后如图&…

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索 效果图定义子组件父组件应用 效果图 定义子组件 主要结合el-select和el-tree两个组件改造的。 <template><div class"selectTree"><el-select filterable :filter-method"filterMe…

微软给Windows 11增添了一个由AI支持的‘Voice Clarity’功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

linux搭建jupyter

查看虚拟环境 conda info --envs进入虚拟环境 conda activate my_env pip install jupyter pip install ipykernel1. jupyter notebook启动 1.1 创建临时jupyter notebook任务 jupyter notebook --ip0.0.0.0 --no-browser --allow-root --notebook-dir/home/xxx1.2 jupyter…

共用体与枚举法,链表的学习

结构体注意事项&#xff1a; 1.结构体类型可以定义在main函数里面&#xff0c;但是此时的作用域就被限定在该函数中 2.结构体的的的定义的形式&#xff1a;a.先定义类型&#xff0c;后定义变量-----struct stu s b.定义类型的同时&#xff0c;定义了变量&#xff1a;struct…

Notion 开源替代品:兼容 Miro 绘图 | 开源日报 No.162

toeverything/AFFiNE Stars: 25.6k License: NOASSERTION AFFiNE 是下一代知识库&#xff0c;将规划、排序和创建集于一身。它是一个注重隐私、开源、可定制且即插即用的替代方案&#xff0c;可以与 Notion 和 Miro 相媲美。主要功能和优势包括&#xff1a; 超融合&#xff1…

本地部署GeoServe服务并结合内网穿透实现任意浏览器远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

Python代码重构库之rope使用详解

概要 Python是一门强大的编程语言,但在大型项目中,维护和重构代码可能会变得复杂和困难。为了提高开发人员的效率和准确性,有许多工具可用于辅助代码重构和智能代码补全。其中之一是Python Rope。 Python Rope是一个用于Python编程语言的强大工具,它提供了丰富的功能,包…

【RT-DETR有效改进】利用YOLO-MS的MSBlock模块改进ResNet中的Bottleneck(RT-DETR深度改进)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块),我们将其用于替换我们ResNet中Basic组合出一种新的结构,来替换我们网络中的…

Spring Boot 整合 Redis 使用教程

作为开发者&#xff0c;相信大家都知道 Redis 的重要性。Redis 是使用 C 语言开发的一个高性能键值对数据库&#xff0c;是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。 Redis 以超…

PyTorch复现网络模型VGG

VGG 原论文地址&#xff1a;https://arxiv.org/abs/1409.1556VGG是Visual Geometry Group&#xff08;视觉几何组&#xff09;的缩写&#xff0c;它是一个在计算机视觉领域中非常有影响力的研究团队&#xff0c;主要隶属于牛津大学的工程系和科学系。VGG以其对卷积神经网络&am…

Vue3_基础使用

vue2的选项式与vue3的组合式区别&#xff1a; 选项式&#xff1a;vue2中数据与方法计算属性等等&#xff0c;针对一个数据的处理在不同的配置中&#xff0c;当业务复杂时很难维护&#xff0c;修改起来也不好查找。 vue3的组合式&#xff1a;将针对数据的方法计算属性等等放在一…

FPGA高端项目:Xilinx Zynq7020系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本本方案的Xilinx Artix7系列…

深度解读 BigANN 2023 四大赛题,向量搜索还有更好的解决方案?

近年来&#xff0c;向量搜索大赛 BigANN 一直是行业关注的焦点。原因在于&#xff0c;BigANN 不仅是在向量搜索领域具有强大影响力的比赛&#xff0c;开发者在赛后贡献出的相关解决方案更是行业进步与发展的重要动力。 向量检索大赛 BigANN 旨在提升大规模 ANN 的研究创新和生产…

Django模型(八)

一、修改数据 先获取对象,通过对象属性更新数据,再保存 (更新单一数据)通过QuerySet的update函数更新数据 (更新多条数据) #单条记录修改 save c = Cook.objects.get(pk=1) c.name = 安妮 c.save()# 更新多个值 update Cook.objects.filter(sect=粤菜).update(level=5)1.1、…

Methodot低代码实战教程(一)——熟悉可视化Echart组件

一、产品介绍&#xff1a; Methodot是行云创新旗下一款面向研发使用的一站式云原生开发及应用托管平台&#xff0c;产品内有大量开箱即用的服务和开发工具&#xff0c;例如&#xff1a; 支持开发团队进行微服务架构设计&#xff08;例如一个袜子商店管理系统&#xff09;&…

win11安装MySql5.7

1、下载 打开下载链接&#xff1a;MySQL :: Download MySQL Installer 2、安装 2.1、安装界面 2.2、选择自定义安装 2.3、根据自己系统的位数进行选择是X64还是X86 2.4、选择安装路径 2.5、继续下一步 2.6、选择服务器专用&#xff0c;端口是3306 2.7、设置密码 2.8、设置服…