基于Benchmark查看OceanBase执行计划

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

    • 📣 1.BenmarkSQL
      • ✨ 1.BenmarkSQL介绍
      • ✨ 1.2 下载BenmarkSQL
    • 📣 2.OceanBase4.2 集群
      • ✨ 2.1 集群状态
      • ✨ 2.2 测试用户
    • 📣 3.配置文件修改
    • 📣 4.生成数据
    • 📣 5.创建索引
    • 📣 6.TPCC测试
    • 📣 7.TOP SQL分析
      • ✨ 7.1 查询TOP
      • ✨ 7.2 执行计划分析
    • 📣 8.报错分析
    • 📣 9.总结


本文详细介绍了OceanBase 的执行计划查看方法,包括 explain 命令和查看实际执行计划。

📣 1.BenmarkSQL

✨ 1.BenmarkSQL介绍

benchmarksql是一款符合TPC-C基准压力测试工具,TPC-C是衡量在线事务处理的基准。
TPC-C模型是模拟一个商品批发公司的销售模型,这个模型涵盖了一个批发公司面向客户对一系列商品进行销售的过程,这包括管理订单,管理库存,管理账号收支等操作。这些操作涉及到仓库、商品、客户、订单等概念,围绕这些概念,构造了数据表格,以及相应的数据库操作。

✨ 1.2 下载BenmarkSQL

注意:需要java环境,不低于1.8.0
[root@centos79 ~]# yum install git
[root@centos79 ~]# git clone https://github.com/obpilot/benchmarksql-5.0.git

[root@centos79 ~]# git clone https://github.com/obpilot/benchmarksql-5.0.git
Cloning into 'benchmarksql-5.0'...
remote: Enumerating objects: 110, done.
remote: Counting objects: 100% (110/110), done.
remote: Compressing objects: 100% (90/90), done.
remote: Total 110 (delta 14), reused 105 (delta 12), pack-reused 0
Receiving objects: 100% (110/110), 5.58 MiB | 89.00 KiB/s, done.
Resolving deltas: 100% (14/14), done.

📣 2.OceanBase4.2 集群

✨ 2.1 集群状态

1.启动 OceanBase 数据库
[root@centos79 ~]# su - admin
[admin@centos79 ~]$ obd cluster start obtest
obclient -h192.168.3.20 -P2881 -uroot -p’gxmxiv4fV6uKhJfgDktn’ -Doceanbase -A

2.查看集群状态
[admin@centos79 ~]$ obd cluster display obtest
Get local repositories and plugins ok
Open ssh connection ok
Cluster status check ok
Connect to observer 192.168.3.20:2881 ok
Wait for observer init ok
+------------------------------------------------+
|                    observer                    |
+--------------+---------+------+-------+--------+
| ip           | version | port | zone  | status |
+--------------+---------+------+-------+--------+
| 192.168.3.20 | 4.2.2.0 | 2881 | zone1 | ACTIVE |
+--------------+---------+------+-------+--------+
obclient -h192.168.3.20 -P2881 -uroot -p'gxmxiv4fV6uKhJfgDktn' -Doceanbase -AConnect to obproxy ok
+------------------------------------------------+
|                    obproxy                     |
+--------------+------+-----------------+--------+
| ip           | port | prometheus_port | status |
+--------------+------+-----------------+--------+
| 192.168.3.20 | 2883 | 2884            | active |
+--------------+------+-----------------+--------+
obclient -h192.168.3.20 -P2883 -uroot -p'gxmxiv4fV6uKhJfgDktn' -Doceanbase -A Trace ID: bb89c746-e33d-11ee-97f5-000c29377d62
If you want to view detailed obd logs, please run: obd display-trace bb89c746-e33d-11ee-97f5-000c29377d62

✨ 2.2 测试用户

–登陆租户
obclient -uroot@mq_t1 -h127.1 -P2883 -p123456 -A
obclient [(none)]> use oceanbase

–创建测试用户及数据库
obclient [oceanbase]> create database tpcc;
obclient [oceanbase]> create user tpcc identified by ‘123456’;
obclient [oceanbase]> grant all on . to tpcc;

