问题1
假如在obproxy的路由缓存中,t1表的路由信息失效了,那么obproxy在更新路由缓存时,是只对t1进行更新嘛? 还是全部更新?
问题2
假如在obproxy的路由缓存中,t1表的路由信息失效了,但是obproxy还不想立即对缓存进行更新,那么此时将依据什么对t1表进行路由?
问题1
假如在obproxy的路由缓存中,t1表的路由信息失效了,那么obproxy在更新路由缓存时,是只对t1进行更新嘛? 还是全部更新?
问题2
假如在obproxy的路由缓存中,t1表的路由信息失效了,但是obproxy还不想立即对缓存进行更新,那么此时将依据什么对t1表进行路由?
1.只对t1表进行更新
2.对于路由表的更新,ODP 采用触发更新机制。ODP 每次会把 SQL 根据路由表转发给相应的 OBServer 节点,当 OBServer 发现该 SQL 不能在本地执行时,会在回包时反馈给 ODP
ODP 会将获取到的租户信息保存在本地内存中,并根据一定策略进行缓存信息的更新。对于 sys 租户,通过每 15 秒一次的拉取任务获得最新的信息;ODP 会每 15 秒访问一次 DBA_OB_SERVERS,维护最新的路由信息,这样可以感知到集群发生的节点变更。除了集群机器列表,ODP 还会通过 sys 租户获取 partition 分布信息、Zone 信息、租户信息等。
对于普通租户,ODP 的刷新频率并不高,普通租户的路由缓存策略如下:
总的来说,在多租户架构下,ODP 通过 sys 租户获得元数据信息(sys 租户本身路由信息就是集群的机器列表),然后通过元数据信息获得租户的路由信息。通过租户路由功能,ODP 支持了 OceanBase 数据库的多租户架构。
问题2
假如在obproxy的路由缓存中,t1表的路由信息失效了,但是obproxy还不想立即对缓存进行更新,那么此时将依据什么对t1表进行路由?
我的意思是在这个时候,obproxy就是顽固的不更新路由缓存,那么t1表的路由信息,在这个时候,该去哪里获取? 因为obproxy并不是每触发一次就更新一次。
__all_virtual_proxy_schema 是OB的sys租户的内部表哈 ?
在obproxy的路由缓存中,若t1表的路由信息失效,但obproxy仍未进行更新,通常会使用以下策略进行路由:
可以学习下这篇文章
https://open.oceanbase.com/blog/10900389