OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期
数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,SQL 语言是应用与数据库系统之间“沟通”的桥梁,它负责将应用的指令传达给数据库。因此,SQL 的性能好坏直接决定了这种“沟通”的效率,进而对系统的用户响应时间、系统吞吐量以及IT设置成本等关键指标产生影响。
那么,什么是 SQL 诊断与调优?
SQL 诊断就是通过一些技术手段来找出“沟通”效率不高的原因或潜在影响“沟通”效率的因素,比如发现执行性能不佳的 SQL、可能存在性能瓶颈的 SQL 等。而 SQL 调优则是通过一系列的技术手段,来提高 SQL 的执行效率,解决 SQL 的性能瓶颈,从而达到提高应用与数据库“沟通”效率的目的。
《DBA 从入门到实践》第七期将在5月22日(周三)如期而至,为大家讲解:
- ODP(OceanBase Database Proxy) SQL 路由原理。
- 如何分析 SQL 监控视图。
- 如何阅读和管理 OceanBase SQL 执行计划。
- 最常见的 SQL 调优方式。
- SQL 性能问题的典型场景和排查思路。
点击下方链接报名学习
【DBA从入门到实践】第七期
内容抢“鲜”知
(一)ODP 路由原理
路由是 OceanBase 分布式数据库中的一个重要功能,是分布式架构下,实现快速访问数据的利器。
Partition 是 OceanBase 数据存储的基本单元。当我们创建一张 Table 时,就会存在表和 Partition 的映射。非分区表中,不考虑主备时,一张 Table 对应一个 Partition;分区表中一个 Table 会对应多个 Partition。
路由实现了根据 OBServer 的数据分布精准访问到数据所在的机器,还可以根据一定的策略将一致性要求不高的读请求发送给副本机器,充分利用机器的资源。路由选择输入的是用户的 SQL、用户配置规则、OBServer 状态,路由选择输出的是一个可用 OBServer 地址。
其路由实现逻辑如下图所示:

(二)分析 SQL 监控视图
OceanBase 数据库 V4.x 版本中有着非常丰富的视图,通过这些视图可以获取 OceanBase 集群各种数据库对象的基本信息和实时状态信息。这些视图分为两大类:数据字典视图和动态性能视图。
丰富的视图展示了 OceanBase 数据库的内部架构及系统运行的详细状态。通过视图,我们可以便捷地查看 OceanBase 数据库的系统组成及实时状态,了解组件之间的关系,内部视图是学习 OceanBase 数据库的最好途径之一,其相应的数据字典视图见下图。

监控指标相关的数据来源于 OceanBase 数据库内部的动态性能视图,所有监控指标都可以通过 SQL 语句进行访问。动态性能视图分为 GV$ 视图和 V$ 视图,外部监控系统(例如 OCP)通过在每个数据库服务器上部署代理进程,通过 SQL 接口定期拉取本机上的监控信息(V$ 视图),部分全局信息(例如 Root Service 相关)通过中心节点采集。监控数据统一汇报给监控系统数据库,并按照各种维度聚合(集群维度、租户维度、节点维度、Unit 维度),从而构建整个监控大盘。
(三)如何阅读和管理 OceanBase SQL 执行计划
执行计划(Execution Plan)是对一条 SQL 查询语句在数据库中执行过程的描述。用户可以通过 EXPLAIN 命令查看优化器针对指定 SQL 生成的逻辑执行计划。如果要分析某条 SQL 的性能问题,通常需要先查看 SQL 的执行计划,排查每一步 SQL 执行是否存在问题。因此,读懂执行计划是 SQL 优化的先决条件,而了解执行计划的算子是理解 EXPLAIN 命令的关键。
(四)最常见的 SQL 调优方式
当用户已经学习完如何通过 EXPLAIN 命令查看优化器针对 SQL 生成的逻辑执行计划,以及如何通过 Hint 和 Outline 来人为控制优化器的行为,使优化器生成指定的计划。就可以以上述内容为基础,继续了解 OceanBase SQL 性能调优中最基础的内容:第一部分是统计信息和计划缓存的介绍,第二部分是 OceanBase 数据库的使用者需要了解的几种性能调优手段。
(五)SQL 性能问题的典型场景和排查思路
当用户完成了如何阅读和管理 SQL 的执行计划,以及常见的几种 SQL 调优方式,就获得了学习这一小节的基础知识。当用户遇到由于 SQL 原因导致的性能问题时,一般可以通过以下几个步骤进行排查:
- 通过全链路追踪确认各阶段耗时占比,确认耗时长的阶段是什么?
- 如果上一步显示慢在 observer 模块,则可以通过 oceanbase.gv$ob_sql_audit 分析具体是 observer 内的什么阶段耗时长了?
- 如果上一步耗时长的阶段在执行阶段,则先根据上文的内容判断是否存在 buffer 表、大小账号、硬解析等问题?
- 如果上述问题均不存在,则需要通过 explain extended 展示的执行计划来分析优化器的估行和真实行数是否有巨大差距,如果有明显差距,则需要手动收集统计信息。否则就进一步考虑是需要创建更合适的索引、通过 hint 调整计划形态、通过 hint 调整并行度等。
在该小节中,首先会为大家展示上面排查步骤中提到的几个常被用于进行 SQL 性能问题分析的工具,然后介绍如何通过这几个工具找到 SQL 性能优化的方向,最后会对 SQL 调优的最典型的场景和常见问题进行一个汇总。
更多精彩内容请锁定5月22日《DBA从入门到实践》第七期~