–重新登陆
[admin@centos79 ~]$ obclient -utpcc@mq_t1 -h127.1 -P2883 -p123456 -A
obclient [(none)]> use tpcc

📣 3.配置文件修改

这个配置文件在/root/benchmarksql-5.0/run/目录下,编辑后的内容如下:
cat > /root/benchmarksql-5.0/run/props.ob <<“EOF”
db=oracle
driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
conn=jdbc:oceanbase://192.168.3.20:2883/tpcc?useUnicode=true&characterEncoding=utf-8
user=tpcc@mq_t1#obcluster
password=123456
warehouses=2
loadWorkers=1
terminals=10
runTxnsPerTerminal=0
runMins=1
limitTxnsPerMin=0
terminalWarehouseFixed=true
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
EOF

📣 4.生成数据

1.修改字段类型
sql文件在benchmarksql-5.0-master/run/sql.oceanbase中,
看了一些建表语句,使用了varchar2类型,ob为mysql模式,需要修改:

[root@centos79 ~]# find / -name sql.oceanbase
/root/benchmarksql-5.0/run/sql.oceanbase

[root@centos79 ~]# cd /root/benchmarksql-5.0/run/sql.oceanbase
[root@centos79 sql.oceanbase]# ll
-rwxr-xr-x. 1 root root 190 Mar 16 19:17 indexCreates.sql
-rwxr-xr-x. 1 root root 3719 Mar 16 19:17 tableCreates3.sql
-rwxr-xr-x. 1 root root 3593 Mar 16 19:17 tableCreates.sql
[root@centos79 sql.oceanbase]# cp tableCreates.sql tableCreates_bak.sql
[root@centos79 sql.oceanbase]# sed -i ‘s/varchar2/varchar/g’ tableCreates_bak.sql

2.运行创建表语句
[root@centos79 ~]# cd /root/benchmarksql-5.0/run
[root@centos79 run]# ./runSQL.sh props.ob sql.oceanbase/tableCreates_bak.sql

这里出了点小问题,这个脚本报找不到funcs.sh文件,应该是环境变量的问题,不过通过更改脚本中funcs.sh路径为绝对路径也可以解决这个问题:

编辑一下runSQL.sh文件,更改内容如下:#!/usr/bin/env bash# ----
# Check command line usage
# ----
if [ $# -ne 2 ] ; thenecho "usage: $(basename $0) PROPS_FILE SQL_FILE" >&2exit 2
fi# ----
# Load common functions
# ----
source /root/benchmarksql-5.0/run/funcs.sh $1SHARDING = 'NONE';

在这里插入图片描述

–加载数据
[root@centos79 run]# ./runLoader.sh props.ob
装载前防止有大事物,需要调整事务超时参数:
obclient [oceanbase]> show variables like ‘%timeout%’;
±--------------------±-----------------+
| Variable_name | Value |
±--------------------±-----------------+
| connect_timeout | 10 |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| ob_pl_block_timeout | 3216672000000000 |
| ob_query_timeout | 10000000 |
| ob_trx_idle_timeout | 86400000000 |
| ob_trx_lock_timeout | -1 |
| ob_trx_timeout | 86400000000 |
| wait_timeout | 28800 |
±--------------------±-----------------+

obclient [oceanbase]> set global ob_trx_timeout=864000000000;
obclient [oceanbase]> set global ob_query_timeout=864000000000;
说明:
1.运行脚本,装载数据,输出显示装载成功
2.运行脚本报错,记得删除中文描述即可

[root@centos79 run]# ./runLoader.sh props.ob

在这里插入图片描述

📣 5.创建索引

[root@centos79 run]# ./runSQL.sh props.ob sql.oceanbase/indexCreates.sql
# ------------------------------------------------------------
# Loading SQL file sql.oceanbase/indexCreates.sql
# ------------------------------------------------------------
create index bmsql_customer_idx1
on  bmsql_customer (c_w_id, c_d_id, c_last, c_first) local;
create  index bmsql_oorder_idx1
on  bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id) local;

📣 6.TPCC测试

[root@centos79 run]# ./runBenchmark.sh props.ob

在这里插入图片描述

📣 7.TOP SQL分析

