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: 这个是我之前 一直的选择,他可以画上面的这些,流程图,网页操作,但是他不是免费的,查过…

MySQL常用命令集

1、数据库操作 1.1、显示数据库列表 show databases; 1.2、显示库中的数据表 use mysql; show tables; 1.3、显示数据表的结构 describe 表名; 1.4、建库 create database 库名; 1.5、建表 use 库名; create table 表名 (字段设定列表); 1.…

leetcode LCP 24. 数字游戏【等价转换+对顶堆维护中位数】

原题链接:LCP 24. 数字游戏 题目描述: 小扣在秋日市集入口处发现了一个数字游戏。主办方共有 N 个计数器,计数器编号为 0 ~ N-1。每个计数器上分别显示了一个数字,小扣按计数器编号升序将所显示的数字记于数组 nums。每个计数器…

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…

轻松使用python将PDF转换为图片(成功)

使用PyMuPDF&#xff08;fitz&#xff09;将PDF转换为图片 在处理PDF文件时&#xff0c;我们经常需要将PDF页面转换为图片格式&#xff0c;以便于在网页、文档或应用程序中显示。Python提供了多种方式来实现这一需求&#xff0c;本文将介绍如何使用PyMuPDF&#xff08;也称为f…

本地部署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编程语言的强大工具,它提供了丰富的功能,包…

绕过过滤注释符的sql注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、MySQL 注释符 注释符的作用 代码说明:注释用于对代码段进行说明,帮助开发和维护人员理解代码的功能和目的。注释内容在执行时会被数据库引擎忽略,不会影响实际的SQL执行。…

git pull的时候报错

错误信息&#xff1a;You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you can merge. 原因&#xff1a;上一次pull的代码有冲突自动合并失败&#xff0c;在下一次pull之前你没有很好的解决这个冲突 方法&#xff1a; 1&#x…

【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 以超…

在ROS(Robot Operating System)中常用的ROS功能包

ROS&#xff08;Robot Operating System&#xff09;拥有大量的功能包&#xff0c;这些功能包提供了从底层硬件控制到高级算法处理的多种功能。以下是一些常用的ROS功能包&#xff1a; 1. roscpp 和 rospy&#xff1a; - roscpp 是ROS的C客户端库&#xff0c;它提供了用于编…

网络通信--术语对照表

术语对照表 OSI 开放式系统互联通信参考模型&#xff08;英语&#xff1a;Open System Interconnection Reference Model&#xff0c;缩写为 OSI&#xff09;&#xff0c;简称为OSI模型&#xff08;OSI model&#xff09;&#xff0c;一种概念模型&#xff0c;由国际标准化组…