• Kristian Nielsen's avatar
    Move deletion of old GTID rows to slave background thread · 34f11b06
    Kristian Nielsen authored
    This patch changes how old rows in mysql.gtid_slave_pos* tables are deleted.
    Instead of doing it as part of every replicated transaction in
    record_gtid(), it is done periodically (every @@gtid_cleanup_batch_size
    transaction) in the slave background thread.
    
    This removes the deletion step from the replication process in SQL or worker
    threads, which could speed up replication with many small transactions. It
    also decreases contention on the global mutex LOCK_slave_state. And it
    simplifies the logic, eg. when a replicated transaction fails after having
    deleted old rows.
    
    With this patch, the deletion of old GTID rows happens asynchroneously and
    slightly non-deterministic. Thus the number of old rows in
    mysql.gtid_slave_pos can temporarily exceed @@gtid_cleanup_batch_size. But
    all old rows will be deleted eventually after sufficiently many new GTIDs
    have been replicated.
    34f11b06
rpl_rli.h 30.7 KB