OceanBase SQL性能分析方法

文章详细阐述了OceanBase数据库中的SQL执行流程,包括执行计划、基表计划、索引选择及其影响因素,如B-tree索引的使用和回表操作。同时,讨论了如何衡量索引执行时间和选择最佳连接路径。此外,还介绍了SQL性能定位和优化的方法,如通过gv$sql_audit进行状态分析,以及plan_cache的相关表格在优化过程中的作用。
摘要由CSDN通过智能技术生成


1、OceanBase SQL执行流程

111
在这里插入图片描述

1.1 执行计划

在这里插入图片描述

1.2 基表计划

在这里插入图片描述

1.3 索引选择

  • 索引(目前只有B-tree索引)
    • create table test(a int primary key, b int, c int, key idx_b(b));
    • 索引键会自动补上主键, 为了回表,Oracle使用物理Rowid回表
    • 无主键表,Oceanbase内部会有自增ID
  • 索引的三个优势
    • 快速定位(根据索引列条件), 减少数据扫描
    • 索引列是有序的, 消除排序
    • 索引一般比主表小(引入的问题是回表,其实这是劣势)
    • OceanBase主表本身也可以看做是索引
  • 快速定位(query range): 减少数据扫描量
    • Query range: 用来定位扫描开始和结束的位置
create table test(a int primary key, b int, c int, d int, key idx_b_c(b,c));
explain extended select/*+index(test idx_b_c)*/ * from test where b = 1;
explain extended select/*+index(test idx_b_c)*/ * from test where b > 1;
explain extended select/*+index(test idx_b_c)*/ * from test where b = 1 and c > 1;
explain extended select/*+index(test idx_b_c)*/ * from test where b > 1 and c > 1 ;
explain extended select/*+index(test idx_b_c)*/ * from test where b >= 1 and c > 1 ;

在这里插入图片描述

  • 索引列有序: 消除排序
    在这里插入图片描述
  • 索引:一般比主表小
  • 比主表小优势: 减少数据扫描量
    • explain select count(*) from t1
    • 选择列数最少的索引(数据量最小的索引)
  • 比主表小劣势: 可能需要回表
    在这里插入图片描述

1.4 如何衡量一个索引的执行时间

  • 索引的执行时间

    • 扫描索引的时间(由扫描的数据行数决定, i.e. query range)
    • 索引回表的时间(由需要回表的数据行数决定)
    • 假设基表有1w行数据
      • b=1(1k), b = 1 and c = 1(100行), b = 1 and d = 1(100行)

在这里插入图片描述

  • 线上环境如何获取这些信息: 执行select count(*)

在这里插入图片描述

1.5 连接路径和连接算法

在这里插入图片描述

  • 连接算法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、常用的SQL性能定位和优化方法

2.1 Oceanbase.gv$sql_audit

  • 记录了sql每次执行的状态信息
  • 需要了解sql audit中记录的每一个字段的含义
    • retry_cnt: 太多基本上就是锁冲突
    • queue time: 很高表明CPU资源不够用
  • 可以关闭sql audit 供当前分析
    • alter system set enable_sql_audit = false;

在这里插入图片描述

2.2 分析关闭之后的Sql Audit

在这里插入图片描述

2.3 gv$plan_cache_plan_stat

  • 记录了每个计划的信息
  • 每日合并会触发计划淘汰,这个表会被更新
  • 可以通过该表找到Top-SQL

2.4 gv$plan_cache_plan_explain

  • 记录了具体的计划信息
  • 需要提供四元组(tenant_id, ip, port, plan_id)

在这里插入图片描述

2.5 Explain和plan-cache-plan-explain关系

  • Explain不走plan-cache,使用最新的统计信息生成计划
  • Plan-cache-plan-explain缓存的是第一次优化给SQL时候生成的计划
  • 对于同一条SQL,Explain和Plan-cache-plan-explain的计划可能是不一样
    • 生成计划的时候的统计信息不一致
    • 生成计划的时候表的分布可能不一致
  • 分析慢查询的时候,以plan-cache-plan-explain的为准
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值