oceanbase OBCE 第四章实验 事务与远程执行

server/2024/9/29 15:51:04/

实验环境:企业版V3 1-1-1 

前期准备: 新建一个 oracle 租户 1C2GB

新建资源规格:

create resource unit u1_ora 
max_cpu=1,min_cpu=1,max_memory='2G',min_memory='2G',max_iops=128,max_disk_size='10G',max_session_num=100;

新建资源池:

create resource pool pool_ora 
unit='u1_ora',unit_num=1,zone_list=('z1','z2','z3');

新建租户

CREATE TENANT IF NOT EXISTS ob_pay charset='utf8mb4', replica_num=1, 
zone_list=('z1','z2','z3'), resource_pool_list=('pool_ora') SET 
ob_tcp_invited_nodes='%', ob_compatibility_mode='oracle';

新建 tpcc 用户,授予 dba 权限:

create user tpcc identified by obce_test;
grant dba to tpcc;

开始实验:

步骤 1 登陆 oracle 租户下的 tpcc 用户,创建 3 张表,模拟交易的场景, 第 1 张表和第 2 张表的 结构一致, 第 3 张表为不同结构

create table tab1 (c1 int primary key, c2 int, c3 varchar(10)) partition by 
hash(c1) partitions 10;
create table tab2 (c1 int primary key, c2 int, c3 varchar(10)) partition by 
hash(c1) partitions 10;
create table tab3 (d1 int primary key, d2 int) 
partition by list (d1)
(partition p0 values(1,2,3,4,5),
partition p1 values(6,7,8,9,10), 
partition p2 values (11,12,13,14,15));

步骤 2 向表中插入测试数据

insert into tab1 select level, mod(level,10),'003' from dual connect by 
level<=150;
insert into tab2 select level, mod(level,5),'004' from dual connect by level<=150;
insert into tab3 select level, mod(level,3) from dual connect by level<=15;
commit;

步骤 3 使用端口号 2883(obproxy)登录 sys 租户,查看参数ob_proxy_readonly_transaction_routing_policy 的默认值,修改 query_digest_time_threshold=100us

show parameters like 'ob_proxy_readonly_transaction_routing_policy';

show proxyconfig like 'query_digest_time_threshold';

alter proxyconfig set query_digest_time_threshold='100us'; 

步骤 4 打开一个新的 OS 命令行窗口, 运行以下命令,监测网络的数据流量

netstat -anltp|grep obclient|grep 2883

–此命令查看第一步 obclient 的 session 端口号,记录 第一个 IP 地址后面的端口号,这里为 30652; 注意显示结果中 observer 的 ip 地址相同(这里走了很多弯路,一定要相同不然抓不到包)

tcpdump -i lo port 30652 -w /tmp/tcpdump.raw

–-此命令将 tcpdump 获取的网络包写入一个临时文件

步骤 5 返回第一个步骤的 obclient 窗口,在 TPCC 用户下模拟运行一些查询和 update 语句.

select c1,c2 from tab1 where c1=10; 
select c1,c2 from tab2 where c1=10; 
update tab3 set d2=2 where d1=10;
commit; 
select c1,c2 from tab1 where c1=11; 
select c1,c2 from tab2 where c1=11; 
update tab3 set d2=3 where d1=11;
commit;

步骤 6 在 ssh 终端 tcpdump 命令窗口,使用 ctrl+c 终止命令

步骤 7 使用以下命令将 tcpdump.raw 文件转换为文本格式,便于使用文本编辑器查看

tcpdump -X -r /tmp/tcpdump.raw > /tmp/tcpdump.txt
more tcpdump.txt

步骤 8 登陆 sys 用户, 执行以下命令查询 SQL 语句的执行情况

select svr_ip,query_sql,sql_id,plan_id, trace_id,rpc_count,plan_type,is_hit_plan,elapsed_time,execute_time,get_plan_time from gv$sql_audit where query_sql like '%TA
B1%' or query_sql like '%TAB2%' or query_sql like '%TAB3%' and tenant_id=1001 
and user_name='tpcc' order by request_time \G

观察 rpc_count,plan_type, elapsed_time 等字段获取 SQL 语句执行时间执行计划等详情。

步骤 9 使用以下命令查看 obproxy_digest.log 中 SQL 语句的耗时情况

tail -100 /opt/taobao/install/obproxy/log/obproxy_digest.log

dbabbdc3154f91e78.png" width="1200" />

步骤 10 在第一步的 tpcc 窗口, 创建一个表组, 将表 tab1 和 tab2 放入此表组中

create tablegroup tab_group partition by hash partitions 10;
alter table tab1 tablegroup tab_group;
alter table tab2 tablegroup tab_group;