相关文章:
OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期
数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,SQL 语言是应用与数据库系统之间“沟通”的桥梁,它负责将应用的指令传达给数据库。因此,SQL 的性能好坏直…...
C++之std::is_trivially_copyable(平凡可复制类型检测)
目录 1.C基础回顾 1.1.平凡类型 1.2.平凡可复制类型 1.3.标准布局类型 2.std::is_trivially_copyable 2.1.定义 2.2.使用 2.3.总结 1.C基础回顾 在C11中,平凡类型(Trivial Type)、平凡可复制类型(TrivialCopyable&#x…...
宝石收集,tarjan
0宝石收集 - 蓝桥云课 (lanqiao.cn) nint(input()) s0input() mint(input()) mp[[] for i in range(n1)] for i in range(m):a,bmap(int,input().split())a1b1mp[a].append(b)import sys sys.setrecursionlimit(100000000) dfn[0 for i in range(n1)] low[0 for i in range(n1…...
python 面对对象 类 继承
继承 继承就是为了解决两个有大量重复性代码的类,抽象出一个更抽象的类放公共代码,主要是代码复用,方便代码的管理与修改 类的继承包括属性和方法,私有属性也可继承 class Person(): # 默认是继承object超类pass…...
Rust腐蚀怎么用服务器一键开服联机教程
1、进入控制面板 首次登陆需要点击下方重置密码,如何再点击登录面板,点击后会跳转到登录页面,输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口,它们用于游戏端口(必须为首选端口)&a…...
公共代理IP和独享代理IP之间的区别?
公共代理IP和独享代理IP在网络应用中扮演着不同的角色,它们之间的区别主要体现在使用方式、性能、安全性以及隐私保护等方面。以下是对这两种代理IP的详细对比和分析。 第一点就是使用的方式以及成本上的不同,公共代理IP,顾名思义࿰…...
基于Vue的前端自定义询问弹框与输入弹框组件的设计与实践
基于Vue的前端自定义询问弹框与输入弹框组件的设计与实践 摘要 随着技术的不断进步,前端开发面临越来越多的挑战,其中之一就是如何有效管理复杂的业务逻辑和用户体验。传统的整块应用开发方式在面对频繁的功能变更和用户体验优化时,往往显得…...
淘宝订单系统ERP中如何接入平台订单信息?(订单API)
淘宝开放平台中有交易API,里面有各种关于交易的API接口。但是申报应用权限的审核流程严格又漫长。不少公司费时费力的申请后,结果还是没有审批下来。 调用淘宝自定义接口custom,可以实现淘宝开放平台API的调用。技术人员会根据您需要的接口做…...
在Spring Boot项目中集成和使用MQTT
在物联网(IoT)应用中,MQTT(消息队列遥测传输)协议因其轻量级和高效性被广泛使用。在Spring Boot项目中,我们可以通过集成org.springframework.integration:spring-integration-mqtt依赖来实现对MQTT的支持。…...
14、设计模式之访问者模式
访问者模式 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元…...
Excel如何换行不换格
在换行的字之间 按住Alt 回车...
Elasticsearch 8.1官网文档梳理 - 十五、Aggregations(聚合)
Aggregations ES 的聚合可以总结为三类:指标聚合、统计聚合、其他分析聚合。 Metric aggregations: 计算 field 的指标值,例如平均值、最大值、和等指标Bucket aggregations: 基于 field 的值、范围、或其他标准对 doc 分类&…...
计算机系统概论
目录 1. 计算机的分类 2. 计算机的发展简史 3. 计算机的硬件 1. 处理器(CPU) 2. 内存(Memory) 3. 存储设备 4. 输入输出设备 4. 计算机的软件 1. 软件的分类 1.1 系统软件 1.2 应用软件 2. 软件的特点 3. 软件开发 4…...
【Vue】diff 算法
diff的时机 当组件创建时,以及依赖的属性或数据变化时,会运行一个函数,该函数会做两件事: 运行_render生成一棵新的虚拟dom树(vnode tree),返回根节点运行_update,传入虚拟dom树的根节点,对新旧…...
Spring Boot 3.x 与 Spring Boot 2.x 的对比
Spring Boot 是 Java 开发领域的一个重要框架,它简化了基于 Spring 的应用开发。随着版本的不断更新,Spring Boot 提供了更多功能、更好的性能以及更简洁的配置。本文将详细对比 Spring Boot 3.x 和 Spring Boot 2.x,探讨它们之间的主要区别和…...
SSLError ClosedPoolError
分析日志 从您提供的日志文件内容来看,存在几个明显的问题导致了实例无法创建: SSL证书验证失败:日志中多次出现SSLError(SSLError(1, [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:897)),)错误。这表明客户端在尝试…...
勒索软件分析_Conti
0. Conti介绍 勒索软件即服务(Ransomware as a Service,RaaS)变体 Conti 推出还不到两年,已经进行了第七次迭代。Conti被证明是一种敏捷而熟练的恶意软件威胁,能够自主和引导操作,并具有无与伦比的加密速度…...
Linux系统如何通过编译方式安装python3.11.3
1.切换到/data 目录 cd /data 2.下载python源码Python-3.11.3.tgz wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz tar -xzf Python-3.11.0.tgz cd Python-3.11.3 3.配置python的安装路径 和 执行openssl的路径 ./configure --prefix/usr/local/pyth…...
仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码
码名称:仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码 开发环境:帝国cms7.5 空间支持:phpmysql 仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码自动采集 - 我爱模板网源码名称:仿《Q极速体育》NBACBA体育直…...
代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点 、 面试题 02.07. 链表相交、142.环形链表II
24. 两两交换链表中的节点 题目链接: 24. 两两交换链表中的节点 文档讲解:代码随想录 状态:没做出来,没有正确更新头节点,因为head和cur共享引用,会随着cur的移动,丢失之前存放的节点 错误代码&…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
