面试题答案
一键面试二进制日志(Binary Log)
- 作用:在主库上,二进制日志记录了所有修改数据库数据的操作(如
INSERT
、UPDATE
、DELETE
等)。从库通过读取主库的二进制日志来获取主库上的数据变更信息,从而保持与主库的数据一致性。 - 对复制性能的影响:
- 写入开销:主库每次有数据变更操作时,都需要将相关操作记录到二进制日志中,这会带来一定的磁盘 I/O 开销。如果写入频率过高,磁盘 I/O 可能成为性能瓶颈。
- 网络传输:从库需要从主库获取二进制日志,网络带宽和延迟会影响传输速度,进而影响复制性能。
- 优化措施:
- 调整日志写入策略:通过设置
sync_binlog
参数来控制二进制日志写入磁盘的频率。例如,将sync_binlog
设置为 0,表示由操作系统决定何时将二进制日志缓冲区的数据写入磁盘,这样可以减少磁盘 I/O 次数,但可能在系统崩溃时丢失部分日志;设置为 1 则每次事务提交都将日志写入磁盘,数据安全性高但 I/O 开销大。可根据业务对数据安全性和性能的要求选择合适的值。 - 优化网络:确保主从库之间网络稳定且带宽充足,可通过使用高速网络设备、优化网络拓扑等方式来减少网络延迟和提高传输速度。
- 调整日志写入策略:通过设置
中继日志(Relay Log)
- 作用:从库接收到主库发送的二进制日志后,将其写入中继日志。中继日志用于保存主库传来的二进制日志内容,然后从库的 SQL 线程从中继日志中读取日志信息,并在从库上重放这些操作,使从库的数据与主库保持同步。
- 对复制性能的影响:
- 磁盘 I/O:与二进制日志类似,写入中继日志也会产生磁盘 I/O 开销。如果从库上的写入操作频繁,磁盘 I/O 可能成为性能瓶颈。
- 重放速度:SQL 线程重放中继日志中的操作速度会影响复制性能。如果重放速度过慢,会导致主从延迟增加。
- 优化措施:
- 优化磁盘 I/O:使用高性能磁盘(如 SSD),调整磁盘 I/O 调度算法,合理分配磁盘资源等方式来提高磁盘写入性能,减少中继日志写入的延迟。
- 并行复制:从 MariaDB 5.6 开始支持并行复制。通过设置
slave_parallel_workers
参数来开启并行复制功能,让从库的多个线程并行重放中继日志中的不同事务,提高重放速度,减少主从延迟。例如,将slave_parallel_workers
设置为一个合适的值(如 4 或 8),具体值需根据服务器的 CPU 核心数和业务负载来调整。