《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(5) https://developer.aliyun.com/article/1228628?groupCode=polardbforpg
热点散列Demo演示
创建hot_key_test库,库下创建两个表orders与order_detail,两个表没有指定任何分区键,按照默认主键拆分。
查看表结构,结果显示orders和orders_detail表均被默认分到tg7表组中,因为两个表均以ID为key进行拆分,且都为16个分区,因此会被分到同一个表组。
准备测试数据。热点数据指某个key的某个值写入行数特别多或写入量特别大,此处需要人为制造热点数据。因此,我们选择插入大量order_id=88以及order_id=null的数据作为热点数据。新创建表的统计信息不一定完善,因此此处建议先执行 analyze table。
查看各分区的数据。默认按照自增主键拆分,因此两个表的均衡性都很好。
按照order_ID与customer_ID做查询,查看执行计划。因为按照主键拆分,关联条件并不是主键,因此两个表都需要做全表扫描,将各自16个分区的数据拉取上来,然后在CN节点做Hashjoin,再根据Hashjoin的结果做agg。本次查询耗时1.72s。
分别在两个表中创建聚簇索引,按照customer_id与order_id拆分。创建聚簇索引没有指定的方式,默认按照key的方式划分。
索引创建完成后,查询语句变为了一条在索引表中的一个分片上做下推的join查询。查看执行计划。
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(7) https://developer.aliyun.com/article/1228625?groupCode=polardbforpg