gpt4 book ai didi

RDS 只读副本从属设备上的 Mysqldump 速度慢 50 倍

转载 作者:行者123 更新时间:2023-11-29 06:28:35 27 4
gpt4 key购买 nike

我在亚马逊 RDS 上创建了 MySQL 数据库的只读副本。

执行以下命令时,在主机上速度非常快(半秒),但在从机上需要大约 30 秒。 super 烦人,因为我想转储从属设备,这样我就不会减慢主控设备的速度。

mysqldump --set-gtid-purged=OFF -h myDomain.com -u dev -pmyPassword mySchema > out.sql

最佳答案

需要考虑三个问题。

最重要的是,由于传统 MySQL 客户端/服务器有线协议(protocol)的限制,mysqldump 在远离数据库运行时性能不佳,无法对一系列数据进行管道处理命令。

mysqldump 实用程序没有使用任何魔法来生成转储文件 - 它向服务器发出 SQL 语句,并获取这些查询的结果来生成其输出。

因此,数据库中的每个对象(架构、表、 View 、存储函数/过程、事件)都需要至少一次往返,有时甚至不止一次。

对于每个表,mysqldump 首先发出 SHOW CREATE TABLE t1;,然后是 SELECT * FROM t1; ...所以一个往返100 毫秒的时间意味着提取 150 个表的转储文件意味着 150 × 2 × 0.100 = 30 秒被运行 mysqldump 的机器和服务器之间的距离所浪费——这是即使表完全为空,也为 true。

不是建议,但您可以看看 mydumper ,它声称能够使用多个数据库连接并行创建备份,这可以通过并行转储过程来帮助调解命令传递到服务器并返回到客户端时浪费的周期。我不知道这个代码库的质量,但是这样的东西可能会有所帮助。

<小时/>

接下来,您几乎总是希望对 mysqldump 使用 --compress 选项。与您的假设相反,这不会压缩备份文件。使用此选项时生成的备份文件是相同的,但激活此功能时,服务器会压缩其在线发送到 mysqldump 的数据,然后 mysqldump 解压缩数据在写出数据之前再次读取数据——因此,除非运行 mysqldump 的机器和数据库服务器通过低延迟、高带宽网络连接,否则此选项几乎总是可以加快进程。由于生成的文件是相同的,因此使用此选项时不存在兼容性问题。

<小时/>

最后,您需要注意新创建的 RDS 服务器存在一个问题,以免影响您的基准测试。当您创建 RDS 副本时,它最初使用来自上游主快照的数据作为种子。在幕后,这是主硬盘驱动器的 EBS 快照,新的数据库实例由从该快照恢复的 EBS 卷提供支持。 EBS 卷是从快照延迟加载的,因此它们有记录的首次接触惩罚。此问题可能会对第一次完整备份的性能产生重大影响,但此后应该不会产生任何有意义的影响。

关于RDS 只读副本从属设备上的 Mysqldump 速度慢 50 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58002222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com