Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

  • 源数据库
  • Kafka Connect
  • 监控
  • 测试结果

源数据库

  • Oracle 19c,本地,CDB
  • 数据库主机的I/O带宽为6 GB/s,由此主机上运行的所有数据库共享
  • 临时表空间由42个文件组成,每个文件大小为32 GB,由数据库上运行的所有进程共享
  • 注意:如果有太多并行线程且数据量大(例如,在覆盖语句中对大表使用order by子句),可用空间可能达到上限。

Kafka Connect

  • 3个节点,RHEL虚拟机,每个节点有12个CPU,62 GB RAM,40 GB JVM
  • Kafka CP 7.7.1
  • Debezium 3.0,部署在Kafka Connect上

监控

  • Prometheus和Grafana

测试结果

在我的测试中,我主要关注性能相关的属性。这些属性包括:

  • 在Debezium方面:
    • snapshot.max.threads
    • snapshot.fetch.size
    • max.batch.size
    • max.queue.size
    • poll.interval.ms
  • 在Kafka Connect方面:
    • batch.size
    • linger.ms
    • compression.type

我在测试中尝试了这些属性,并获得了有趣的见解。在这一点上,我已经揭示了在我们的情况下证明最有效的设置:

  • producer.override.batch.size: 1000000,
  • producer.override.linger.ms: 500,
  • producer.override.compression.type: lz4,

通过使用这些设置,我们能够实现25%的优化:从最初的8小时,我们将完整快照的时间缩短到了6小时(见图1)。在整个快照过程中,CPU消耗和JVM内存使用量都没有超过80%。
在这里插入图片描述
我特别观察了一个指标,即源记录的轮询速率。在我的测试中,这个指标作为一个有用的第一指示器,用于判断性能是好还是坏。正如图2所示,最大速率为每秒90k个操作。无论如何,我都无法达到更高的速率。同样重要的是,要查看其相邻的指标源记录写入速率,该指标应该显示几乎相同的图表:

在这里插入图片描述
如果轮询是正常的,但推送到Kafka的速度不够快,那么源记录活动计数可能是一个标识符。图3显示,在我们的情况下,我们不必担心任何阻塞情况

在这里插入图片描述
当然,我们尽力提高速度,并测试了一些其他设置和它们的组合。以下是结果:

  • 将snapshot.fetch.size更改为5000、50000或200000:没有改进
  • 将batch.size更改为800000或2000000:没有改进
  • 将linger.ms更改为10或100:没有改进
  • 将linger.ms更改为750或1000:导致更多时间花费在GC上
  • 将max.batch.size更改为4000或8000:没有改进
  • 将max.batch.size更改为8000,max.queue.size更改为16000,snapshot.fetch.size和query.fetch.size更改为50000:没有改进,更多时间花费在GC上,CPU消耗更高
  • 将poll.interval.ms更改为100:没有改进
  • 这些尝试都没有带来任何改进,大多数情况下速度反而更慢。将snapshot.max.threads的值设置为我们从中提取数据的表的总数也没有加速过程,而且由于对共享数据库资源的巨大负载,这种设置也很微妙。使用过多的并行线程,我们甚至遇到了连接器崩溃的情况,原因是“ORA-12801:在并行查询服务器中发生错误”。

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

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

相关文章

C++书籍 第一部分专业C++程序设计概述

1&#xff0c;必不可少的“hello world” #include<iostream>int main(int argc, char** argv) {std::cout << "hello world" << std::endl;return 0; } 这个是一个极其简单的程序&#xff0c;虽然没有多大简直&#xff0c;但是可以体现c程序格式方…

VIVADO ILA IP进阶使用之任意设置ILA的采样频率

VIVADO ILA IP进阶使用之任意设置ILA的采样频率 VIVADO ILA IP和VIO IP结合使用任意设置ILA的采样频率 目录 前言 一、VIO IP的配置 二、ILA IP的配置 三、测试代码 四、测试结果 总结 前言 VIVADO中编写完程序上板测试时经常会用到viavdo自带的ILA逻辑分析仪IP核&#x…

spring @EnableAspectJAutoProxy @Aspect的使用和源码流程

目录 测试代码EnableAspectJAutoProxyAspectJAutoProxyRegistrarAnnotationAwareAspectJAutoProxyCreatororg.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors 实例化AnnotationAwareAspectJAutoProxyCreator bean "a"的代理…

Mono里运行C#脚本29—mono_trampolines_init

一、概念解释 在计算机编程中,trampoline 通常是一段代码,它起到一个中间跳转的作用。它就像一个跳板,程序可以先跳转到这个跳板上,然后再从跳板跳转到最终的目的地。这种技术在许多不同的场景中都有应用,以下是一些主要方面: 函数调用方面: 当涉及到不同执行环境或不…

【BUUCTF】[GXYCTF2019]BabySQli

进入页面如下 尝试万能密码注入 显示这个&#xff08;qyq&#xff09; 用burp suite抓包试试 发现注释处是某种编码像是base编码格式 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5 可以使用下面这个网页在线工具很方便…

重生之我在异世界学编程之算法与数据结构:深入堆篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 正文一、堆的基本概念二、堆的存储表示三…

《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统

