如何测试MySQ复制性能
Sveta Smirnova [hudson 译]
2022年7月29号
在这篇博客中,我将介绍在在对数据库复制设置进行基准测试时 需要测试的一些重要方面。MySQL有很好的工具可以用来测试其性能。它们包括:
- sysbench – github.com/akopytov/sy…
- BMK-kit – dimitrik.free.fr/blog/posts/…
- mysqlslap – dev.mysql.com/doc/refman/…
- LinkBench – github.com/facebookarc…
我不会在这里描述如何使用它们,你可以在Percona公司的博客中找到他们的说明。然而,大多数说明都只考虑独立的MySQL服务器。如果要测试复制设置的执行情况,可能需要执行其他检查。
副本能否赶上源服务器?
要回答这个问题,您需要在源计算机上运行负载并监视副本延迟。您可以检查SHOW REPLICA STATUS(SHOW SLAVE STATUS)的输出,尤其是Seconds_Behind_Source(Seconds_Behind_Master)参数的值。
更高级的检查是比较Exec_Source_Log_Pos(Exec_Master_Log_Pos)、Relay_Log_File与Read_Source_Mog_Pos的比较(Read_Master-Log_Pos)、Source_Log_File这些参数对,因为Seconds_Behind_Source可能会受到长时间运行的命令的影响,并返回错误的值。 如果发现延迟增加,可以通过添加并行化来优化副本服务器。还要检查选项binlog_transaction_dependency_tracking的工作原理:dev.mysql.com/doc/refman/…
复制副本能否在应用源服务器的更新时运行查询?
一旦您对复制延迟感到满意,就可以开始添加计划在此复制副本上运行的负载,并测试其性能。例如,如果计划使用复制副本来处理只读查询,则可以对其运行只读基准测试。您需要观察只读基准测试和复制延迟的性能。 如果计划在副本上运行分析查询:请测试它们。如果计划使用此复制副本进行备份:进行备份并测量它将如何影响复制的性能。
同步复制
同步复制解决方案,如Galera、Percona XtraDB Cluste和组复制受流控制暂停时间的影响。您可以使用PMM进行监控。 对于 PXC/Galera 集群, 观察仪表盘 “PXC/Galera Cluster Summary” 下的 “Flow Control Paused Time”图表。 对于组复制,需要检查表performance_schema.replication_group_member_stats中的COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE列的值。 它显示辅助节点上队列中等待应用的事务数。
最好的测试是你的产品
正如Dimitri Kravtchuk在 Fosdem 2020 上所说 :
虽然很难在接受用户写入的服务器上创建这样的基准,但对于副本来说,这相对容易。您所需要做的只是创建生产服务器的副本,而不是让它对应用程序可用。首先,观察它是否可以在空闲时处理复制延迟,然后开始向其添加负载。
复制副本将以多快的速度赶上?
您可能还需要测试的一件事是,从源服务器复制更新延迟后,副本恢复的速度有多快。要执行此测试,请在运行源服务器加载时停止复制副本,在一定时间后重新启动,并观察复制延迟。如果您正在测试提供只读负载的复制副本,请继续进行负载测试。 最好在一系列命令中执行停止、等待和启动,这样您就可以控制复制副本停止的时间。例如,要将复制副本停止一小时,请使用以下命令:
STOP REPLICA;
SELECT SLEEP(3600);
START REPLICA;
然后等待复制副本运行:
SELECT SERVICE_STATE FROM performance_schema.replication_applier_status;
一旦此查询返回ON,开始监视SHOW REPLICA STATUS输出中Seconds_Behind_Source的值,直到它变为0。一旦发生,记录时间。这样,您将知道应用一小时的更改需要多少时间。
结论
可以使用针对独立MySQL服务器的同样的基准测试工具对复制性能进行测试,你需要的是监视复制延迟和其他性能特征。