一、前言
OceanBase和TiDB作为国内2款的比较流行的兼容MySQL协议的开源数据库使用者也越来越多,两种数据库不仅在架构原理上有较大差异,在开源方式上有较大的不同:
TiDB 采用的Apache License 2.0开源协议,其第一行代码提交就是在github上,和企业版相比社区版只是不包含访问白名单和审计2个插件功能,其他与企业版完全相同且同步发版(之前闭源的tiflash也于2022.4.1完全开源)。
OceanBase社区版采用国内的木兰公共协议 MulanPubL-2.0开源,官方划分成社区版、云服务版、企业版三种类型,开源的社区版与企业版相比存在较多功能缺失或性能降低(如目前对比版本不支持oracle兼容、不支持闪回、不支持analyze语句、ocp不支持备份功能等),且社区版本版发布与企业版不同步。另外ob的文档和资源相比较tidb还不够完善和丰富。
本文针对tidb、oceanbase在执行计划的相关内容进行粗浅的对比,也对学习做个总结,对比版本为OceanBase3.1.2-CE(2022-03-29发版 )、TiDB v5.2.3(2021-12-31发版)
二、查看执行计划
-
TiDB:
(1) explain SQL方式:该方式只是展示可能的执行计划并非实际的执行计划,目前各数据库都存在此问题使用explain方式并不是真正SQL执行时的计划,少数情况下会存在不一致。
(2) explain analyze方式:该方式会真正执行SQL并展示执行时的执行计划,执行计划中增加实际的执行信息包括实际返回行数、各算子时间和调用及资源消耗等。
(3) select tidb_decode_plan()方式: tidb的慢SQL日志里会以hash值方式记录慢SQL的执行计划,然后使用tidb_decode_plan()函数即可解析。
(4) dashboard查看:tidb的PD组件包含dashboard功能,慢SQL、SQL统计页面可以查看每个SQL的执行计划
-
OceanBase:
(1) explain SQL方式:包含BASIC、OUTLINE、EXTENDED、EXTENDED_NOADDR、PARTITIONS、FORMAT = {TRADITIONAL| JSON}多个展示选项,除了extended方式大部分情况展示的内容基本一致,extended方式时会增加hint、outline、plan type、optimizerinfo等信息。
(2) 使用系统视图方式:oceanbase在实现上一直努力方便oracle dba使用,通过v$plan_cache_plan_explain/ v$plan_cache_plan_stat等视图可以查看执行计划及算子的执信息(如行数、时间等),类似oracle的v$sql、v$sql_plan等视图
(3) 因未部署ob 图形化管理平台ocp,因此未看SQL执行计划的页面展示。
三、执行计划内容
-
TiDB:
TiDB的执行计划展示与oracle类似,以缩进的方式展示算子间的层次关系,同时使用折线进行算子连接展示,当SQL复杂执行步骤较多时可以很明显看出处于同一缩进深度的算子,explian方式下执行计划包括算子信息(id列)、预估行数(estRows列),访问对象(access object列)、过滤条件和操作信息(operator info列)
使用explain analyze或查看慢SQL中记录的执行计划时还包括每个算子实际的返回行数(actRows列)、算子的执行时间和分布统计(execution info列)、内存占用(memory)、磁盘读(dsik)
execution info列展示的内容如下:
tikv_task:{proc max:640ms, min:120ms, p80:260ms, p95:470ms, iters:4859, tasks:27}, scan_detail: {total_process_keys: 4861956, tota |