本章节介绍 ODP 的表路由机制。

在 OceanBase 数据库中,Partition 是数据存储的基本单元。当我们创建表时,就会存在表和 Partition 的映射。如果是非分区表,一张表仅对应一个 Partition,如果是分区表,一张表可能会对应多个 Partition。目前 OceanBase 数据库未实现 Partition 的合并和分裂。

在 OceanBase 数据库中,有 Local 计划、Remote 计划和 Distributed 计划三种表路由。Local 计划、Remote 计划均为单分区的路由。OBProxy 的作用就是尽量消除 Remote 计划,将路由尽可能的变为 Local 计划。如果表路由类型为 Remote 计划的 SQL 过多,说明该 OBProxy 的路由可能存在问题(可通过查看 oceanbase.GV$OB_SQL_AUDIT 视图中 plan_type 字段来确认)。

非分区表路由

在 OBProxy 中保存了 Partition 和 OBServer_addr 的映射缓存,Partition 通过 SQL Parser 功能解析获取表名,根据表名去 Location Cache 中获取 Partition 所在 OBServer 的 IP。

存在如下三种情况:

  • Location Cache 中不存在,访问 OBServer 的 __all_virtual_proxy_schema 表拉取。

  • Location Cache 中存在并可用,直接使用。

  • Location Cache 中存在但不可用,从 Location Cache 中去除并重新拉取。

有关 Location Cache 的相关介绍,请参见《 ODP 用户指南》。

分区表路由

和非分区表一样,在 OBProxy 中保存了 Partition 和 OBServer_addr 的映射缓存,Partition 通过 SQL Parser 功能解析获取表名。相比非分区表,分区表额外增加了一个分区 ID 信息,根据表名和分区 ID 去 Location Cache 中获取 Partition 所在 OBServer 的 IP。

分区 ID 通过 SQL 语句获取,来源往往是 where 子句的表达式、insert 语句 values 值。需要保证能获取到 a = xxx,其中 a 为分区键,xxx 为常量。示例如下:

obclient> CREATE TABLE t1(c1 int, c2 int) PARTITION BY hash(c1) partitions 5;
obclient> UPDATE t1 SET c2 = 3 WHERE c1 = 5;

这里提取到 c1 = 5,通过这个信息可以计算到影响到的分区 ID,将 SQL 转发给对应分区所在 OBServer 即可。

OBProxy 如果计算不出分区 ID,那么就无法拉取准确的路由。可以在 obproxy.log 日志文件中,搜索 "calculate partition id" 查看是否计算成功。示例如下:

[root@ocp-deploy-obnorpm2-bfc89744b-qsfkz log]# grep "calculate partition id" obproxy.log
[2021-10-28 17:18:18.552825] DEBUG [PROXY] ob_mysql_route.cpp:577 [73979][Y0-7FB3C9D07A80] [lt=10] [dc=0] succ to calculate partition id(part_id_=1)
[2021-10-28 17:18:31.045191] INFO  [PROXY] ob_mysql_route.cpp:575 [73979][Y0-7FB3C9D07A80] [lt=17] [dc=0] fail to calculate partition id, just use tenant server(tmp_ret=-4002)

有关分区表的相关介绍,请参见 分区概述。

ODP 依赖的 OBServer 内部表

路由的准确性,除了与 ODP 本身有关,还依赖于从 OBServer 内部表中获取到正确信息。如下为 ODP 所依赖的 OBServer 内部表:

  • __all_virtual_proxy_schema:用于保存分区与其所在机器的对应关系信息,也有 Partition 的部分相关信息。

  • __all_virtual_proxy_partition_info:保存分区表相关分区信息。

  • __all_virtual_proxy_partition:保存一级分区信息。

  • __all_virtual_proxy_sub_partition:保存二级分区信息。

吃透OceanBase| 什么是ODP 的表路由机制?相关推荐

  1. 高性能的连接管理和数据路由组件,OceanBase 生态工具 ODP 详解

    作者简介:致新,OceanBase 数据链路高级研发工程师. 一.ODP 简介 1.1    OceanBase 生态 OceanBase 除了内核中大家相对熟悉的 SQL 模块.事务模块.存储模块等 ...

  2. Linux x86_64 APIC中断路由机制分析

    不同CPU体系间的中断控制器工作原理有较大差异,本文是<Linux mips64r2 PCI中断路由机制分析>的姊妹篇,主要分析Broadwell-DE X86_64 APIC中断路由原理 ...

  3. java消息路由_SIP消息路由机制

    一:请求路由 松散路由(Loose Router)和严格路由(Strict Router),这是SIP协议(RFC3261)中的一个非常重要的概念. 在SIP消息的Route头域或Record-rou ...

  4. 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

  5. asp.net MVC 路由机制 Route

    1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...

  6. php控制器和路由机制,自制PHP框架之路由与控制器

    我们为什么要使用路由?原因1:一个更漂亮的URI 1.URI的改进 刚刚开始学PHP时,我们一定写过blog.php?id=1之类的URI,使用GET方式获取参数.这样的URI有两个缺点,一是容易被S ...

  7. 【ASP.NET MVC】 路由机制:命名路由

    首先看一下命名路由和没有命名的差别: 命名路由: routes.MapRoute(name: "Test", // Route nameurl: "code/p/{act ...

  8. C#WebApi路由机制详解

    随着前后端分离的大热,WebApi在项目中的作用也是越来越重要,可单独部署.与前端和App交互都很方便,既然有良好的发展趋势,我们当然应该顺势而为--搞懂WebApi!Restful相当于给Http请 ...

  9. C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

    C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 声明:本文非博主原创,转自https://blog.twofei.com/496/,博主读后受益良多,特地转载,一是希望好文能有更多人看到 ...

最新文章

  1. apple id无法创建_我们如何使用Apple的学习框架来创建我们的第一个应用程序
  2. CSS3与动画有关的属性transition、animation、transform对比
  3. excel函数大全_让你的EXCEL工作效率翻倍的函数大全
  4. android textview import,android – textview中的镜像文本?
  5. 企业级监控工具Cacti安装配置全过程
  6. opencv透视变换:GetPerspectiveTransform、warpPerspective函数的使用
  7. 【Linux】一步一步学Linux——consoletype命令(247)
  8. 前端基础之操作标签—文档处理
  9. Linux开发板网线直连电脑配置方法
  10. Mybatis 拦截器介绍
  11. 加分进了字节,MySQL真yyds!
  12. php验证注册不能纯数字,php写一个纯数字验证码教学
  13. 转载:基于Redis实现分布式锁
  14. zone watermark水位控制
  15. 手把手教你领取永久免费服务器
  16. java 取结果集的最后三项,
  17. 你的声音价值百万,教你六个利用声音赚钱的方法
  18. 大海贼探险物语机器人_大海贼冒险岛
  19. 未动科技与地平线达成战略合作,共推全场景智能驾驶加速落地
  20. Journal日志服务详解

热门文章

  1. Ubuntu 14.04 下安装Skype聊天工具
  2. Linux内核网络协议栈流程及架构
  3. ps play服务器没有响应mac,【攻略技巧】人在外心在家 教你用PC/MAC远程打PS4
  4. 数字IC设计笔试题汇总(二)
  5. IIS下的SSL证书配置
  6. mysql 商品属性搜索出商品
  7. R统计绘图-随机森林分类分析及物种丰度差异检验组合图
  8. 2022年12月英语六级预测范文—预测范文:Be Willing To Try
  9. 企业级仓库harbor搭建
  10. python 培训机构比较