为什么在数据库复制中,奴隶机器的读取速度比主机快

Kev*_*vin 5 database replication database-replication

在主/从数据库复制中,所有写入都将转到主计算机.所有读取都转到从机.主机将数据复制到从机.当主设备将数据复制到从设备时,从设备必须执行写操作以锁定该行.从奴隶机器读取速度更快,但为什么呢?

Boh*_*ian 6

奴隶应该是一个很大更快,这是因为:

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

所有这些都意味着从属正在显着地比主负载少。

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


Rol*_*DBA 4

大师很忙

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

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

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

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

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