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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海外代理IP推荐:5大最佳Luminati替代方案

在跨境出海业务中,海外代理IP是非常高效的助力工具,因此也衍生了非常多的代理服务商。想必大多数都知道Brightdata(原名Luminati),但是,由于代理IP的高需求,慢慢地我们发现除了高价的卢米&#…

Redis常见问题

击穿 概念:在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。 引发击穿的原因: 第一次访问恶意访问不存在的keyKey过期 合理的规避方案: 服务器启动时, 提前写入规范key的命名, 通过中间件拦截对…

Qt Excel读写 - QXlsx的安装配置以及测试

Qt Excel读写 - QXlsx的安装配置以及测试 引言一、安装配置二、简单测试 引言 Qt无自带的库处理Excel 文件,但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库:QXlsx,一个基于Qt库开发的用于读写Microsoft Excel文…

知识点积累系列(六)操作系统(Linux+Windows+MacOS)篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第六篇,记录日常学习中遇到的 操作系统相关 的知识点,包括 Linux、Windows、MacOS等 1.Linux相关 1.1.shell脚本 1.2.命令相关 1.2.1.vim命令 1.2.2.nslookup命…

【C++】类和对象(二)——构造/析构/拷贝构造函数

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读1. 默认成员函数2. 构造函数2.1 引入2.2 特性2.3 默认构造函数 3. 析构函数3.1 概念3.2 特性3.3 默认析构函数 4. 拷贝构造函…

如何发布一款移动 App?

如何发布一款移动 App? 本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除 今天来聊聊如何发布一款移动 App。 移动 App 的发布流程不同于传统方法。下图简化了这一过程,以帮助您理解。 移动应用程序发布流程的典…

计算机设计大赛 垃圾邮件(短信)分类算法实现 机器学习 深度学习

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 垃圾邮件(短信)分类算…

力扣349两个数的交集

题目连接:349. 两个数组的交集 - 力扣(LeetCode) 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入: nums1 [1,2,2…

elementUI之el-form-item的嵌套的场景

像这种,计费规则这几个字而且带红点,外观上是el-form-item,但是其并没有直接和控件进行相关联,这是和其他的el-form-item不同之处。所以这里就得用上嵌套了。也就是说elementUI中el-form-item是可以嵌套使用的。

幻兽帕鲁(Palworld)v0.1.3免安装中文版(下载及配置中文及服务器搭建)

配置中文 进入到游戏文件夹中 Palworld.v0.1.3.0\game\Engine\Binaries\ThirdParty\Steamworks\Steamv153\Win64\steam_settings设置中文 simplified chinesewindows搭建服务器 要求 中央处理器4核(推荐)内存16千兆字节(GB) …

深入玩转Playwright:高级操作解析与实践

playwright高级操作 iframe切换 ​ 很多时候,网页可能是网页嵌套网页,就是存在不止一个html标签,这时候我们的selenium或者playwright一般来说定位不到,为什么呢? ​ 因为默认是定位到第一个标准的html标签内部。 …

Python算法题集_滑动窗口最大值

本文为Python算法题集之一的代码示例 题目239:滑动窗口最大值 说明:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗…

蓝桥杯 第 2 场 小白入门赛

目录 1.蓝桥小课堂-平方和 2.房顶漏水啦 3.质数王国 4.取余 5.数学尖子生 6.魔术师 比赛链接 1.蓝桥小课堂-平方和 简单签到直接按照题目处理即可注意开long long void solve(){LL x; cin>>x;LL ans x*(x1)*(2*x1)/6;cout<<ans<<endl; } 2.房顶漏水…

opencv-python计算视频光流

光流基本概念 光流表示的是相邻两帧图像中每个像素的运动速度和运动方向。具体&#xff1a;光流是空间运动物体在观察成像平面上的像素运动的瞬时速度&#xff0c;是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系&#xf…

仰暮计划|“那时候在生产队下面,集体干活,吃大锅饭,由队里分粮食,吃不饱饭是常事,队里分的粮食就那么点,想要吃饱真的太难了”

希望未来的中国越来越好&#xff0c;大家的生活也越来越好 老人是1955年在河南省洛阳市洛宁县的一个小山村里出生的&#xff0c;前半辈子为了生活&#xff0c;为了孩子而打拼&#xff0c;虽然经历了不少的苦难&#xff0c;但后半辈子也算是苦尽甘来&#xff0c;生活美满。现在就…

【MATLAB源码-第130期】基于matlab的BPSK-ZF迫零均衡,对比均衡前后的误码率曲线以及理论曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 信道均衡是通信系统中的一项关键技术&#xff0c;其主要目的是减少或消除由于信道特性导致的信号失真。在数字通信中&#xff0c;尤其是在无线通信系统中&#xff0c;由于多径传播等原因&#xff0c;接收到的信号会受到严重的…

浅析云性能监控的重要性及核心功能

随着企业日益依赖云计算服务&#xff0c;云性能监控变得至关重要。云性能监控是一种实时监测、分析和报告云基础设施及应用程序性能的方法。本文将深入探讨云性能监控的目的、重要性以及其核心功能&#xff0c;以帮助企业更好地理解和实施这一关键的运维实践。 一、云性能监控的…

[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

PCB设计10条重要布线原则(学习笔记)

文章目录 一、连线精简二、避免走直角线三、差分走线四、蛇形走线五、圆滑走线六、数字与模拟分开七、3W原则八、20H原则九、铜箔承载电流十、过孔承载电流 一、连线精简 尽量用最短的路径去布线 1、可以省资源 2、信号差损少 3、线能不拐弯就不拐弯 4、能不换层就不换层 二…

MongoDB安装以及卸载,通过Navicat 15 for MongoDB连接MongoDB

查询id&#xff1a; docker ps [rootlocalhost ~]# docker stop c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rm c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rmi mongo sudo docker pull mongo:4.4 sudo docker images 卸载旧的 sudo docker stop mong…