tencent cloud

All product documents
TencentDB for MySQL
Large Transaction Replication
Last updated: 2024-07-22 12:35:36
Large Transaction Replication
Last updated: 2024-07-22 12:35:36

Overview

If multi-row large transaction is updated by a single statement in row format, an event will be generated for each row. As a result, a large number of binlogs are created, and APPLY operations in the replica database become slower during replication, causing replication delays. After analyzing and optimizing the large transaction replication scenarios, the Tencent Cloud kernel team developed the large transaction replication optimization feature. With this feature, large transactions are automatically identified and binlogs are converted from row format into statement format, thus reducing the quantity of binlogs and increasing the replication performance.

Supported Versions

Kernel version: MySQL 5.6 20210630 and above.
Kernel version: MySQL 5.7 20200630 and above.
Kernel version: MySQL 8.0 20200830 and above.

Use Cases

This feature accelerates large transaction replay for tables without a primary key in row format. It can be enabled if you are sure that the delay is caused by slow replay due to the lack of primary key.
This feature aims to solve slow replication when there are large transactions in row format.

Performance Data

The replication time is reduced by 85% for UPDATE operations and about 30% for INSERT operations.

Instructions

The large transaction replication optimization feature judges whether a transaction is large based on the historical execution statistics of the SQL statement. If a transaction is identified as large and optimizable, its isolation level will be automatically upgraded to repeatable read (RR), and the binlogs will be stored in statement format to reduce the time of executing the large transaction in the replica database. Here:
cdb_optimize_large_trans_binlog is the switch of this feature.
cdb_sql_statistics is the switch of SQL statement execution statistics collection.
cdb_optimize_large_trans_binlog_last_affected_rows_threshold and cdb_optimize_large_trans_binlog_aver_affected_rows_threshold are the thresholds for judging a large transaction.
cdb_sql_statistics_info_threshold is the number of legacy data entries retained in the memory.
To better monitor the transaction execution, the CDB_SQL_STATISTICS table is added in the information_schema database for you to query the statistics of the current transaction.

New parameters

Parameter
Status
Type
Default Value
Description
cdb_optimize_large_trans_binlog
true
bool
false
Switch of large binlog transaction replication optimization.
cdb_optimize_large_trans_binlog_last_affected_rows_threshold
true
ulonglong
10000
Large transaction replication optimization condition: threshold of the number of rows affected last time
cdb_optimize_large_trans_binlog_aver_affected_rows_threshold
true
ulonglong
10000
Large transaction replication optimization condition: threshold of the average number of affected rows
cdb_sql_statistics
true
bool
false
Switch of SQL statement execution statistics collection.
cdb_sql_statistics_info_threshold
true
ulonglong
10000
Maximum number of SQL statements saved in map of CDB_SQL_STATISTICS.
Note:
Currently, you cannot directly modify the values of the above parameters. If needed, submit a ticket for assistance.

Newly added information_schema.CDB_SQL_STATISTICS table

Name
Type
Description
DIGEST_MD5
MYSQL_TYPE_STRING
MD5 value calculated from the digest of the SQL statement.
DIGEST_TEXT
MYSQL_TYPE_STRING
SQL statement digest text format.
SQL_COMMAND
MYSQL_TYPE_STRING
SQL command type.
FIRST_UPDATE_TIMESTAMP
MYSQL_TYPE_DATETIME
The time when the statistics information of the SQL statement is generated for the first time.
LAST_UPDATE_TIMESTAMP
MYSQL_TYPE_DATETIME
The time when the statistics information of the SQL statement is last updated.
LAST_ACCESS_TIMESTAMP
MYSQL_TYPE_DATETIME
The time when the statistics information of the SQL statement is last accessed.
EXECUTE_COUNT
MYSQL_TYPE_LONGLONG
The number of executions of this SQL statement.
TOTAL_AFFECTED_ROWS
MYSQL_TYPE_LONGLONG
Total number of affected rows.
AVER_AFFECTED_ROWS
MYSQL_TYPE_LONGLONG
Average number of affected rows.
LAST_AFFECTED_ROWS
MYSQL_TYPE_LONGLONG
The number of rows affected last time.
STMT_BINLOG_FORMAT_IF_POSSIBLE
MYSQL_TYPE_STRING
Whether binlogs for this SQL statement can be stored in statement format. Valid values: TRUE, FALSE.
Was this page helpful?
You can also Contact Sales or Submit a Ticket for help.
Yes
No

Feedback

Contact Us

Contact our sales team or business advisors to help your business.

Technical Support

Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

7x24 Phone Support