重复执行第 4 步 tcpdump -i lo port 30652 -w /tmp/tcpdump.raw 命令之后的步骤,比较表 组与没有表组的场景下,执行情况的不同

我随机挑选一个:

​​​​

上面是未使用表组,下面是使用表组。

步骤 11 修改参数 ob_proxy_readonly_transaction_routing_policy=False tenant=all,需要注意 最后添加 tenant=all 的控制参数,否则仅对 sys 租户调整

alter system set ob_proxy_readonly_transaction_routing_policy=false tenant=all;

select svr_ip,query_sql,sql_id,plan_id, trace_id,rpc_count,plan_type,is_hit_plan,elapsed_time,execute_time,get_plan_time from gv$sql_audit where query_sql like '%TA
B1%' or query_sql like '%TAB2%' or query_sql like '%TAB3%' and tenant_id=1001 
and user_name='tpcc' order by request_time \G

结论:

第一个场景最慢,第二个次之,第三个最快,下面三张图可以更加明确
个人对ob_proxy_readonlyu_transaction_routing_policy 这个参数的理解是:ob里面有很多分区表,不同分区的主副本可能会在不同的observer上面,那么当一条DML语句过来的时候就会产生分布式事务,降低性能,为了解决这个问题,OBProxy会把事务里所有 SQL 都发往开启事务的那条 SQL 被路由到的节点上去 。
但是如何判断事务开启的标志呢,事务的第一个语句可能是一条DQL语句,这就由ob_proxy_readonlyu_transaction_routing_policy参数控制。

http://www.ppmy.cn/server/111262.html

相关文章

51单片机-第十节-独立按键及数码管优化

一、优化独立按键&#xff1a; 独立按键的实现中&#xff0c;为了解决抖动问题&#xff08;在按下和抬起时&#xff0c;按键会在高低电平之间抖动10ms&#xff09;&#xff0c;我们在按下后Delay(20)&#xff0c;随后进入循环&#xff0c;直到检测到按键抬起&#xff0c;再Del…

2024年最值得购买的百元蓝牙耳机有哪些?四款热门畅销机型推荐

2024年&#xff0c;面对琳琅满目的蓝牙耳机选择&#xff0c;消费者可能会感到困惑&#xff0c;特别是当预算限制在百元左右时&#xff0c;2024年最值得购买的百元蓝牙耳机有哪些&#xff1f;当然在这个价格区间内&#xff0c;市场上也不乏性能卓越、性价比高的产品&#xff0c;…

网络安全售前入门08安全服务——Web漏洞扫描服务

目录 1.服务概述 2.服务内容 2.1代码层安全 2.2应用层安全 ​​​​​​​3.服务工具 4.​​​​​​​服务输出 1.服务概述 Web漏洞扫描服务主要针对应用系统漏洞进行扫描,主要包括扫描WEB服务器(IIS、Websphere、Weblogic、Apache等)的漏洞;识别数据库类型;扫描第三…

两句话讲清楚离线安装docker镜像

两句话讲清楚离线安装docker镜像 文章目录 两句话讲清楚离线安装docker镜像写在前面解决方案 写在前面 背景&#xff1a;银河麒麟、离线环境&#xff0c;装吧&#xff0c;一装一个不吱声。 准备&#xff1a; 首先&#xff0c;你要有个docker&#xff0c;安装好了才能搞镜像是不…

一文讲清楚,AI、AGI、AIGC与AIGC、NLP、LLM,ChatGPT等概念

本文旨在深入解析人工智能&#xff08;AI&#xff09;、通用人工智能&#xff08;AGI&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;、自然语言处理&#xff08;NLP&#xff09;、大型语言模型&#xff08;LLM&#xff09;以及ChatGPT等关键概念&#xff0c;并探…

深入理解Redis(一)----Redis简介+Redis为什么这么快

一.Redis简介 Redis是一个开源的内存中的数据结构存储系统&#xff0c;它可以用作&#xff1a;数据库、缓存和消息中间件。 注&#xff1a;数据库的作用相当于MySQL&#xff0c;可以永久存储相关的数据&#xff0c;和MySQL不一样的是&#xff0c;Redis提供了多种数据基本数据类…

青龙:定时任务管理平台介绍

平台概述 1.1 功能介绍 青龙定时任务管理平台是一个功能强大的自动化任务调度系统&#xff0c;它允许用户通过简单的配置和命令来管理各种定时任务。该平台的核心功能包括&#xff1a; 任务调度&#xff1a;支持创建、编辑、删除定时任务&#xff0c;并能够设置任务的执行时…

Java项目: 基于SpringBoot+mysql课程作业管理系统(含源码+数据库+开题报告+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql课程作业管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…