B
本地执行
Local Execution
接收客户端请求生成执行计划的数据库服务器和计划实际执行的服务器是同一个。
表
Table
最基本的数据库对象。每个表由若干行记录组成,每一行有相同的预先定义的列。用户通过SQL语句对表进行增、删、查、改等操作。通常,表的若干列会组成一个主键,主键在整个表的数据集合内唯一。
表组
Table Group
对经常会被同时访问的一组表,为了优化性能,需要将它们相同类型的副本存储在同一个OceanBase服务器中。通过定义一个Table group,并且将这一组表放在这个Table group中来达到这个目的。此外,同一个Table group的多个分区表具有相同的分区数和分区规则。假设一个Table group里的表都有N个分区,所有这些表的第i个分区的集合组成一个Partition group。同一个Partition group里的分区,主副本总是位于同一个server上。
并行合并
Parallel Compaction
特指对单个分区的并行合并。
并行执行
Parallel Execution
一个执行计划在执行前,根据需要访问的分区情况,被切分成一个或者多个任务来执行。在执行过程中,调度器可以串行调度计划的多个任务,也可以让多个任务同时被调度执行。这种多个任务被同时调度执行的方式称为并行执行。
布隆过滤器缓存
Bloom Filter Cache
布隆过滤器缓存,用于快速判断行在基线数据或转储数据是否存在,当结果为不存在时,可以减少磁盘IO和CPU消耗。
C
Commit Log (CLOG)
操作日志,用来记录对数据库对象的修改,通过WAL协议,满足事务原子性和持久性的要求。 一个分区的一个事务在执行过程中会产生一条或多条commit log,并通过Multi-Paxos协议复制到这个分区的其它副本上。一个分区完整的commit log序列代表了这个分区完整的修改历史。
查询改写
Query Rewrite/Query Transformation
通过对用户查询做等价的改写以便优化器生成最佳执行计划的过程。
存储过程
Stored Procedure
服务器端提供的用户编程方式。
D
DFO (Data Flow Object)
分布式并行执行计划中,若干个需要在一起流水线执行的算子集合,有时也被称为子计划。
DIO
Direct Input-Output,直接输入输出。
Data Transfer Layer (DTL)
数据传输层,分布式并行执行框架中用于提供各执行线程之间数据传输的网络传输框架。
大版本冻结
Major Freeze
集群中所有的节点在一个统一的快照点冻结当前的活跃Memtable,不再接受新开启事务的写操作,新事务的写操作在新的活跃Memtable中进行。
大版本冻结版本号
Major Freeze Version
大版本冻结的版本号。
地域
Region
Region指一个地域或者城市(例如杭州、上海、深圳等),一个Region包含一个或者多个Zone,不同Region通常距离较远。OceanBase支持一份数据的多个副本跨Region部署。
冻结Memtable
Frozen Memtable
Active Memtable达到一定的内存阈值,进行冻结生成冻结Memtable,冻结Memtable不能再写入增量数据。
冻结版本
Frozen Version
发生冻结操作时的版本号。
自适应游标共享
Adaptive Cursor Sharing
一种可以让优化器每一个参数化SQL存储多个执行计划,并根据SQL语句中谓词的选择性来选择合适的计划的机制。
E
二级索引
Secondary Index
访问数据表的一种辅助数据结构。与主键不同,二级索引通常包括由用户显式或隐式指定的一组键值。在OceanBase中,二级索引一般实现为与主表关联的数据表。
F
访问路径
Access Path
数据库中访问某张表的特定方式,通常分为主键访问和二级索引访问。
分布式执行
Distributed Execution
执行计划在多台数据库服务器上执行,每台服务器完成其中的一部分工作。
分裂分区
Partition Split
通过schema变更调整表的分区数,将一个表由一个分区变成多个分区或者多分区的表格变成更多的分区,会触发表已有分区上数据按照新的分区方式重新组织。分裂操作可以在表(Table)上操作,也可以在表组(Tablegroup)上操作,在表组上操作等同于对表组中所有的表按照同样的方式进行分裂。
分区
Partition
同Oracle中的Partition概念,在OceanBase中只有水平分区,表的每一个分区包含一部分记录。根据行数据到分区的映射关系不同,分为hash分区,range分区(按范围),list分区等。每一个分区,还可以用不同的维度再分为若干分区,叫做二级分区。例如,交易记录表,按照用户ID分为若干hash分区,每个一级hash分区再按照交易时间分为若干二级range分区。
分区裁剪
Partition Pruning
数据库根据查询条件,避免访问无关分区的优化过程。分区裁剪可以分为“静态”和“动态”两种类型。
副本
Replica
为了数据安全和提供高可用的数据服务,每个分区数据在物理上存储多份,每一份叫做分区的一个副本。每个副本,包括存储在磁盘上的静态数据(SSTable)、存储在内存的增量数据(MemTable)、以及记录事务的日志三类主要的数据。根据存储数据种类的不同,副本有几种不同的类型,以支持不同业务在在数据安全、性能伸缩性、可用性、成本等之间的选择。
全能型副本:也就是目前支持的普通副本,拥有事务日志,MemTable和SSTable等全部完整的数据和功能。它可以随时快速切换为leader对外提供服务。
日志型副本:只包含日志的副本,没有MemTable和SSTable。它参与日志投票并对外提供日志服务,可以参与其他副本的恢复,但自己不能变为主提供数据库服务。
只读型副本:包含完整的日志,MemTable和SSTable等,但是它的日志比较特殊。它不作为paxos成员参与日志的投票,而是作为一个观察者实时追赶paxos成员的日志,并在本地回放。这种副本可以在业务对读取数据的一致性要求不高的时候提供只读服务。因其不加入paxos成员组,又不会造成投票成员增加导致事务提交延时的增加。
表1. OceanBase支持的副本类型
类型 | LOG | MemTable | SSTable | 数据安全 | 恢复为leader时间 | 资源成本 | 服务 | 名称(简写) |
全能型 | 有,参与投票(SYNC_CLOG) | 有(WITH_MEMSTORE) | 有(WITH_SSSTORE) | 高 | 快 | 高 | leader提供读写,follower可非一致性读 | FULL(F) |
日志型 | 有,参与投票(SYNC_CLOG) | 无(WITHOUT_MEMSTORE) | 无(WITHOUT_SSSTORE) | 低 | 不支持 | 低 | 不可读写 | LOGONLY(L) |
只读型 | 有,异步日志,但不属于paxos组,只是listener(ASYNC_CLOG) | 有(WITH_MEMSTORE) | 有(WITH_SSSTORE) | 中 | 不支持 | 高 | 可非一致性读 | READONLY(R)副本根据负载和特定的策略,由系统自动调度分散在多个Server上。副本支持迁移、复制、增删、类型转换等管理操作。 |
副本根据负载和特定的策略,由系统自动调度分散在多个Server上。副本支持迁移、复制、增删、类型转换等管理操作。
负载均衡
Load Balance
系统根据一定的策略,通过动态调整UNIT的位置和UNIT内副本的位置,使得同一个Zone内所有Server的资源使用率达到均衡的过程。负载均衡策略要考虑很多因素,目前分为两级调度。详见Partition调度和Unit调度。
G
Granule
分布式并行执行计划中,对于表和索引扫描的最小工作任务粒度,可以是一个分区,或者是一个query range。
工作线程
Worker Threads
OceanBase数据库中用以处理租户请求的线程。属于同一个租户的一组工作线程通过共享一个任务队列来服务用户的请求。
H
Hint
数据库中用以直接指定优化器行为的用户原语。
行
一个行由若干列组成,有些时候其中的部分列构成主键(row key)并且整个表按主键顺序存储。有些表(如 SELECT 指令的结果)可以不包含主键。
行版本合并
Row Compact
将增量行数据中多个修改版本的数据合并成一行数据。
行缓存
Row Cache
基线数据和转储数据的行数据缓存,用于提升查询性能。
合并/每日合并
Major Compaction
将内存MemTable中的增量数据以及转储的增量数据和持久化存储上的基线数据进行合并,形成新的基线数据的过程。
合并分区
Merge Partition
聚合是分裂的逆操作。用户通过 schema 变更调整表格分区数触发,调整后的分区数比调整前的少。系统会把多个分区按照新的分区方式合并在一起。聚合操作可以在表格(Table)上操作,也可以在表组(Tablegroup)上操作,在表组上操作是对表组中所有的表格按照同样的方式进行聚合。
宏块
Macro Block
OceanBase数据文件内部管理单位,包含若干微块,是OceanBase存储系统写入的最小单元。
宏块分裂
Macro Block Split
由于宏块范围内插入和更新数据导致空间不足,需要将数据存放到多个宏块中。
宏块合并
Macro Block Merge
由于删除数据,相邻的几个宏块中的所有行可以在一个宏块中存放,把相邻的多个宏块转换成一个宏块的过程。
宏块空间回收
Macro Block Recycle
合并过程中会根据原基线数据和变更数据生成新的基线数据,原基线数据的宏块被重复利用的过程称为回收。
宏块预读
Macro Block Prefetch
在范围查询的过程中,根据需要提前预读取相邻的宏块。
活跃Memtable
Active Memtable
当前活跃的Memtable,可以写入增量数据。同Frozen Memtable相对应。
J
基线数据
Baseline Data
每日合并生成的存储于持久化介质上的只读有序数据。
基线数据版本
Baseline Data Version
基线数据的版本。
渐进合并
Progressive compaction
为了降低全量合并对系统的影响,一轮合并操作只合并部分的宏块,经过几轮以后,完成所有宏块的合并。采用渐进合并的主要目的是控制单次合并的时间,在表模式发生变化(如增加、删除列)的时候,需要在合并过程中更新所有行,如果是一个大表,更新所有行对合并时间有很大的影响。在这种情况下,采用渐进合并能有效控制每次合并的时间。
K
可用区/区
Availability Zone/ Zone
Zone是Availability Zone的简称。一个OceanBase集群,由若干个可用区(Zone)组成。通常由一个机房内的若干服务器组成一个Zone。为了数据安全性和高可用性,一般会把数据的多个副本分布在不同的Zone上,可以实现单个Zone故障不影响数据库服务。
库,数据库
Database
数据库对象,一个数据库对象中可以包含表、视图等其他数据库对象。
快速参数化
Faster parsing
OceanBase特有的针对实参SQL快速扣取参数(参数化)的过程。快速参数化结合OceanBase计划缓存的固有特点,通过增加约束条件等方法,避免了输入SQL再次执行时的语义分析过程,加速了计划匹配的效率。
L
连接顺序
Join Order
执行计划中连接多表时的执行顺序。
轮转合并
为了减少合并对业务的影响,各个Zone按照指定的顺序依次合并,正在合并的Zone不对外提供服务。
M
MVCC
Multi-Version Concurrency Control,多版本并发控制。
慢查询
超过指定时间的SQL语句查询。
Multi-Paxos
一种执行多Paxos实例的优化协议,OceanBase用Multi-Paxos协议实现Commit Log的多机持久化。
Membership Log
一种特殊的记录一个分区成员组变更记录的commit log。
N
Nop Log
Commit Log中的一种特定类型的日志,表示空操作。Nop Log产生于Multi-Paxos协议的恢复阶段,如果一条日志没有在多数派副本上持久化成功,在恢复阶段就可能产生一条Nop Log作为这条日志的内容。
O
OceanBase(简称OB)
由蚂蚁金服、阿里巴巴完全自主研发的金融级分布式关系数据库。
OBProxy
OceanBase1.0云版本中,应用访问数据库使用MySQL多种语言的客户端来访问OceanBase, OceanBase以服务的形式提供给应用访问。OBProxy就是满足此种需求,方便应用使用不同语言的MySQL客户端访问OceanBase,它接收客户端的应用请求,并转发给OBServer,然后OBServer将数据返回给OBProxy, OBProxy将数据转发给应用客户端。
OBServer,OB服务器
server
运行OBServer进程的物理机。一台物理机上可以部署一个或者多个OBServer。在OceanBase内部,server由其IP地址和服务端口唯一标识。
OLAP
On-Line Analytical Processing,联机分析处理。
OLTP
On-Line Transaction Processing,联机事务处理。
P
Partition调度(Partition负载均衡)
对于每一个租户每个Zone中的若干个UNIT,通过在UNIT之间迁移副本,达到每个UNIT内资源使用率的均衡。
属于同一个分区表的若干不同分区,会均匀分散在不同的UNIT上,使得每个UNIT有相同个数的分区
属于同一个partition group的若干分区,会聚集在同一个UNIT上
在保证上述每组分区个数均衡的基础上,通过交换这组分区内的分区,降低Server的磁盘水位线
通过迁移非分区表的分区,降低Server的磁盘水位线
PX Worker
分布式并行执行下,在每一个机器上参与执行一个分布式并行计划的工作线程。
Q
Query Coordinator(QC)
在分布式并行执行计划中,主控节点上的一个线程,用于调度、协调整体分布式并行执行计划的执行。
迁入
Move in
是用户通过schema变更把一个没有表组(tablegroup)属性的表格设置上表组属性。数据库内会检查被操作表格的分区方式和目标表组的分区方式,只有完全一致的情况,DDL才会成功。
迁出
Move out
迁出是迁入的逆操作,用户通过schema变更把一个表格的表组(tablegroup)属性删除,即把这张表从表组内迁出。用户通过schema变更把一个表格的表组属性从A修改为B,表格会从A中迁出,然后迁入B。
迁移
Migration
将分区的副本从一个节点迁到另一个节点,先在目标节点上增加一个副本,完成后再将源节点上的副本删除。
全量合并
Full Compaction
进行全量合并时,无论分区的宏块是否修改都重新生成一遍。可以在表粒度指定是否采用全量合并,通常在表模式发生变化(如增加、删除列)或者存储属性发生变更(如修改压缩级别)时,对该表进行全量合并。在需要对表进行全量合并时,通常采用渐进合并的方式来控制单次合并的时间。
全局索引
Global Index
OceanBase中跨分区的数据索引。全局索引通过全局化的存储数据键值与主键信息,可以快速定位到数据所在的分区。
R
Redo日志索引
Ilog
操作日志(commit log)在文件中不是根据日志ID有序存放的,为顺序读取操作日志,在ilog中存放了每条操作日志在日志文件中的位置,ilog中的记录是按照日志ID有序的。
Rowid
分区局部索引的基线数据行中保存的主表行数据的位置信息,用于快速定位相应的主表行。
Row Merge
将基线行数据和增量行数据进行融合形成新版本行的过程。
Row Purge/Range Purge
标识一些行被删除了。
RPC
Remote Process Call,远程方法调用。
RS
RootServer,主控服务器。主要进行集群管理、数据分布和副本管理。
Reconfirm
Reconfirm即再次确认,Multi-Paxos协议中leader上任需要执行的一个流程。分区leader上任之后,要把之前这个分区多数派上持久化成功的日志再次确认一遍,并把这些确认过的日志同步到所有正常工作的副本,确认多数派都持久化成功所有日志后Reconfirm才算成功。
S
Schema
通常来说,指的是数据库对象(如表、视图、索引等)的模式;在OceanBase服务端,也指所有数据库对象模式的集合。
Schema Version
在OceanBase服务端,维护了一个全局的schema版本号,数据库对象的每次变化都会引起全局Schema版本的升高。每一个数据库对象也有一个自己的版本号,该版本号是该对象最近一次修改(创建、变更等)对应的全局schema版本号。
Slog/SSTable Log
节点为了维护本机基线数据一致性而使用的日志。
Sub Query Coordinator(SQC)
分布式并行执行计划中,每一台参与执行的服务器上会有一个本地的协调者,用于接收从QC发送来的调度指令,获取本地执行工作线程,生成本地执行任务的granule,协调本地执行。
SSTable
用于存储基线数据或转储数据,行数据有序存储。
Start Working Log
分区leader上任成功,处理新事务之前写的第一条特殊日志,这条日志包含新leader的上任时间。
数据倾斜
Data Skew
数据中对于某一个或某几个值出现的次数特别多,占据了对应数据较大的比例,在分布式执行过程中,数据倾斜会引起执行的长尾,导致被分配处理这些值的执行线程会用更多的时间完成执行。
刷新Schema
Schema Refresh
OceanBase的DDL操作对系统对象的变更都发生在Root Server上,为使得集群中的每一个节点都能获取到最新的schema信息,Root Server定期将最新的schema version广播给集群中每一个节点。节点在收到schema version后,和本地缓存的schema version比对,如果本地落后于全局版本,则从系统表中获取变更来更新本地缓存的系统对象信息,这个过程叫刷新Schema。
算子
Operator
组成执行计划的基本单元。一般通过多个算子构成一棵执行树完成用户SQL请求。
T
统计信息
Statistics
一个描述数据库中表和列信息的数据集合。在Oceanbase中,统计信息有表统计信息(table level statistics)和列统计信息(column level statistics)两种。
U
UNIT调度(Unit负载均衡)
对于每个Zone,根据UNIT的动态调度,达到均衡的策略。
属于同一个租户的若干个UNIT,会均匀分散在不同的server上
属于同一个租户组的若干个UNIT,会尽量均匀分散在不同的server上
当一个Zone内机器整体磁盘使用率超过一定阈值时,通过交换或迁移UNIT降低磁盘水位线
否则,根据UNIT的CPU和内存规格,通过交换或迁移UNIT降低CPU和内存的平均水位线
Universe
表示跨地域部署的所有OceanBase。
V
VIP
Virtual IP,虚拟IP地址。RootServer主机由VIP决定。
W
微块
Micro Block
宏块内部的管理单位,数据读的最小单位。
微块缓存
Block Cache
微块在内存中的缓存,用于减少微块被频繁访问的IO,提升查询性能。
微块索引缓存
Block Index Cache
微块索引在内存中的缓存,用于提升频繁访问的查询性能。
位置
Locality
用来描述一个表的副本类型以及分布位置的方式。基本语法结构型如”replicas@location”,由如下一些元素组成:
副本类型(replicas):如F表示“全功能”副本;L表示“日志型”副本;全部支持的类型的名称见表表 1中的名称列,可以用全名或者简写。
位置(location):位置是系统已知的一组枚举值。位置是zone的名称,如hz1, bj2等。
量词:不指定量词的时候,表示一个副本;用{n}表示n个副本。有一种特殊的量词{all_server}表示副本数和可用的server数相同。目前,由于一些实现上的考虑,一个分区在一个zone中最多有一个全功能或日志型副本(这些类型的副本是paxos复制组的成员),只读型副本在同一个zone可以有多个。
位置信息缓存
Location Cache
分区位置信息缓存。每个节点维护分区位置信息,在执行计划生成阶段,根据位置信息生成不同类型的执行计划;在执行阶段,根据位置信息将计划发送到相应的节点执行。位置信息缓存的更新是按需的,如果在语句执行过程中发生由于位置失效产生的错误,则刷新相应分区的位置信息。
无主选举
分区没有leader的情况下,这个分区的多副本进行的选主流程。无主选举的两个触发场景是集群重启分区第一次选举和分区原leader故障,无主选举需要等原leader的lease过期后才能开始。
X
小版本冻结
Minor Freeze
分区在内存中的增量数据超过阈值时,冻结该分区当前活跃Memtable,不再接受新开启事务的写操作,新事务的写操作在该分区新的活跃Memtable中进行。
Y
远程执行
Remote execution
接收用户请求和生成执行计划的数据库服务器和计划执行的数据库服务器不是同一个,并且只有一台数据库服务器执行该计划。
优化器
Optimizer
优化器是决定用户查询执行计划的核心模块。通过访问相关数据的统计信息,结合OceanBase内置的规则与代价模型,优化器为用户查询生成最佳的执行计划。
有主改选
分区有leader的情况下,把分区leader切换到指定observer的流程。有主改选不需要等原有leader lease过期。
Z
Zone
是Availability Zone的缩写,可用性区,通常指一个机房(数据中心,IDC)。一个Zone包括若干物理服务器。
增量合并
Incremental Compaction
进行增量合并时,只重新生成所包含的行发生修改的宏块。
增量数据
Incremental Data
执行增、删、改(insert/update/delete)等操作产生的修改数据,该部分数据尚未与基线数据合并,包括Memtable数据和转储数据。
增量数据表
Memtable
内存中增量修改记录的集合。
租户
Tenant
OceanBase集群的一个租户相当于一个MySQL或者Oracle的实例。OceanBase的租户之间的资源和数据都是隔离的。租户拥有一组计算和存储资源,提供一套完整独立的数据库服务。
只读Zone/读库
Readonly Zone
只读Zone是一种特殊的Zone,在这个Zone里,只部署只读副本。通常当多数派副本故障的时候,OceanBase会停止服务,但在这种情况下,只读Zone能继续能够提供“弱一致性”读。这也是OceanBase集群内提供读写分离的一种方案。
执行计划/计划
Execution Plan/Plan
数据库中用以执行用户SQL请求的物理代码的集合,通常是一棵由算子构成的执行树。
执行计划缓存/计划缓存
Plan Cache
执行计划在每台server上的缓存。SQL语句的优化是一个比较耗时的过程,为了避免反复执行优化过程,生成的执行计划会加入到执行计划缓存中,以便再次执行该SQL时使用。每一个租户在每一台server上都有一个独立的执行计划缓存,用以缓存在此server上处理过的执行计划。
执行计划绑定
Execution plan binding
用户通过outline绕过优化器而直接指定SQL的执行计划的过程,通常用于优化器生成的执行计划错误或者不够高效的场景。
执行计划匹配
Execution plan matching
数据库为用户SQL选择在执行计划缓存中合适的执行计划的过程。
主键
Rowkey
同传统关系数据库的主键(primary key),表中每一行数据的标识符,用于唯一标识表中的行,表中的数据按照RowKey排序。
主可用性区
Primary Zone
Primary Zone指的是分区的主副本所在的Zone,可以为分区指定一个zone的列表,当分区需要切主的时候,容灾策略会按照这个列表的顺序决定新主的偏好位置。
如果不设定primary zone,系统会根据负载均衡的策略,在多个全功能副本里自动选择一个作为leader。
转储
Dump
将小版本冻结的Frozen Memtable中的增量数据与前一个版本转储数据(如果存在)合并后持久化存储到磁盘的过程称为转储。在合并过程中,转储数据也参与和基线数据的合并,形成新的基线数据。
转储数据版本号
Minor Freeze Version
转储数据的版本号。
子计划
Sub Plan
在分布式并行执行场景下,和DFO意思相同。
资源池
Resource Pool
一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。一个资源池由具有相同资源规格(Unit Config)的若干个UNIT(资源单元)组成。一个资源池只能属于一个租户。每个UNIT描述了位于一个Server上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干CPU资源,内存资源,磁盘资源等。
一个租户在同一个Server上最多有一个UNIT。实际上,从概念上讲,副本是存储在UNIT之中,UNIT是副本的容器。
组提交
Group Commit
组提交是为了优化写日志时的刷磁盘问题,将多个事务的日志聚在一起用一次IO完成持久化。