面试题答案
一键面试增加中继日志缓冲区大小
- 原理:增大中继日志缓冲区(
relay_log_buffer_size
),可以让从库在将中继日志写入磁盘之前,先在内存中缓冲更多的日志内容。这样减少了频繁的磁盘I/O操作,因为大块数据一次性写入磁盘比多次小块写入效率更高。 - 适用场景:适用于从库所在服务器内存资源相对充足,且I/O性能瓶颈较为明显的情况。
优化磁盘I/O
- 原理:
- 更换高速存储设备:使用SSD代替传统机械硬盘,SSD具有更快的读写速度,能显著提升中继日志写入和读取的性能。
- 优化磁盘配置:如采用RAID 0+1等合适的磁盘阵列模式,在保障数据冗余的同时提高I/O性能;调整磁盘的I/O调度算法,如使用deadline调度算法,对于数据库这种I/O敏感型应用可优化I/O响应时间。
- 适用场景:当服务器整体I/O性能较低,磁盘读写速度成为瓶颈时适用,尤其在传统机械硬盘作为存储设备的情况下。
启用多线程复制
- 原理:从MariaDB 10.0版本开始支持多线程复制(
slave_parallel_workers
参数)。它允许从库使用多个线程并行回放中继日志中的事件,而不是像单线程复制那样按顺序逐个回放。这样可以充分利用多核CPU的性能,加快中继日志的应用速度。 - 适用场景:适用于主库写入操作较为分散,且从库服务器为多核CPU的情况。如果主库写入集中在少数几个表上,多线程复制的效果可能不明显。
调整中继日志刷新策略
- 原理:通过设置
sync_relay_log
参数来调整中继日志刷新到磁盘的频率。默认值1表示每次事务提交时都将中继日志同步到磁盘,将其设置为大于1的值(如100),则表示每执行sync_relay_log
次事务提交后才将中继日志同步到磁盘,减少了同步磁盘的次数,提高性能。但设置过高会增加在崩溃恢复时丢失中继日志事件的风险。 - 适用场景:适用于对数据安全性要求不是绝对严格,允许在一定程度内丢失少量中继日志事件以换取性能提升的场景。
定期清理中继日志
- 原理:当从库应用完中继日志中的事件后,及时清理不再需要的中继日志文件(通过
PURGE BINARY LOGS
或RESET SLAVE
操作),可以避免中继日志文件占用过多磁盘空间,同时也减少了文件系统中大量小文件带来的I/O开销。 - 适用场景:适用于磁盘空间紧张,且中继日志长时间未清理导致I/O性能受影响的情况。