MySQL 复制是否会妨碍我的数据库的性能?

Jig*_*ain 8 mysql replication performance

我不是一个“合格的”DBA,但是是的,我负责我们在社交应用程序中使用的我自己的数据库。

出于显而易见的原因,我最近在我的数据库上实施了主/从复制。

我想知道的是 MySQL 复制是否会破坏我的数据库的性能,因为对于在我的主数据库上写入的每个用户都会在从数据库上创建一个额外的写入(我可能在这里错了)。

我的奴隶和主人之间没有滞后。因此,复制几乎是瞬间完成的。

Rol*_*DBA 8

由于复制设置,Master 必须处理两件主要事情

磁盘输入/输出

Master 必须将每个完成的 SQL 事务写入二进制日志

网络输入/输出

当 Slave 连接时,Master 必须扮演交通警察。

  • Master 将 SQL 语句写入最近的 Binary Log
  • 对从从站发出的数据库连接的主轮询
  • 对于每个 Slave DB Connection,Master 执行以下操作:
    • 主从二进制日志中收到对最旧的 SQL 语句的请求,因为从在其中继日志中的最后一个条目
    • Master 向 Slave 的 IO 线程发送以下内容
      1. 主日志文件名
      2. 主日志位置
      3. Master 日志文件名和位置的 SQL 语句

如果一个忙碌的Master有Slaves Seconds_Behind_Master : 0,那简直太棒了。

如果这些指标中的任何一个变得明显,您可能需要做一些事情:

这是我关于设置复制拓扑的其他帖子


Mic*_*bot 5

简单回答你的问题,“不,复制不会扼杀你的主人的性能。”

与它必须做的所有其他事情相比,复制对 master 的影响通常非常小,因为 master 在复制环境中只需要完成两件重要的事情:

  • 制定事件并将其写入本地硬盘驱动器上的 binlog,以及
  • 将它写入 binlog 的每个事件的副本发送到每个连接的从站

我不认为编写二进制日志是复制的成本,因为即使您不复制,也应该始终打开二进制日志记录。这是一个非常有价值的故障排除和恢复工具。

将复制事件发送到从站的成本也可以忽略不计,因为从站负责维护到主站的持久 TCP 连接,主站只需在事件发生时将数据复制到套接字上。除此之外,主人既不知道也不关心奴隶是否或何时开始执行它们。

最后一条语句的部分例外是半同步复制,这不是默认设置。在这种模式下,master 等待至少一个 slave 确认收到和持久存储(虽然不是实际执行)来自每个事务的二进制日志事件,然后 master 在每次提交时将控制权返回给 client。

但在任何情况下,主站都不负责在从站上实际执行更新——它只是向从站发送两件事之一:运行的实际输入查询的副本(在基于语句的模式下)或每个查询实际插入/更新/删除的行的数据(在基于行的模式下)。在混合模式下,查询优化器将决定在每个事件的基础上使用哪种格式。


归档时间:

查看次数:

10429 次

最近记录:

6 年,5 月 前