✨ 7.1 查询TOP

obclient [tpcc]> show variables like ‘%enable_sql_audit%’;
±--------------------±------+
| Variable_name | Value |
±--------------------±------+
| ob_enable_sql_audit | ON |
±--------------------±------+

SELECT sql_id, count(*),round(avg(elapsed_time)) avg_elapsed_time,
round(avg(execute_time)) avg_exec_time,
s.svr_ip,
s.svr_port,
s.tenant_id,
s.plan_id
FROM oceanbase.GV$OB_SQL_AUDIT s
WHERE 1=1
and user_name=‘tpcc’
and request_time >= time_to_usec(DATE_SUB(current_timestamp, INTERVAL 200 MINUTE) )
GROUP BY sql_id
order by avg_elapsed_time desc limit 10;

在这里插入图片描述

✨ 7.2 执行计划分析

select distinct query_sql from oceanbase.GV$OB_SQL_AUDIT where sql_id='7229213613983BC5FDA15AD11EC70D01';+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| query_sql                                                                                                                                                                                                                                |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SELECT s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04,s_dist_05, s_dist_06, s_dist_07, s_dist_08,s_dist_09, s_dist_10   FROM bmsql_stock     WHERE s_w_id = 1 AND s_i_id = 97744     FOR UPDATE |
| SELECT s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04,s_dist_05, s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10    FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 10652     FOR UPDATE |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.068 sec)实际执行计划SELECT SVR_IP, plan_depth, plan_line_id,operator,name,rows,cost,property from GV$OB_PLAN_CACHE_PLAN_EXPLAIN
where tenant_id=1002 AND SVR_IP = '192.168.3.20' 
AND svr_port=2882 AND plan_id=681\G;*************************** 1. row ***************************ip: 127.0.0.1plan_depth: 0plan_line_id: 0operator: PHY_TABLE_SCANname: bmsql_stockrows: 9cost: 248249property: table_rows:86530, physical_range_rows:200159, logical_range_rows:86530, index_back_rows:0, output_rows:8, est_method:local_storage, avaiable_index_name[bmsql_stock], estimation info[table_id:1100611139453798, (table_type:1, version:0-1-1, logical_rc:0, physical_rc:0), (table_type:7, version:1-1643245354224215-1643245354224215, logical_rc:0, physical_rc:96654), (table_type:0, version:1643245354224215-1643245354224215-9223372036854775807, logical_rc:86530, physical_rc:103505)]1 row in set (0.013 sec)ERROR: No query specified  解释执行计划*************************** 1. row ***************************Query Plan: ============================================|ID|OPERATOR  |NAME       |EST. ROWS|COST  |--------------------------------------------|0 |TABLE SCAN|bmsql_stock|9        |248250|============================================Outputs & filters:-------------------------------------0 - output([bmsql_stock.s_quantity], [bmsql_stock.s_data], [bmsql_stock.s_dist_01], [bmsql_stock.s_dist_02], [bmsql_stock.s_dist_03], [bmsql_stock.s_dist_04], [bmsql_stock.s_dist_05], [bmsql_stock.s_dist_06], [bmsql_stock.s_dist_07], [bmsql_stock.s_dist_08], [bmsql_stock.s_dist_09], [bmsql_stock.s_dist_10]), filter([bmsql_stock.s_w_id = 2], [bmsql_stock.s_i_id = 10652]),access([bmsql_stock.s_w_id], [bmsql_stock.s_i_id], [bmsql_stock.s_quantity], [bmsql_stock.s_data], [bmsql_stock.s_dist_01], [bmsql_stock.s_dist_02], [bmsql_stock.s_dist_03], [bmsql_stock.s_dist_04], [bmsql_stock.s_dist_05], [bmsql_stock.s_dist_06], [bmsql_stock.s_dist_07], [bmsql_stock.s_dist_08], [bmsql_stock.s_dist_09], [bmsql_stock.s_dist_10]), partitions(p0)1 row in set (0.016 sec)ERROR: No query specified![      ](/Users/mac/Library/Application Support/typora-user-images/image-20240316002639580.png)

📣 8.报错分析

