OceanBase FAQ(不断更新)

— 本帖被 mq4096 设置为精华(2019-03-05) —
本帖维护OceanBase FAQ。 欢迎大家提问!

Q:OceanBase是什么样的数据库?

A:OceanBase定位是通用的分布式关系型数据库,是阿里巴巴和蚂蚁完全自主产权的数据库。2010年 发布v0.1-v0.3;2013年v0.4; 2014年v0.5;2016年闭源 从1.0开始重构;2018年发布v2.0

Q: OceanBase用在了哪些业务场景?

A: OceanBase第一个业务场景是淘宝的收藏夹(每人限制收藏2000个,最近一次双11前业务又扩容过一次。不同于购物车应用限制99个,后者数据库是分布式MySQL)。
后来在阿里妈妈广告点击付费业务(P4P)也使用了。
其他主要是支付宝和网商银行核心业务(包括会员、交易、支付、帐务。没错,大家支付宝的余额就是在OceanBase上。支付宝里绝大部分应用的数据库都在OceanBase上)。外部客户代表有南京银行的互联网核心业,还有一些城商行和农商行。

其他非金融行业场景还在开拓。只要SQL兼容性不是问题,场景通常也不是问题。

Q:OceanBase的优势是什么?

A:OceanBase相对于传统关系数据库的创新首先是运维方面的。将数据库故障切换(高可用)、异地容灾/多活、负载均衡、分布式架构弹性扩容缩容(DB不停服务)全部做到数据库内核里面了,这些是数据库的固有属性,还拿不掉。不需要人工介入(当然机器坏了还是要运维负责去安排维修的,不同之处是运维可以很从容的去处理机器故障)。当然这个固有能力的成本就是数据至少要三副本。

其次就是硬件成本方面。OceanBase架构是shared-nothing架构,不需要共享存储。只需要普通的x86服务器;不需要小机,也不支持小机平台。只需要普通的SSD(OceanBase读写模型里随机写很少,不伤SSD寿命)。
第三就是分布式,可以大规模部署OceanBase集群,同时又支持多租户管理,对机器资源的使用非常灵活,机器利用率高(有负载均衡在,不怕某些机器太闲某些机器太忙)。曾经最大的OceanBase集群机器数超过100台(主要是业务数据量是上百亿级别的)。OceanBase的分区表能力就是分布式水平拆分常用手段之一(另外一个是分布式中间件的分库分表方案)。

Q:OceanBase劣势是什么?

A:目前看太多了,还在努力弥补。首先,数据库自身对MySQL绝大部分常用用法是兼容了,但是对Oracle还只是兼容了标准SQL和一些常用函数(包括窗口函数)。当然存储过程、游标、更多的分析函数内部也实现了,还需要一段时间检验。传统Oracle数据库上的那复杂的存储过程和package目前在OceanBase里运行还可能有性能问题。内部业务正在试用过程中。其次,OceanBase的外部用户很少,了解的人很少,相关资料仅限于OceanBase官网和OceanBase论坛,还有微信公众号和群。所以不大容易得到用户信任。这个会有个很长的过程。

第三就是对机器配置要求不低。如至少32C64G,生产环境建议256G等。生产环境这个配置不算什么,不过个人如果要安装搭一个测试环境,可能不大好搞到机器。OceanBase的资源瘦身我们也在做了,还需要点时间。

Q:OceanBase好学吗?

A:绝对好学。我运维过Oracle/MySQL/SQLServer,OceanBase入门难点,但是要掌握的理论和技术并不算多。OceanBase的自运维属性非常高(机器挂了都不用DBA做什么切换,也不用担心丢数据,Paxos理论保证了只要多数派副本存活,就绝对不会丢数据)。

Q:如何试用OceanBase?

A:参照这个下载安装 OceanBase集群手动安装步骤 . OceanBase集群搭建还是非常简单的(比RAC简单多了)。OceanBase就是一个单进程软件,每个节点一个进程,然后一个命令初始化为一个集群就好了。
OceanBase软件本身没有试用版本的定义,下载下来的功能都是完备的。
如果商用,可以联系我们。

Q:OceanBase技术支持如何?

