6

在主/从数据库复制中,所有写入都转到主机。所有读取都转到从机。主机将数据复制到从机。当 master 复制数据到 slave 时,slave 机器必须进行写入,这将锁定该行。从从机读取速度更快,但为什么呢?

4

2 回答 2

6

从站应该很多,因为:

  • 它所做的数据写入量与master相同
  • 对从属设备的写入绕过所有语法和权限检查(所有这些工作 - 而且很多 - 由主设备在处理查询时完成 - 只有数据更改被发送到从属设备)
  • 除了您作为测试执行的内容之外,它没有其他读取
  • 复制是为尽可能快的同步速度而设计的优化过程,因此如果主服务器出现故障,从服务器尽可能保持最新。这意味着通过设计它必须在从站上造成尽可能少的工作

这一切都意味着从站的负载低于主站。

实际上,将读取重定向到从属设备是一种已知的性能修改。

于 2013-01-03T19:27:40.633 回答
4

师傅很忙

  • 它并行写入数据(这很明显)
  • 它会导致磁盘 I/O 写入二进制日志,将已完成 SQL 的集合序列化到其二进制日志中
  • 它通过将完成的 SQL 从其二进制日志传递到从站的 I/O 线程(通过SHOW PROCESSLIST;用户名在主站上可见system user)来管理复制。连接到主站的从站越多,这可能会稍微减慢速度。

奴隶不那么忙,因为它......

  • 为 MySQL 复制序列化 I/O
    • 通过 IO 线程从 Master 收集 SQL
    • 将 IO 线程中的 SQL 记录到其最新的中继日志中
    • SQL 线程从中继日志中读取下一个可用的 SQL
  • 通过 SQL 线程一次处理一个 SQL 命令/一个事务
  • 如果Slave 拥有所有 MyISAM 并且 Master 拥有所有 InnoDB,则在 Slave 上写入具有外键约束的表将不必执行任何引用完整性检查。从站上不必发生MVCC

将奴隶和主人置于同一公平竞争环境的唯一例外是

  • 如果从站启用了二进制日志记录。如果从站只是从站,则不需要,但如果从站也是主站,则需要
  • 如果多个 SQL 语句作为单个 InnoDB 事务处理。
  • 如果硬件不同
    • Master 拥有更快的磁盘、更多的内核、更多的 RAM
    • 从站是一个商品服务器
于 2013-01-03T21:56:15.453 回答