Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-11064

Restrict the speed of reading binlog from Master

    Details

      Description

      In some case, the speed of reading binlog from master is high, especially when doing a new replica.
      It would bring the high traffic in master.
      So We introduce a new variable "read_binlog_speed_limit" to control the binlog reading rate for IO thread to solve the problem.

      handle_io_slave:
      last_add_time = now() 
        tokens = read_binlog_speed_limit //there are some initial tokens in the bucket
        while(true){
          event = read_event() 
            if (read_binlog_speed_limit > 0) {
              if (tokents > TOKEN_MAX) { 
                tokens = TOKEN_MAX 
                  last_add_time = now() 
              } 
              do{ 
                //put some token
                tokens = tokens + (now()-last_add_time)*read_binlog_speed_limit;
                //if the token is not enough, sleep some time.
                if(tokens < event.real_network_read_len)
                  sleep((event.len-tokens)/speed_limit) 
              } 
            }
          write_event(event) 
        }
      

      It can work when slave_compressed_protocol is on.
      But it maybe doesn't work well when the binlog event is very big.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                knielsen Kristian Nielsen
                Reporter:
                svoj Sergey Vojtovich
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: