OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

news2024/11/16 22:32:20

数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,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 地址。

其路由实现逻辑如下图所示:

1715853371

(二)分析 SQL 监控视图

OceanBase 数据库 V4.x 版本中有着非常丰富的视图,通过这些视图可以获取 OceanBase 集群各种数据库对象的基本信息和实时状态信息。这些视图分为两大类:数据字典视图和动态性能视图。

丰富的视图展示了 OceanBase 数据库的内部架构及系统运行的详细状态。通过视图,我们可以便捷地查看 OceanBase 数据库的系统组成及实时状态,了解组件之间的关系,内部视图是学习 OceanBase 数据库的最好途径之一,其相应的数据字典视图见下图。

1715853382

监控指标相关的数据来源于 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 原因导致的性能问题时,一般可以通过以下几个步骤进行排查:

  1. 通过全链路追踪确认各阶段耗时占比,确认耗时长的阶段是什么?
  2. 如果上一步显示慢在 observer 模块,则可以通过 oceanbase.gv$ob_sql_audit 分析具体是 observer 内的什么阶段耗时长了?
  3. 如果上一步耗时长的阶段在执行阶段,则先根据上文的内容判断是否存在 buffer 表、大小账号、硬解析等问题?
  4. 如果上述问题均不存在,则需要通过 explain extended 展示的执行计划来分析优化器的估行和真实行数是否有巨大差距,如果有明显差距,则需要手动收集统计信息。否则就进一步考虑是需要创建更合适的索引、通过 hint 调整计划形态、通过 hint 调整并行度等。

在该小节中,首先会为大家展示上面排查步骤中提到的几个常被用于进行 SQL 性能问题分析的工具,然后介绍如何通过这几个工具找到 SQL 性能优化的方向,最后会对 SQL 调优的最典型的场景和常见问题进行一个汇总。 

更多精彩内容请锁定5月22日《DBA从入门到实践》第七期~

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

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

相关文章

SHAP值加持医学独立危险因素鉴定分析

SHAP值加持医学独立危险因素鉴定分析 医学独立危险因素鉴定是医学数据分析中的重要形式,旨在从众多临床因素中识别出对临床结局产生重大影响的因素,并通过干预这些因素来改善临床结果。例如,通过识别吸烟是肺癌的危险因素,倡导戒…

【数学代码】求两点之间的距离

Hello!大家好,今天讲讲求两点之间的距离。 已知点A的坐标为(x1,y1),点B的坐标为(x2,y2),求两点之间的直线距离。 首先,我先讲明,要解决这个问题,需要用到勾…

信息学奥赛初赛天天练-12-数论-整除问题

更多资源请关注纽扣编程微信公众号 整除的性质 1 整除性 若 𝑎 和 𝑏 都为整数, 𝑎 整除 𝑏 是指 𝑏 是 𝑎 的倍数,𝑎 是 𝑏 的约数(或者叫 因…

在线软件包管理

1.APT工作原理 APT(Advanced Packaging Tool)是Debian系列Linux操作系统中广泛使用的包管理工具,它为用户提供了从软件仓库搜索、安装、升级和卸载软件包的功能。其工作原理具体分析如下: 1. **集中式软件仓库机制**&#xff1a…

Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式 MVVM全称:Model、View、ViewModel; Model:负责数据的请求、解析、过滤等数据层操作,其中Repository: 提供数据的 API(从本地或者网络)。View:负责视图部分展示Vie…

可以通过哪些方式邀请媒体报道宣传?

在我个人的职业生涯中,曾经历过一段为了公司新产品的推广,而独自踏上了寻找媒体曝光机会的征途。这段经历至今仍历历在目,它不仅是一段挑战自我的过程,也是我深刻理解到传统媒体联系方式局限性的重要转折点。 起初,我满怀激情地决定通过直接联系媒体来获取免费的宣传机会。我天…

Java进阶学习笔记26——包装类

包装类: 包装类就是把基本类型的数据包装成对象。 看下API文档: deprecated:极力反对、不赞成的意思。 marked for removal:标识为去除的意思。 自动装箱:基本数据类型可以自动转换成包装类。 自动拆箱:…

Flutter仿照微信实现九宫格头像

一、效果图 2、主要代码 import dart:io; import dart:math;import package:cached_network_image/cached_network_image.dart; import package:flutter/material.dart;class ImageGrid extends StatelessWidget {final List<String> imageUrls; // 假设这是你的图片URL…

echarts-地图

使用地图的三种的方式&#xff1a; 注册地图(用json或svg,注册为地图)&#xff0c;然后使用map地图使用geo坐标系&#xff0c;地图注册后不是直接使用&#xff0c;而是注册为坐标系。直接使用百度地图、高德地图&#xff0c;使用百度地图或高德地图作为坐标系。 用json或svg注…

Kubernetes集群上的Etcd备份和恢复

在本教程中&#xff0c;您将学习如何在Kubernetes集群上使用etcd快照进行etcd备份和恢复。 在Kubernetes架构中&#xff0c;etcd是集群的重要组成部分。所有集群对象及其状态都存储在etcd中。为了更好地理解Kubernetes&#xff0c;有几点关于etcd的信息是您需要了解的。 它是…

C++学习笔记(19)——模板

目录 模板参数与非类型模板参数 模板参数 类型模板参数——传递类型 非类型模板参数——传递数量 C11希望array替代静态数组&#xff0c;但实际上vector包揽了一切 模板总结 优点&#xff1a; 缺点&#xff1a; 模板特化&#xff1a;针对某些类型进行特殊化处理 特化…

网页出现为了更好的体验,请将手机竖过来

前言 网站:https://act.xinyue.qq.com/commercial/act/af93dc75d9fc541d4833f05e98a9f54b6pre/index.html 发现必须要手机端才可以,否则显示"为了更好的体验,请将手机竖过来"的提示信息 很好奇怎么做的,UA?发现更改UA后依旧显示,后面看代码就知道了 可以看到是通过…

C++STL---string知识汇总

前言 我们现在开始CSTL的学习&#xff0c;从这时开始我们就要锻炼自己查看英文文档的能力&#xff0c;每种数据结构都有上百个接口函数&#xff0c;我们把他们全部记下来是不可能的&#xff0c;所以我们只记最常见的20几个接口&#xff0c;其他的大概熟悉有什么功能&#xff0…

Vulhub——CAS 4.1、AppWeb、apisix

文章目录 一、Apereo CAS 4.1&#xff08;反序列化命令执行漏洞&#xff09;二、CVE-2018-8715&#xff08;AppWeb认证绕过漏洞&#xff09;三、apisix3.1 CVE-2020-13945(默认密钥漏洞&#xff09;3.2 CVE-2021-45232&#xff08;Dashboard API权限绕过导致RCE&#xff09; 一…

基于长短期记忆网络 LSTM 的送餐时间预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

纯电动汽车硬件在环测试

纯电动汽车硬件在环测试技术研究综述 1、新能源汽车概述 随着新能源汽车“电动化、智能化、网联化、共享化”进程的不断推进&#xff0c;新能源汽车的整体性能得到显著提高&#xff0c;纯电动汽车已经逐渐走进大众视野&#xff0c;消费者对于新能源汽车的认可度和购买欲望也稳…

HCIP的学习(22)

BGP优化 [r1-bgp]peer 12.0.0.2 default-route-advertise ---BGP下放缺省路由&#xff0c;无论本地的路由表中是否存在缺省路由&#xff0c;都会向对等体下发一条下一跳为本地的缺省路由&#xff0c;从而减少网络中路由数量&#xff0c;节省对等体的设备资源 BGP协议优先级 缺…

【Linux】Linux的基本指令_2

文章目录 二、基本指令8. man9. nano 和 cat10. cp11. mv12. echo 和 > 和 >> 和 <13. more 和 less14. head 和 tail 和 | 未完待续 二、基本指令 8. man Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问…

JavaFX安装与使用

前言 最近学习了javafx,开始时在配置环境和导包时遇到了一些麻烦,关于网上很多方法都尝试过了,现在问题都解决了,和大家分享一下我是怎么实现javafx的配置,希望大家可以通过这个方法实现自己的环境配置! &#x1f648;个人主页: 心.c &#x1f525;文章专题:javafx &#x1f49…

【linux】多线程(2)

文章目录 线程的应用生产消费者模型自制锁生产消费队列成员参数生产函数消费函数 任务处理方式主函数 POSIX信号量sem_wait()sem_post() 线程池应用场景示例 单例模式饿汉实现单例 吃完饭, 立刻洗碗, 这种就是饿汉方式. 因为下一顿吃的时候可以立刻拿着碗就能吃饭.懒汉实现单例…