目录 1 预积分 LIO 系统的经验 2 预积分图优化的顶点 3 预积分图优化的边 3.1 NDT 残差边&#xff08;观测值维度为 3 维的单元边&#xff09; 4 基于预积分和图优化 LIO 系统的实现 4.1 IMU 静止初始化 4.2 使用预积分预测 4.3 使用 IMU 预测位姿进行运动补偿 4.4 位姿配准部…

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试&#xff08;HTTP和HTTPS&#xff09; HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头&#xff08;Request Headers&#xff09;示例请求标头 响应标头&#xff08;Response Header…

【Excel超实用,VLOOKUP函数,通过excel数据精准匹配,将一个excel文件的某列数据,用另一个excel文件快速填充】

1、使用背景 如下图1所示&#xff0c;1.xlsx文件&#xff0c;有两列数据&#xff0c;一列序号&#xff0c;一列内容&#xff0c; 我现在需要将第二列的内容快速完成填充&#xff0c;并且有相应的excel模板作为参照。 图1 如图2所示&#xff0c;2.xlsx是模板文件&#xff0c;序…

FastExcel 新一代的潮流 (EasyExcel)

目录 简介 FastExcel的特点 FastExcel使用方法详解 创建实体类和监听器 实现写入和读取功能 Excel转换为PDF 小结 FastExcel与EasyExcel的区别 结论 简介 FastExcel是由原EasyExcel作者在阿里巴巴宣布停止维护EasyExcel之后推出的升级版框架。它继承了EasyExcel的所有…

Transformer详解:Attention机制原理

前言 Hello&#xff0c;大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;本系列文章是作者参加DataWhale2025年1月份学习赛&#xff0c;旨在讲解Transformer模型的理论和实践。&#x1f632; 本文将详细探讨Attention机制的原理…

Android 11适配全攻略:从理论到实践

随着Google正式发布Android 11&#xff0c;开发者们迎来了新的挑战和机遇。Android 11不仅带来了全新的用户体验和功能提升&#xff0c;还要求开发者们对应用进行相应的适配&#xff0c;以确保应用的兼容性和稳定性。本文将从理论到实践&#xff0c;全面解析Android 11的适配攻…

python程序跑起来后,然后引用的数据文件发生了更新,python读取的数据会发生变化吗

在 Python 程序运行过程中&#xff0c;如果引用的数据文件被更新&#xff0c;程序能否读取到更新后的数据&#xff0c;取决于以下几个因素&#xff1a; 1. 是否动态读取文件 如果 Python 程序在运行过程中动态读取文件&#xff08;例如通过循环或定时机制反复打开文件读取&…

PyTorch使用教程(14)-如何正确地选择损失函数?

在机器学习和深度学习的广阔领域中&#xff0c;损失函数&#xff08;Loss Function&#xff09;扮演着至关重要的角色。它不仅是衡量模型预测结果与实际数据之间差异的关键指标&#xff0c;还是指导模型优化方向、影响最终性能的核心要素。选择合适的损失函数&#xff0c;对于提…

P1825 [USACO11OPEN] Corn Maze S 刷题笔记

P1825 [USACO11OPEN] Corn Maze S - 洛谷 | 计算机科学教育新生态 定义状态空间 结构体 精简代码 遇到多种情况判断不要全写进check里面 分开写 传送门是大写字母 A-z 其acll码值 是 65-90 我们将传送门代表的字母-65 就可以将其值映射到 0-26 从而存下相应的传送门坐标…

01设计模式(D3_设计模式类型 - D3_行为型模式)

目录 一、模版方法模式 1. 基本介绍 2. 应用案例一&#xff1a;豆浆制作问题 需求 代码实现 模板方法模式的钩子方法 3. View的draw&#xff08;Android&#xff09; Android中View的draw方法就是使用了模板方法模式 模板方法模式在 Spring 框架应用的源码分析 知识小…

Nginx在Linux中的最小化安装方式

1. 安装依赖 需要安装的东西&#xff1a; wget​&#xff0c;方便我们下载Nginx的包。如果是在Windows下载&#xff0c;然后使用SFTP上传到服务器中&#xff0c;那么可以不安装这个软件包。gcc g​&#xff0c;Nginx是使用C/C开发的服务器&#xff0c;等一下安装会用到其中的…

js截取video视频某一帧为图片

1.代码如下 <template><div class"box"><div class"video-box"><video controls ref"videoRef" preload"true"src"https://qt-minio.ictshop.com.cn:9000/resource-management/2025/01/08/7b96ac9d957c45a…

C++语言的数据库编程

C语言的数据库编程 一、引言 数据库是现代软件应用程序中不可或缺的一部分。随着数据量的不断增长&#xff0c;如何高效地存储、管理和查询数据成为了一个重要的问题。C作为一种高效的编程语言&#xff0c;其在数据库编程中的应用越来越广泛。从嵌入式系统到大型企业级应用&a…

nacos2.3.0 接入pgsql或其他数据库

首先尝试使用官方插件进行扩展&#xff0c;各种报错后放弃&#xff0c;不如自己修改源码吧。 一、官方解决方案 1、nocos 文档地址&#xff1a;Nacos 配置中心简介, Nacos 是什么 | Nacos 官网 2、官方解答&#xff1a;nacos支持postgresql数据库吗 | Nacos 官网 3、源码下载地…