暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在MySQL中对复制性能进行基准测试

原创 eternity 2022-08-03
748

在本博客中,我将介绍在对复制设置进行基准测试时需要测试的重要方面。MySQL有很好的工具可以用来测试其性能。它们包括:

sysbench–https://github.com/akopytov/sysbench

BMK套件-http://dimitrik.free.fr/blog/posts/mysql-perf-bmk-kit.html

mysqlslap–https://dev.mysql.com/doc/refman/8.0/en/mysqlslap.html

LinkBench–https://github.com/facebookarchive/linkbench

我不会在这里描述如何使用它们,因为您可以在提供的链接上或Percona博客中通过浏览标签sysbench、benchmark、benchs和category benchs找到说明。

然而,大多数指令都考虑了独立的MySQL服务器。如果要测试复制设置的执行情况,可能需要执行其他检查。

复制副本能否赶上源服务器?

要回答这个问题,您需要在源计算机上运行负载并监视副本延迟。您可以通过检查SHOW REPLICA STATUS(SHOW SLAVE STATUS)输出来实现,特别是Seconds_Behind_Source(Seconds_behing_Master)参数的值。同一参数由Percona Monitoring and Management(PMM)“MySQL Replication Summary”仪表板下的“MySQL Replication Lag”图监控。

更高级的检查是比较Exec_Source_Log_Pos(Exec_Master_Log_Pos)、中继日志文件与ReadvS_LUCE_Log_Pos(Read_MASTOR_Log_ Pos)、源日志文件对,因为源后面的秒数可能会受到长时间运行的命令的影响,并返回错误的值。

如果您看到延迟增加,可以通过添加并行化来调整副本服务器。还要检查选项binlog_ transaction_dependency_tracking的工作方式:https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking

复制副本可以在应用源服务器的更新时运行查询吗?

一旦您对复制延迟感到满意,您可以开始添加计划在此复制副本上运行的负载,并测试其性能。例如,如果计划使用复制副本处理只读查询,则可以在其上运行只读基准测试。您需要观察只读基准测试和复制延迟的性能。

如果计划在复制副本上运行分析查询:测试它们。如果计划使用此复制副本进行备份:进行备份并测量其对复制性能的影响。

同步复制

Galera、Percona XtraDB Cluster(PXC)和组复制等同步复制解决方案受流控制暂停时间的影响。您可以使用PMM进行监控。

对于PXC/Galera集群,请在“PXC/Glera集群摘要”仪表板下查看图表“Flow Control Paused Time”。

或者,您可以查看wsrep\u flow\u control\u paused变量的值。有关更多详细信息,请参阅MySQL Percona XtraDB集群中的Galera流控制。

对于组复制,您需要检查表performance\u架构中的COUNT\u TRANSACTIONS\u REMOTE\u IN\u APPLIER\u QUEUE列的值。replication\u group\u member\u stats。显示辅助节点上队列中等待应用的事务数。

您还可以在PMM的“MySQL组复制”仪表板下查看“复制延迟”图

你最好的测试是你的产品

正如Dimitri Kravtchuk在Fosdem 2020上所说:

虽然很难在接受用户写入的服务器上创建这样的基准,但对于副本来说,这相对容易。您需要做的只是创建生产服务器的副本,而不是将其用于应用程序。首先,观察它是否可以在空闲时处理复制延迟,然后开始向其添加负载。您还可以使用ProxySQL Note的镜像功能;但是,您需要检查本文中描述的一些限制是否仍然适用。

复制副本将以多快的速度赶上?

您可能需要测试的另一件事是,在从源服务器复制更新延迟后,副本恢复的速度有多快。要执行此测试,请在运行源服务器负载时停止复制副本,在一定时间后重新启动,并观察复制延迟。如果您正在测试服务于只读负载的复制副本,请让负载测试继续。

最好在一系列命令中执行stop、wait和start,这样您就可以控制复制副本停止的时间。例如,要将复制副本停止一小时,请使用以下命令:

STOP REPLICA;
SELECT SLEEP(3600);
START REPLICA;

然后等待复制副本运行:

SELECT SERVICE_STATE FROM performance_schema.replication_applier_sta

一旦此查询返回,开始监视SHOW REPLICA STATUS输出中Seconds\u Behind\u Source的值,直到它变为0。一旦发生,记录时间。这样,您将知道应用一个小时的更改需要多少时间。

结论

您可以使用推荐用于独立MySQL服务器的相同基准测试工具对复制设置执行性能测试。您只需要监视复制延迟和其他性能特征。

作者

Sveta Smirnova

Sveta于2015年加入Percona。她的主要职业兴趣是解决问题,处理棘手的问题、bug,寻找能够更快解决典型问题的模式,并教会其他人如何有效地处理MySQL问题、bug和gotchas。在加入Percona之前,Sveta在MySQL AB Sun Oracle的MySQL Bugs Analysis Support Group担任支持工程师。她是《MySQL疑难解答》一书和MySQL的JSON UDF函数的作者。

原文标题:How to Benchmark Replication Performance in MySQL
原文作者:Sveta Smirnova
原文链接:https://www.percona.com/blog/how-to-benchmark-replication-performance-in-mysql/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论