1.TPCC测试以下报错处理
20:17:55,307 [main] ERROR jTPCC : Term-00, Invalid number of terminals! Usage: 15MB / 178MB
props.ob文件里设置的需要满足:
1.文件的所有注释和多余空格删除,否则可能报错
2.0<Terminals num<=10* Warehouses num

生成数据拨错处理
./runSQL.sh props.ob sql.oceanbase/tableCreates_bak.sql
You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘“tpcc_group”’ at line 1
原因为OB4.2版本影响导致语法的错误
create tablegroup “tpcc_group” 变更为:
create tablegroup tpcc_group";

📣 9.总结

通过本文的学习,可以帮助大家掌握 OceanBase 的执行计划查看方法,包括 explain 命令和查看实际执行计划。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2013 - 调试模式下查看监视窗口

Visual Studio 2013 - 调试模式下查看监视窗口 1. 监视窗口References 1. 监视窗口 Ctrl Alt W&#xff0c;1-4&#xff1a;监视窗口 (数字键不能使用小键盘) or 调试 -> 窗口 -> 监视 -> 监视 1-4 调试状态下使用&#xff1a; 在窗口中点击空白行&#xff0c;…

阅读基础知识1

一 网络 1. 三次握手四次挥手 三次握手&#xff1a;为了建立长链接进行交互即建立一个会话&#xff0c;使用 http/https 协议 ① 客户端产生初始化序列号 Seqx &#xff0c;向服务端发送建立连接的请求报文&#xff0c;将 SYN1 同步序列号&#xff1b; ② 服务端接收建立连接…

【译文】使用ANSI码丰富命令行输出

每个人都习惯了在终端中打印输出的程序&#xff0c;当新文本出现时&#xff0c;它会滚动&#xff0c;但这并不是您所能做的全部:您的程序可以为文本上色&#xff0c;上下左右移动光标&#xff0c;或者在以后要重新打印时清除屏幕的部分内容。这就是为什么像Git这样的程序可以实…

【UE5】非持枪站姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态且站立移动的动画混合空间 在Character文件夹中创建文件夹&#xff0c;命名为BlendSpace 所有混合空间文件都放到这个文件夹中 在BlendSpace文件夹中单击右键&#xff0c;选择动画(Animation)中的混合空间(BlendSpace) 选择SK…

腾讯云服务器价格多少钱一个月?5元,可以领代金券

2024腾讯云服务器多少钱一个月&#xff1f;5元1个月起&#xff0c;腾讯云轻量服务器4核16G12M带宽32元1个月、96元3个月&#xff0c;8核32G22M配置115元一个月、345元3个月&#xff0c;腾讯云轻量应用服务器61元一年折合5元一个月、4核8G12M配置646元15个月、2核4G5M服务器165元…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Refresh)

可以进行页面下拉操作并显示刷新动效的容器组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 从API version 11开始&#xff0c;Refresh子组件会跟随手势下拉而下移…

OpenCV学习笔记(十)——利用腐蚀和膨胀进行梯度计算以及礼帽和黑帽

梯度计算 在OpenCV中&#xff0c;梯度计算是图像处理中的一个基本操作&#xff0c;用于分析图像中像素值的变化速率的方向&#xff0c;其中梯度的方向是函数变化最快的方向&#xff0c;因此在图像中&#xff0c;沿着梯度方向可以找到灰度值变化最大的区域&#xff0c;这通常是…

day0 3r文档docker部署

3R编码 | 3R教室 - 最好的数字游民学习与交流俱乐部! (3rcd.com) window安装wsl下载不下来&#xff0c;正好有个服务器&#xff0c;就用linux吧密钥长度不匹配&#xff0c;设置一下长度即可 文档启动不成功&#xff0c;单独下载了下nginx&#xff0c;docker pull nginx:latest …

堆排序(数据结构)

本期讲解堆排序的实现 —————————————————————— 1. 堆排序 堆排序即利用堆的思想来进行排序&#xff0c;总共分为两个步骤&#xff1a; 1. 建堆 • 升序&#xff1a;建大堆 • 降序&#xff1a;建小堆 2. 利用堆删除思想来进行排序. 建堆和堆删…

Kotlin进阶之协程从专家到出家

