内容提要
Percona发现MySQL社区版5.7、8.0和8.4的性能下降,改进Percona Server for MySQL 8.4.0的性能。Percona Server 8.4的写入性能提高17%,在oltp_inlist_update工作负载中平均性能提高10.89%。使用std::unordered_map代替std::map可以提高性能。Percona Server 8.4.0在不同工作负载下的查询每秒(QPS)结果平均提高2%。改进适用于高写入工作负载和快速存储解决方案。建议用户升级或安装Percona Server以提高性能。
延伸解读
性能下降的根源:WRITESET模式与std::map
MySQL 8.4移除了binlog_transaction_dependency_tracking参数,默认使用WRITESET模式追踪事务依赖。该模式维护一个历史映射,记录行哈希与最后修改该行的事务序列号。原实现使用std::map,随机查找复杂度为对数级。在默认历史映射大小25000且频繁查找的场景下,这一开销变得显著,导致写入性能下降。Percona通过将std::map替换为std::unordered_map,利用其平均常数级的查找复杂度,从而提升了性能。
性能提升的适用条件与限制
Percona Server 8.4.0的写入性能提升在高写入负载和快速存储解决方案下最为明显。测试环境使用了Intel Optane DC P4800X存储和96G InnoDB缓冲池,这表明提升效果可能依赖于硬件配置。对于写入负载较低或使用传统磁盘的系统,性能改善可能不如文中数据显著。因此,用户在实际部署前应评估自身工作负载特征和存储性能,以确定升级能否带来预期收益。
升级建议与后续改进
Percona建议受高写入负载性能下降影响的用户升级或安装Percona Server 8.4.0,以立即获得性能提升。此外,Percona在研究中还发现了其他可优化的领域,这些改进将在未来的MySQL 8.4.x和8.0.x版本中实现。这意味着当前版本并非终点,用户可关注后续版本以获取进一步性能优化。对于使用MySQL社区版的用户,迁移到Percona Server可能是一个值得考虑的选项。
Q&A
Percona Server for MySQL 8.4.0的性能提升有多大?
Percona Server for MySQL 8.4.0的写入性能提高了17%。
为什么Percona Server 8.4.0的性能比MySQL社区版更好?
Percona Server 8.4.0使用std::unordered_map替代std::map,从而提高了性能,特别是在高写入工作负载下。
在什么情况下Percona Server 8.4.0的性能提升最明显?
性能提升在高写入工作负载和快速存储解决方案下最为明显。
Percona建议用户做什么以提高数据库性能?
Percona建议用户升级或安装Percona Server以提高性能。
Percona Server 8.4.0在不同工作负载下的查询每秒(QPS)结果如何?
Percona Server 8.4.0在不同工作负载下的QPS结果平均提高了2%。
MySQL社区版的性能下降主要体现在哪些版本?
MySQL社区版的性能下降主要体现在5.7、8.0和8.4版本。