A:我们有专门的对外的OceanBase服务团队,提供产品介绍、POC环境搭建、业务数据库设计指导、培训、生产环境部署上线,以及后期客户重大事件期间数据库保障服务等。我们还有微信群(在公众号里找)跟OceanBase感兴趣的网友直接交流。
报错信息:strong consistency across distributed node not supported
OB版本: 1.x
报错原因:
OceanBase 1.x 版本不支全局一致性查询。在1.x版本里,当SQL要查询的数据分布在不同OBServer节点上时,由于没有内置全局时钟,所以无法获取不同OBServer节点上同一个时刻的数据。
解决办法:
1. 在1.x版本里。如果SQL访问的是多个表,且表之间有业务联系,则将多个表设置为相同的表分组(tablegroup)可以规避这个问题;如果SQL访问的是单个分区表,且能接受延时,可以使用弱一致读hint来规避报错;否则,暂时无解。 弱一致读hint详情请参考官方文档 弱一致读(ob_read_consistency)
2. 计划在2.1版本里,支持全局一致性查询,就没有这个问题。
报错信息:ERROR 4624 (HY000): machine resource is not enough to hold a new unit
OB版本:所有版本
报错原因:
OceanBase从某个角度来说就是将一批机器的资源(CPU/Memory/Disk)聚合在一起形成一个大的“资源池”,然后再从里面分配资源。每个租户都得绑定至少一个Resource Pool。Resource Pool就是从原始的“资源池”里创建出来的。每个Resource Pool由N个相同的Unit组成。每个Unit在某个具体的OBServer内部分配。当创建新的Resource Pool或者调大老的Resource Pool规格时,可能会因为没有OBServer可以分配出对应规格的Unit而报错。
解决办法:
重新计算可用资源,调制分配资源的SQL里的规格。如果可用资源确实不够用,那就先补充机器资源或者释放不用的租户资源,然后再重试。
汇总一下有关OceanBase和开源相关的问题的答案。

1. OceanBase 0.4曾经开源,地址为 alibaba/oceanbase 。 喜欢看代码的从中可以学习到一些分布式数据库开发经验。
2. OceanBase从1.0版本不再开源,架构上做了很大的重构,对SQL和存储功能都有加强。不过关于LSM结构、冻结合并的原理没有大变。当前版本进入2.0。将来是否开源目前并无信息。
3. OceanBase 在用户体验上像MySQL,但是绝不是MySQL,也不是基于MySQL版本修改的,不是基于Postgre修改的,不是基于其他任何开源的产品修改的。OceanBase是蚂蚁自主研发的纯粹的分布式数据库,产品开发过程中,特别注意避免侵犯其他公司专利。所以OceanBase是按照一个商业通用数据库去规划设计的。
4. 随时欢迎开发能力很强的同学加入OceanBase内核开发团队。
OceanBase提供多租户能力(租户就是实例)。租户内的分布式事务需求,OceanBase是满足的。原理是两阶段提交协议,强一致。OceanBase对分布式事务两阶段提交过程做了一些优化,性能有提升。
如果业务的事务范围超出了租户(实例)的边界,则必须借助第三方分布式事务中间件框架或者应用自己实现分布式事务。蚂蚁SOFA的分布式事务框架DTX支持三种分布式事务方法,即XA、TCC和FMT.其中TCC和FMT都是最终一致。

Q:OceanBase是什么样的数据库?

A:OceanBase定位是通用的分布式关系型数据库,是阿里巴巴和蚂蚁完全自主产权的数据库。2010年 发布v0.1-v0.3;2013年v0.4; 2014年v0.5;2016年闭源 从1.0开始重构;2018年发布v2.0

Q: OceanBase用在了哪些业务场景?

A: OceanBase第一个业务场景是淘宝的收藏夹(每人限制收藏2000个,最近一次双11前业务又扩容过一次。不同于购物车应用限制99个,后者数据库是分布式MySQL)。
后来在阿里妈妈广告点击付费业务(P4P)也使用了。
其他主要是支付宝和网商银行核心业务(包括会员、交易、支付、帐务。没错,大家支付宝的余额就是在OceanBase上。支付宝里绝大部分应用的数据库都在OceanBase上)。外部客户代表有南京银行的互联网核心业,还有一些城商行和农商行。

其他非金融行业场景还在开拓。只要SQL兼容性不是问题,场景通常也不是问题。

Q:OceanBase的优势是什么?

