本文介绍PolarDB MySQL版8.0.1集群版在写入负载下开启列存索引(IMCI)后的写入吞吐表现,以及列存索引只读节点的物理复制延迟测试结果,为您评估在读写混合场景下引入列存索引对写入侧的影响提供参考。
适用范围
PolarDB MySQL版8.0.1集群版。
集群包含单一主(RW)节点、普通只读节点与列存索引只读节点各一个。
本文的性能数据基于特定测试环境采集,实际生产环境下的性能表现受实例规格、集群拓扑、地域、时段及业务负载影响,仅供参考。本文采用的测试方法参考PolarDB MySQL版8.0.1版本性能(集群版)。
测试环境
集群规格:PolarDB MySQL版8.0.1集群版,规格为8核32 GB。
集群拓扑:单一主(RW)节点 + 一个普通只读节点 + 一个列存索引只读节点。
测试工具:Sysbench。
测试负载:
oltp_write_only.lua,写入端直连主(RW)节点地址。测试数据量:25张表,每张表250000行数据。
并发线程:8、16、32、48、64、96、128、192、256。
写入场景吞吐数据
写入场景以oltp_write_only.lua作为压测负载,以同一份数据上未创建列存索引的基线写入作为对比。在每个并发级别下,测试持续运行,直至关键性能指标(QPS/TPS)进入稳定状态。为确保数据的可靠性,当性能曲线趋于平稳后,测试将继续运行一段时间,并取这段稳定期内的平均值作为该并发级别下的性能数据。
测试结论:基线与列存索引写入峰值均出现在192线程,同峰值并发下开启列存索引后写入QPS/TPS损耗均为7.73%;8~256线程区间内QPS损耗介于3.88%~9.02%之间,均低于10%。
由于oltp_write_only.lua每个事务的SQL请求数固定,QPS损耗与TPS损耗数值一致。

并发线程 | 基线TPS | 列存索引TPS | 基线QPS | 列存索引QPS | QPS/TPS损耗 |
8 | 6697.58 | 6437.93 | 40185.46 | 38627.61 | 3.88% |
16 | 11882.91 | 11141.52 | 71297.39 | 66849.17 | 6.24% |
32 | 17474.13 | 16022.83 | 104844.87 | 96136.98 | 8.31% |
48 | 19170.51 | 17441.69 | 115023.03 | 104650.36 | 9.02% |
64 | 19755.12 | 18106.05 | 118530.62 | 108636.20 | 8.35% |
96 | 21117.58 | 19681.40 | 126705.57 | 118088.42 | 6.80% |
128 | 21687.16 | 20010.19 | 130122.90 | 120061.01 | 7.73% |
192 | 22012.15 | 20311.59 | 132073.19 | 121869.54 | 7.73% |
256 | 21343.39 | 20136.51 | 128060.62 | 120819.23 | 5.65% |
物理复制延迟数据
由于列存索引写入吞吐在192线程达到峰值,此时主(RW)节点写入负载最高、对只读节点的复制压力也最大。因此,选取192线程这一峰值配置进行满压重测,持续采集列存索引只读节点相对主(RW)节点的复制延迟。
测试结论:在写入峰值压力下,列存索引只读节点的复制延迟p50仅0.11 ms,p95为18.02 ms,绝大多数采样点处于低毫秒水平,可满足对数据实时性要求较高的分析场景。
指标 | avg | p50 | p95 | p99 | max |
列存索引只读节点复制延迟(单位:ms) | 3.71 | 0.11 | 18.02 | 68.34 | 139.59 |