一个大集群,多个租户(至少5个租户)。每个租户下面有多个库(至少10个库),多个表(至少200个表)。当前我们最大的集群将近100T。简单来说 是一个多库多表的场景。每个表大小不一样。如何不拆分会怎么样?那么如何针对这样的集群进行拆分 打散?1.1 在使用oceanbase中 如果大表不拆分会怎么样?主要是性能有影响,大表都在一个OB server上。这样非常会容易造成热点,并且无法利用好oceanbase 分布式的特性。简单来说: 会造成 负载不均衡、性能问题、扩展性受限。其实这个问题我很早之前咨询过纪老师,他之前给的答复是可以按照主键进行拆分,虽然也能进行拆分,但是也不够完美,毕竟表大小不一样。如果全部按照 主键进行拆分,拆分的大小,也不一样。直到最近的发布会,我了解到了自动分区分裂这个功能。注:自动分区分裂,我个人以为是4.4的新功能。其实是4.3.5的功能。 后来仓氐老师的安利下,我们尝试了自动分区这个功能。简单来说 可以针对所有的表,进行自动分区,可以按照大小进行分区。这样的好处就是 小表不用拆分,大表可以进行拆分,进行打散。alter system set enable_auto_split = true tenant='xxx'开启分裂; xxx=租户id
设置分裂阈值可以搞大一些 比如40G
alter system set auto_split_tablet_size = 40G tenant='xxx' 设置分裂大小; xxx=租户id
等一次或者自己出发一次,合并。
我们在使用的过程中发现了,默认的索引,没有添加LOCAL关键字的索引,都会变成全局索引如果不开启全局索引不开分裂,大部分用的是单分区,可能会存在流量热点,无法打散。
因为全局索引通常是range扫描,所以得用range分区,用户要写全局索引的range分区的上下界挺难,因为要了解数据是咋分布的,而且数据是动态变化的。
所以用自动分裂能够自动选择合适的分区上下界,这样比较方便使用。
ALTER SYSTEM SET global_index_auto_split_policy ='ALL';
最大的收益就是方便了业务和DBA的使用,通过自动拆分以及自动索引拆分。使得我们充分利用了oceanbase 分布式的特性,打散了数据和全局索引。同时也避免了大表,索引热点等问题。我们也充分利用了oceanbase 高压缩,高性能的特点。https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016836