一个租户在一个Zone下设置多个unit,数据库中表不进行分区的条件下:
1、如何确定单个表的数据在那个unit中存储,能否查询到单个unit下有那些表数据,能否人工指定表归属于某一特定的unit?
2、当两个表数据在两个unit中分别存储时,执行这两个表的联合查询SQL,底层查询的执行流程是什么?
- 可以用这个SQL查到对应表的分区leader分布在哪个节点
select * from DBA_OB_TABLE_LOCATIONS where DATABASE_NAME='test’and ROLE<>‘FOLLOWER’ and TABLE_NAME like ‘%t1%’;
默认是不支持手工指定的,如果有几张表会经常关联查询,可以使用table group指定,这样默认就是在一个unit下
- 如果不在同一个unit,默认情况下就是分布式事务,最后汇总结果返回给客户端。这种相对来说性能要比在同一个unit要差。
假设我将a/b/c三张表使用table group指定到unit1,d/e表被分配到unit2,f表被分配到unit3上;abc三张表的数据量很大,占用的磁盘空间比较多,并且单表和链表查询比较频繁;unit2和unit3上磁盘和内存占用都很少的情况下:
1、unit1上存储、内存等压力都达到了临界值,这种情况下是三个unit都要扩容同样的资源吗?都要扩容的情况下,是不是比较浪费资源,有没有更好的解决方案?
2、unit1上连表查询耗时较长,比如超时10s就需要设定一个监控阀值进行告警提醒;而unit2和unit3上的查询sql则需要设置耗时超过5s就需要告警;ob支持分unit设置不同的告警规则吗?
3、当前租户下新建一张表h的时候,不指定table group的时候,ob是根据哪些资源或者规则进行分配到unit上的?
4、如果出现以上的情况,是否在部署ob集群时,选择每个zone下只设置一个observer,每个zone下只有一个unit比较合理?有没有更好的解决方式或建议?
- 正常是的,不过默认底层会做均衡,老尽可能保证负载均衡
- 这个不支持的
- 默认情况是分区数量,然后就是大小做权重
- 这个不是的哈,看业务需求
然后像 a/b/c三张表做了table group,如果这三张表没有做分区,那么肯定只能固定到一个unit;但是如果做了分区,那么会自动打散的哈。
比如 a、b、c 各有10个分区,现在有两个unit,那么会将相同规则的分区打散到两个unit。类似于abc的0-4分区在unit1,5-9分区在unit2