公众号「稀有猿诉」 原文链接 Kotlin进阶之协程从专家到出家 协程Coroutine是一种轻量级的实现异步的方式&#xff0c;是代码执行的控制框架&#xff0c;是最新式的并发编程范式。它在使用上大大简化了以往多线程并发带来的种种麻烦&#xff08;如状态同步和锁&#xff…

docxTemplater——从word模板生成docx文件

官网文档&#xff1a;Get Started (Browser) | docxtemplater 官网在线演示&#xff1a;Demo of Docxtemplater with all modules active | docxtemplater 源码&#xff1a;https://github.com/open-xml-templating/docxtemplater 不仅可以处理word&#xff08;免费&#xf…

F-logic DataCube3 任意文件上传漏洞复现(CVE-2024-25832)

0x01 产品简介 F-logic DataCube3是一款用于光伏发电系统的紧凑型终端测量系统。 0x02 漏洞概述 F-logic DataCube3 /admin/setting_photo.php接口处存在任意文件上传漏洞 ,未经身份验证的攻击者可通过该漏洞在服务器端写入后门,获取服务器权限,进而控制整个web服务器。 …

CASA模型在陆地生态系统碳循环研究中的应用探讨

植被&#xff0c;作为陆地生态系统的重要基石&#xff0c;对维护生态环境功能具有不可替代的作用。其中&#xff0c;植被净初级生产力&#xff08;NPP&#xff09;是衡量植被生态系统健康与功能的关键指标。它反映了单位面积上绿色植被通过光合作用生产的有机质总量在扣除自养呼…

【爬虫】实战-爬取Boss直聘信息数据

专栏文章索引&#xff1a;爬虫 所用工具&#xff1a; 自动化工具&#xff1a;DrissionPage 目录 一、找到目标数据(2个确定)​ 1.确定目标网页 2.确定目标网址 二、编写代码​ 三、查看数据​ 五、总结 一、找到目标数据(2个确定) 1.确定目标网页 打开目标网站 网站&am…

一个简单的微信小程序表单提交样式模板

没什么东西&#xff0c;只是方便自己直接复制使用 .wxml <view class"box"><form bindsubmit"formSubmit"><view class"form-item"><text class"head">姓名&#xff1a;</text><input class"…

自动驾驶决策 - 规划 - 控制 (持续更新!!!)

总目录 Frenet与Cartesian坐标系 Apollo基础 - Frenet坐标系 车辆模型 车辆运动学和动力学模型 控制算法 PID控制器轨迹跟随实现 Pure Pursuit控制器路径跟随 路径跟踪算法Stanley 实现 c 无人驾驶LQR控制算法 c 实现 MPC自动驾驶横向控制算法实现 c 双环PID控制详细讲解 …

Maven项目如何导入依赖包

一、导入依赖包 导入mysql依赖包 第一步&#xff1a;登录Maven官网 Maven官网&#xff1a;https://mvnrepository.com/search?qmysql 第二步&#xff1a;点击MySql Connector Java 第三步&#xff1a;点击任意一个版本 第四步&#xff1a;将以下内容复制到pom.xml中 导入j…

springboot企业级抽奖项目-整体展示

项目地址 GitHub - kiorr/lottery: 企业红包雨项目 star截图q&#xff1a;3353441618可以领取资料 原型效果 前台 后台 业务分析 项目介绍 项目概述 京东的红包雨大家可能都参与过&#xff0c;在某段时间内随机发放不同的红包 本项目为一个通用的红包雨模式抽奖系统&…

Hive借助java反射解决User-agent编码乱码问题

一、需求背景 在截取到浏览器user-agent&#xff0c;并想保存入数据库中&#xff0c;经查询发现展示的为编码后的结果。 现需要经过url解码过程&#xff0c;将解码后的结果保存进数据库&#xff0c;那么有几种实现方式。 二、问题解决 1、百度&#xff1a;url在线解码工具 …

Python入门(小白友好)

知识图谱 搭建环境 安装Python:Download Python | Python.org 安装PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains 注意:专业版本是收费的,新手小白使用社区版(community)即可 创建第一个项目: 一些PyCharm的设置(也适用…