**Describe the bug**
mysql:5.7.31
clickhouse:20.10.1.4635 
I  found data inconsistency between MySQL and Clickhouse when I execute update in MySQL with one transaction with 439129 rows
**How to reproduce**
step1:
    I check that the amount of data is consistent between MySQL and Clickhouse
  mysql> select count(1) from mobile_belong 
    -> ;
+----------+
| count(1) |
+----------+
|   439129 |
+----------+
test-1-118.raipeng.com :) select count(1) from mobile_belong;
SELECT count(1)
FROM mobile_belong
┌─count(1)─┐
│   439129 │
└──────────┘
1 rows in set. Elapsed: 0.043 sec. Processed 439.13 thousand rows, 10.98 MB (10.30 million rows/s., 257.46 MB/s.) 
step2: 
   I executed update in MySQL as below
 mysql> update mobile_belong set province='北京',city='北京';
Query OK, 419371 rows affected (1.98 sec)
Rows matched: 439129  Changed: 419371  Warnings: 0
step3:
 checking data in MySQL and ClickHouse, and found  mysql updated data of 439129 rows successfully ,but,clickhouse only have 438459 rows be updated successfully,remian  439129-438459  not be updated.
mysql> select count(1) from mobile_belong where province='北京' and city='北京';
+----------+
| count(1) |
+----------+
|   439129 |
+----------+
1 row in set (0.16 sec)
test-1-118.raipeng.com :) select count(1) from mobile_belong where province='北京' and city='北京';
SELECT count(1)
FROM mobile_belong
WHERE (province = '北京') AND (city = '北京')
┌─count(1)─┐
│   438459 │
└──────────┘
1 rows in set. Elapsed: 0.068 sec. Processed 523.68 thousand rows, 29.88 MB (7.66 million rows/s., 436.86 MB/s.) 

UInt32 sec = 0, fsp = 0;
                        readBigEndianStrict(payload, reinterpret_cast<char *>(&sec), 4);
                        readTimeFractionalPart(payload, reinterpret_cast<char *>(&fsp), meta);
                        row.push_back(Field{sec});
                        break;
                    }
                    case MYSQL_TYPE_NEWDECIMAL: {
                        Int8 digits_per_integer = 9;
                        Int8 precision = meta >> 8;
                        Int8 decimals = meta & 0xff;
                        const char compressed_byte_map[] = {0, 1, 1, 2, 2, 3, 3, 4, 4, 4};
                        Int8 integral = (precision - decimals);
                        UInt32 uncompressed_integers = integral / digits_per_integer;
                        UInt32 uncompressed_decimals = decimals / digits_per_integer;
                        UInt32 compressed_integers = integral - (uncompressed_integers * digits_per_integer);
                        UInt32 compressed_decimals = decimals - (uncompressed_decimals * digits_per_integer);
                        String buff;
                        UInt32 bytes_to_read = uncompressed_integers * 4 + compressed_byte_map[compressed_integers]
                            + uncompressed_decimals * 4 + compressed_byte_map[compressed_decimals];
                        buff.resize(bytes_to_read);
                        payload.readStrict(reinterpret_cast<char *>(buff.data()), bytes_to_read);
                        String format;
                        format.resize(0);
                        bool is_negative = ((buff[0] & 0x80) == 0);
                        if (is_negative)
                        {
                            format += "-";
                        }
                        buff[0] ^= 0x80;
                        ReadBufferFromString reader(buff);