查看其它 1 个回答孔再华的回答

孔再华孔再华  数据库运维工程师 , 中国民生银行
qysongxijiehaiqingsparker等赞同了此回答

热点数据是指当前业务频繁访问的数据。如果是单节点数据库,这些数据集中在一起可以提高缓冲池命中率。但是在集群环境恰恰相反!不同数据库成员节点访问同样的热点数据会产生竞争问题。
所以在集群环境,需要考虑热点数据的分布。大的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
浏览1645

回答者

孔再华数据库运维工程师, 中国民生银行

分布式关系型数据库选型优先顺序调查

发表您的选型观点,参与即得50金币。

回答状态

  • 发布时间:2017-09-15
  • 关注会员:4 人
  • 回答浏览:1645