云数据库 RDS-MySQL主备复制延迟场景及解决方案:场景2:对无主键表更新
场景2:对无主键表更新
RDS for MySQL的Binlog采用row格式,对每一行的数据更新,都会形成row格式Binlog event记录。例如:一个update语句更新100行数据,那么row格式的Binlog中会形成100行update记录,备机或只读回放时会执行100次单行update。
只读节点和备机在回放主库的Binlog event时,会根据表的主键或者唯一二级索引来检索需要更改的行。如果对应表未创建主键,则会产生大量的全表扫描,从而降低了Binlog日志的应用速度,产生复制延迟。
排查方法:
通过show create table xxx,分析执行慢的update和delete语句对应的表,分析是否有主键。
解决方法:
给无主键表增加主键,或者酌情增加唯一二级索引。