如何解决热点数据在双活环境的问题?

参与33

2同行回答

anikikonganikikong课题专家组数据库运维工程师中国民生银行
热点数据是指当前业务频繁访问的数据。如果是单节点数据库,这些数据集中在一起可以提高缓冲池命中率。但是在集群环境恰恰相反!不同数据库成员节点访问同样的热点数据会产生竞争问题。 所以在集群环境,需要考虑热点数据的分布。大的pagesize会存放更多的row,会有更大的概率...显示全部

热点数据是指当前业务频繁访问的数据。如果是单节点数据库,这些数据集中在一起可以提高缓冲池命中率。但是在集群环境恰恰相反!不同数据库成员节点访问同样的热点数据会产生竞争问题。
所以在集群环境,需要考虑热点数据的分布。大的pagesize会存放更多的row,会有更大的概率产生竞争。所以在集群环境,尽量使用小的pagesize, 例如4K。
而对于热点表,我们可用通过在使用分区表等数据库技术来从物理上打散当前的热点数据。例如我们在计费系统的双活环境里面,针对热点的日志表,传统分区表一般使用时间列来组合数据,而我们是用了current member这个变量和序列号组合,做了个隐藏列,实现本地节点插入数据落在自己单独的分区里,同时本地分区也是被轮询使用,彻底打散热点数据。部分定义如下:

"SERIALIZED_REQUEST" BLOB(1048576) INLINE LENGTH 1000 LOGGED NOT COMPACT ,

"CURMEM" SMALLINT IMPLICITLY HIDDEN WITH DEFAULT CURRENT NODE ,                                
"IDKEY" SMALLINT IMPLICITLY HIDDEN GENERATED ALWAYS AS (MOD(ID,10) + MOD(CURMEM,4)*10) )       

COMPRESS YES ADAPTIVE
INDEX IN "TBS_LOG_IDX_4K" PARTITION BY RANGE("IDKEY")
(PART "PART0" STARTING(0) IN "TBS_LOG_DAT" INDEX IN "TBS_LOG_IDX_4K" LONG IN "TBS_CLOB_DAT",

对于热点表的热点索引,建议使用分区索引,random索引等方式。也可以加入current member列作为索引的一部分,从而减少成员节点间的竞争。

收起
银行 · 2017-09-15
浏览2806
冯帅冯帅数据库管理员贝壳金服
主要是通过部署负载均衡设备,当然热点数据的可以通过读写分离和缓存来实现,业务层面或者架构层面的调整其实是最简洁有效的显示全部

主要是通过部署负载均衡设备,当然热点数据的可以通过读写分离和缓存来实现,业务层面或者架构层面的调整其实是最简洁有效的

收起
融资租赁 · 2017-09-15
浏览2309

提问者

haozhangsir
系统工程师银华
擅长领域: 存储灾备双活

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-09-15
  • 关注会员:4 人
  • 问题浏览:5385
  • 最近回答:2017-09-15
  • X社区推广