A:OceanBase相对于传统关系数据库的创新首先是运维方面的。将数据库故障切换(高可用)、异地容灾/多活、负载均衡、分布式架构弹性扩容缩容(DB不停服务)全部做到数据库内核里面了,这些是数据库的固有属性,还拿不掉。不需要人工介入(当然机器坏了还是要运维负责去安排维修的,不同之处是运维可以很从容的去处理机器故障)。当然这个固有能力的成本就是数据至少要三副本。

其次就是硬件成本方面。OceanBase架构是shared-nothing架构,不需要共享存储。只需要普通的x86服务器;不需要小机,也不支持小机平台。只需要普通的SSD(OceanBase读写模型里随机写很少,不伤SSD寿命)。
第三就是分布式,可以大规模部署OceanBase集群,同时又支持多租户管理,对机器资源的使用非常灵活,机器利用率高(有负载均衡在,不怕某些机器太闲某些机器太忙)。曾经最大的OceanBase集群机器数超过100台(主要是业务数据量是上百亿级别的)。OceanBase的分区表能力就是分布式水平拆分常用手段之一(另外一个是分布式中间件的分库分表方案)。

Q:OceanBase劣势是什么?

A:目前看太多了,还在努力弥补。首先,数据库自身对MySQL绝大部分常用用法是兼容了,但是对Oracle还只是兼容了标准SQL和一些常用函数(包括窗口函数)。当然存储过程、游标、更多的分析函数内部也实现了,还需要一段时间检验。传统Oracle数据库上的那复杂的存储过程和package目前在OceanBase里运行还可能有性能问题。内部业务正在试用过程中。其次,OceanBase的外部用户很少,了解的人很少,相关资料仅限于OceanBase官网和OceanBase论坛,还有微信公众号和群。所以不大容易得到用户信任。这个会有个很长的过程。

第三就是对机器配置要求不低。如至少32C64G,生产环境建议256G等。生产环境这个配置不算什么,不过个人如果要安装搭一个测试环境,可能不大好搞到机器。OceanBase的资源瘦身我们也在做了,还需要点时间。

Q:OceanBase好学吗?

A:绝对好学。我运维过Oracle/MySQL/SQLServer,OceanBase入门难点,但是要掌握的理论和技术并不算多。OceanBase的自运维属性非常高(机器挂了都不用DBA做什么切换,也不用担心丢数据,Paxos理论保证了只要多数派副本存活,就绝对不会丢数据)。

Q:如何试用OceanBase?

A:参照这个下载安装 OceanBase集群手动安装步骤 . OceanBase集群搭建还是非常简单的(比RAC简单多了)。OceanBase就是一个单进程软件,每个节点一个进程,然后一个命令初始化为一个集群就好了。
OceanBase软件本身没有试用版本的定义,下载下来的功能都是完备的。
如果商用,可以联系我们。

Q:OceanBase技术支持如何?

A:我们有专门的对外的OceanBase服务团队,提供产品介绍、POC环境搭建、业务数据库设计指导、培训、生产环境部署上线,以及后期客户重大事件期间数据库保障服务等。我们还有微信群(在公众号里找)跟OceanBase感兴趣的网友直接交流。
Q: OceanBase里创建索引是立即生效吗?唯一索引呢?
A: 分场景。

如果是在create table里带上了索引(包括唯一索引,也就是唯一性约束),是立即生效的。
OB 1.x 版本里在表存在的情况下新建的索引(包括唯一索引),命令立即返回,但是索引不是立即生效。需要等到OB集群发起大合并之后才会生效。其中唯一索引需要等待两次大合并。所以运维建索引后需要安排1-2次大合并操作。
OB 2.x 版本里在表存在的情况下新建的索引(包括唯一索引),命令立即返回,索引也不是立即生效,但是索引开始后台异步创建,创建时间取决于数据量。
Q:OceanBase什么时候会触发「合并」?
A: OceanBase的数据写之前事务日志redo会及时落盘,但是数据的增量修改会一直在OB的增量内存memtable里,每天会落盘一次,这个就是合并。合并时间可以设定(major_freeze_duty_time)。另外,如果memtable使用率超过阈值(freeze_trigger_percentage),就会触发「冻结」,然后就是minor compaction,以及「转储」操作。转储会释放memtable内存,增量数据被输出到磁盘上,转储有次数限制(最大由参数minor_freeze_times),这个次数用完了就会触发「合并」。合并会比较耗OB的资源,时间长短取决于有多少增量数据要跟基线数据合并。