我正在考虑从独立的单个MySql服务器切换到Master-> Slave Replication设置(使用2个服务器)。目前,有许多重写(插入/更新/删除)作业(用于从外部源加载新数据)每天运行几个小时。这些作业会降低相应表的“读取”(选择)性能。希望复制能够解决这个问题(包括备份等其他挑战)。
1)执行中继日志时,从属复制“SQL Thread”锁是否读取?试图更深入地了解SQL实际执行的方式(在奴隶上)。我希望从属服务器上的执行更加“优化”(与主服务器上执行的原始语句相反),因此任何潜在的锁定都是最小的。否则,主机上显示的同类“读取”性能瓶颈将逐渐渗透到从机。
2)通过阅读文档,默认使用声音SBR(基于语句的复制)。不确定是否要将其更改为RBR(基于行)?或者“混合”。哪个会被推荐?我倾向于保持默认,但确实不确定。
3)当一些工作完成后,我们目前正在运行ANALYZE& OPTIMIZE恢复执行大量删除/更新的相应表的文件空间。我的理解是,除非我们使用“NO_WRITE_TO_BINLOG”运行它们,否则这些命令将被复制到从属设备。在进行大量更新/删除操作时,不确定从属表如何受到影响。是否有必要将这些命令复制到从属设备?主要关注的是OPTIMIZE特别锁定了表,并且在实时生产站点(和大型表)上,这是一个非常大的问题。
提前感谢任何指点/见解!
答案 0 :(得分:2)
从它的外观来看,复制数据的唯一好处是主机不需要处理读取,如果你有多个从机,那么从机上的插入也应该更快,因为读取是分布式的。多少取决于在任何给定时间内执行的读取次数。
如果这样可以大大加快将数据插入主设备和从设备的速度,那么您最终可能获胜。
就锁定而言,据我所知,它不会传播到奴隶(这也在下面的常见问题中说明)。我想你可以在旋转中优化奴隶,这样在任何给定时间只有一个失去作用。
有用的阅读 http://dev.mysql.com/doc/refman/5.0/en/replication-faq.html