如何进行OceanBase 运维工具的部署和表性能优化
本文来自OceanBase 用户的实践分享
随着OceanBase数据库应用的日益深入,数据量不断攀升,单个表中存储数百万乃至数千万条数据的情况变得愈发普遍。因此,部署专门的运维工具、实施针对性的表性能优化策略,以及加强指标监测工作,都变得更为重要。以下为基于我们的使用场景,所采取的一些部署和优化措施分享。
一、OCP部署升级
1.OCP升级
(1)4.2.1BP1升级到4.2.2,本来以为毫无波澜但是下载完毕一键包并完成前期准备工作启动后发现无法登录OCP的服务器了,后台查看日志发现提示需要更新一下admin用户的权限,有小伙伴后续如果遇到密码正确就是无法通过监测的时候需要注意查看一下是不是提示admin账户权限不足使用echo "admin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers更新一下权限设置应该就好了。
(2)OCP升级进入系统以后系统自动更新ocpAgent代理工具但是,这个版本跟4.2.1一样存在ocpAgent安装异常(OCP升级服务于本服务在一个设备情况下ocpAgent会报stat /home/admin/ocp_agent/pkg_store/ocp-agent-ce-4.2.1-20231208144448.el7.x86_64.rpm: no such file or directory解决方案也比较简单直接复制这个文件到这个位置即可重试)
(3)随后是升级OBProxy集群节点到最新版本,一切都顺利完成后开始测试相关告警功能和测试新增的监控大盘功能和之前提交的(UI错位等问题的解决情况),测试后发现UI问题已经基本解决完毕,发现了一处新的UI问题已经提交。
2.ES部署及OCP接入
为了让日志能进行链路查询记录,需要部署ES和OpenSearch,使用docker按照官网教程部署了OpenSearch和ES并配置相关信息后重启OCP即可接入,接口查看ES的记录情况发现均无异.(配置地址:https://www.oceanbase.com/docs/common-ocp-1000000000584788)
二、警告配置和一些异常处置/性能优化
(1)部署完毕后第一个告警就是时间不同步,但是我通过chrony测试发现一切正常,ocpAgent查看监控数据NTP时钟便宜数据也是正常范围。
(2)将该问题以及相关日志提交到问答论坛后很快就有相关专业工程师解答并提出测试说明,通过测试发现Debian系列系统存在clockdiff在sudo下权限不足的问题,回复为已知问题,正在修复。于是听取建议我将这个告警进行了屏蔽。
(3)性能异常警告:当天晚上发现一个“SQL 巡检,SQL 性能下降”的问题,一早通过OCP查看后发现是一个SQL存在超过平均查询时间较多的情况的一个告警。但是点击SQLID无法跳转到SQL详细信息页面,查看F12发现不存在该资源。
(4)黑屏问题定位:通过黑屏模式查询[select svr_ip, plan_type, elapsed_time, AFFECTED_ROWS, RETURN_ROWS, tx_id, usec_to_time(REQUEST_TIME), substr(query_sql, 1, 10000) from gv$ob_sql_audit where sql_id='B7A34188E00F96CA660B2D39A3968328' order by elapsed_time desc limit 10;]找到了对应ID的SQL情况,使用该SQL到OCP对应租户的SQL诊断工具中搜索该SQL前部分关键词就获得了对应SQL请求信息。
(5)性能优化:通过查看索引情况以及字形情况以及针对SQLID进行链路查询发现了部分字段没有命中索引以及根据优化建议发现索引建立不足以及表设计不合理的三个问题。针对索引问题重新建立了索引。针对表设计不合理主要体现在当前表单为超大型表,数据量过千万,但是没有进行分区设计,也没有进行分段设计导致数据检索存在扫表情况,于是针对当前表进行了功能拆分划分了历时数据和热数据,历时数据清理到历史表并做分区处理,热数据存留当前表保障当前业务。
(6)SQLID无法连接异常提交:通过本次性能优化发现告警部分的SQLID无法被定位到SQL详情,通过后续查询后发现URL的[/diagnosis/1/realtime/2]这个部分应该为对应的集群和租户在当前环境下位[/cluster/1/tenant/2]修改后即可定位到SQL详情,发现该问题后就将相关问题通报到官方相关人员进行记录。
三、基于obdiag的一些集成化开发和畅想
1.obdiag是一个敏捷测试工具是ob官方的一个有效的集群日志收集和巡检的工具,在工作中可以提供异常建议以及指定脚本巡检等功能,在我的日常工作中也充当着重要的伙伴角色。
2.但是obdiag只有本地黑屏执行,配置文件也比较麻烦且报告也是用符号构成的,针对核心运维还好但是不可以进行任务分发到不同员工进行巡检基于该需求,我们计划开发一套带权限管理支持多人巡检,支持报告转换为Json并可视化的一套工具用于辅助多人运维的场景。
3.目前实现:
(1)已经完成报告的Json序列化实现,通过Go语言已经完成了报告的解析工作
(2)数据结构:
type Table struct {TableName stringColRows []TaskReport
}type TaskReport struct {Task stringTaskReport string
}
(3)报告解析:
func parseTable(input string) ([]Table, error) {lines := strings.Split(input, "\n")var table []Tablefor _, line := range lines {// 检查是否是表头行或分隔行if strings.HasPrefix(line, "+") {continue}// 按分隔符 "|" 分割cols := strings.Split(line, "|")if len(cols) < 3 {continue // 如果不是数据行,跳过}taskName := strings.TrimSpace(cols[1])taskReport := strings.TrimSpace(cols[2])// 如果是表名行,创建一个新的表if taskReport == "" {table = append(table, Table{TableName: taskName,})continue}// 如果是表头行,跳过if taskName == "task" && taskReport == "task_report" {continue}// 将提取的数据添加到切片中table[len(table)-1].ColRows = append(table[len(table)-1].ColRows, TaskReport{Task: taskName,TaskReport: taskReport,})}return table, nil
}
(4)通过上述方法我们成功实现了数据解析工作,后续将结合gin框架等一些框架实现数据入库和可视化操作并实现可视化脚本以及可视化巡检执行和可视化报告解析。
(5)秉承着OB社区氛围建立本项目在完成基本功能后将全面开源到Github并在社区进行发布。
四、一些OceanBase的使用感想和未来期待
1.OB是国产开源分布式数据库性能和部署以及开源社区氛围最好的选择,这也是我们正式项目的选择,在我们公司的CRM项目中已经稳定运行并使用了一年时间,其中版本从3.xx升级到现在的4.2.1BP4每一次升级都能感受到团队的努力付出以及听取社区的各种建议意见。
2.有浓厚的社区氛围才能使得一个开源产品能够有生命力,才能催生企业产品有更多的价值,相信OB在未来的道路上能越走越远。我们也愿意陪着OB一起成长,为社区添砖加瓦贡献自己的力量和智慧。
3.未来我们将引入更多系统接入到OB集群,计划将ERP系统以及其他管理业务系统引入OB并优化集群建立方式加强闪存集群的建设以及加强OOS二次备份的规则利用多一次的机会保障系统稳定安全。
相关文章:
如何进行OceanBase 运维工具的部署和表性能优化
本文来自OceanBase 用户的实践分享 随着OceanBase数据库应用的日益深入,数据量不断攀升,单个表中存储数百万乃至数千万条数据的情况变得愈发普遍。因此,部署专门的运维工具、实施针对性的表性能优化策略,以及加强指标监测工作&…...
docker简介-学习与参考
docker Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱…...
AcWing 蓝桥杯集训·每日一题2025·密接牛追踪2
密接牛追踪2 农夫约翰有 N 头奶牛排成一排,从左到右依次编号为 1∼N。 不幸的是,有一种传染病正在蔓延。 最开始时,只有一部分奶牛受到感染。 每经过一个晚上,受感染的牛就会将病毒传染给它左右两侧的牛(如果有的话…...
LeetCode 每日一题 2025/2/24-2025/3/2
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 2/24 1656. 设计有序流2/25 2502. 设计内存分配器2/26 1472. 设计浏览器历史记录2/27 2296. 设计一个文本编辑器2/28 2353. 设计食物评分系统3/1 131. 分割回文串3/2 132. …...
TeX Live 2025 最新版安装与中文环境配置全教程(Windows/Mac/Linux)
一、软件定位与特性 TeX Live 是由国际TeX用户组(TUG)维护的跨平台专业排版系统,支持LaTeX、XeLaTeX等多种排版引擎,广泛应用于学术论文、书籍出版等领域。2025版核心升级: 智能编译:自动检测编码错误并提…...
Android实现漂亮的波纹动画
Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果(波纹大小变化、画笔透明度变化、画笔粗细变化) 一、UI界面 界面主要分为三部分 第一部分:输入框,根据输入x轴、Y轴、Z轴倾…...
JAVA学习笔记038——bean的概念和常见注解标注
什么是bean? Bean 就是 被 Spring 管理的对象,就像工厂流水线上生产的“标准产品”。这些对象不是你自己 new 出来的,而是由 Spring 容器(一个超级工厂)帮你创建、组装、管理。 由 Component、Service、Controller 等注解标记的…...
自然语言处理NLP入门 -- 第十节NLP 实战项目 2: 简单的聊天机器人
一、为什么要做聊天机器人? 在互联网时代,我们日常接触到的“在线客服”“自动问答”等,大多是以聊天机器人的形式出现。它能帮我们快速回复常见问题,让用户获得及时的帮助,并在一定程度上减少人工客服的压力。 同时&…...
【网络安全 | 渗透工具】小程序反编译分析源码 | 图文教程
未经许可,禁止转载。 本文仅供学习使用,严禁用于非法渗透测试,笔者不承担任何责任。 文章目录 1、下载Proxifier2、下载反编译工具unveilr3、寻找小程序文件包4、对文件包进行反编译5、对源码进行分析6、渗透思路6.1、查找敏感信息泄露6.2、解析加解密逻辑6.3、枚举 API 接口…...
uniapp 系统学习,从入门到实战(六)—— 样式与布局
全篇大概 4700 字(含代码),建议阅读时间 30min 📚 目录 Flex 布局在 UniApp 中的应用响应式设计与适配多端使用 SCSS 提升样式开发效率实战案例演示总结 1. Flex 布局在 UniApp 中的应用 1.1 基础布局实现 通过 display: flex 快速构建弹性容器&#…...
‘ts-node‘ 不是内部或外部命令,也不是可运行的程序
新建一个test.ts文件 let message: string = Hello World; console.log(message);如果没有任何配置的前提下,会报错’ts-node’ 不是内部或外部命令,也不是可运行的程序。 此时需要安装一下ts-node。 npm install...
mysql 全方位安装教程
下载 MySQL 【官网下载地址】 注意要选择较大的哪个安装包,小的安装包是一个安装器。 我们不用登录,直接下载 直接运行下载好的安装包 MySQL如果是 安装包安装, 可以图形化界面自主配置 如果是压缩包解压, 可以配置 配置文件, 可以解压安装到指定的…...
22-接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 方法一:双指针法 思路 使用两个指针 left 和 right 分别指向数组的两端,同时记录左边的最大高度 leftMax 和右边的最大高度 rig…...
使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成
使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成 在现代企业级应用开发中,处理多个数据源是一个常见的需求。本文将详细介绍如何使用Spring Boot结合达梦数据库(DM),并通过MyBatis Plus来简化数据库操作&…...
leetcode28 找出字符串第一个匹配值的下标 KMP算法
KMP 算法——快速的从主串中找到模式串 当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。 KMP 算法 比较指针不回溯,仅仅是后移模式串。 每次不匹配的时候,找之前已匹配部分…...
【Bug】natten:安装报错(临近注意力机制的高效cuda内核实现)
正常安装natten报错 pip install natten 报错 可以尝试使用以下网站进行安装 https://shi-labs.com/natten/ 可以根据自己的cuda与pytorch版本进行安装 之间复制命令即可,不需要进行任何修改...
AI 实战2 - face -detect
人脸检测 环境安装源设置conda 环境安装依赖库 概述数据集wider_face转yolo环境依赖标注信息格式转换图片处理生成 train.txt 文件 数据集展示数据集加载和处理 参考文章 环境 安装源设置 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/f…...
Spring Boot 项目开发流程全解析
目录 引言 一、开发环境准备 二、创建项目 三、项目结构 四、开发业务逻辑 1.创建实体类: 2.创建数据访问层(DAO): 3.创建服务层(Service): 4.创建控制器层(Controller&…...
从Java到MySQL8源码:深入解析PreparedStatement参数绑定与执行机制
引言 在数据库开发中,PreparedStatement(预处理语句)是防止SQL注入、提升性能的重要工具。它通过分离SQL结构与参数值,不仅增强了安全性,还能利用预编译优化执行效率。本文将从Java JDBC驱动和MySQL 8源码的双重视角&…...
mysql的主从同步
1、异步复制:这是MySQL默认的复制模式。在这种模式下,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理。这种模式的优点是实现简单,但缺点是如果主库崩溃,已经提交的事务可能…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
