tencent cloud

TDSQL Boundless

V20.1.x

PDF
Focus Mode
Font Size
Last updated: 2026-04-17 11:56:51

V20.1.4

Bug Fixes

When implementing install snapshot, braft updates the snapshot's meta information before task execution. The Raft leader may prematurely purge Raft logs, causing log receivers to additionally pull Raft logs from cos, thereby increasing Binlog replication delay. By adjusting the timing at which snapshot meta information is set on log receiver nodes, the probability of such log purges is reduced.
When a delete SQL statement within a transaction removes multiple rows of data from the same table with different record_version values, the generated Binlog may cause downstream consumption failures.
When a partitioned table is reset, it does not clear the m_retrieved_record for all partitions.

V20.1.3

Version Release Notes

Scalability and Performance

When the
When there are too many Binlogs waiting to be flushed to disk, exceeding the configured wait_flush_binlog_cache_max_size, it will block the upstream from continuing to produce Binlogs to avoid OOM.
When the Binlog cache in the LogHandler layer is excessive, it is temporarily written to disk using rocksdb. Limits are imposed on the overall Binlog cache (binlog_dump_log_handler_cache_max_size) and the Binlog cache for a single transaction (binlog_dump_max_size_flush_disk_single_trans).
Eliminating function calls to improve Binlog performance
Reducing function calls during Binlog generation to improve Binlog production performance.
Persist the progress stored in logservice_dump_seqno to local rocksdb to prevent Binlog replay from being affected by write-behind caching.
Previously, Binlog progress was stored in sys.logservice_dump_seqno. Testing revealed that when TDStore enters write-behind caching, it affects Binlog replay. Storing Binlog progress in local rocksdb improves Binlog replay performance.

Stability

Split RG commit Optimization
Removing the statistics update logic from the split rg commit process (after sst boundary alignment is disabled, the estimation function for updating statistics uses scan-based sampling; this step becomes time-consuming when splitting TB-level RGs) and deferring it until after allowing transactional reads/writes. This reduces rg split commit latency and minimizes blocking transaction time.
The table does not enter an intermediate state during alter table rename.
When an alter table rename operation fails, the rollback process sets the table status to public.
LogService MysqlClient uses the UseDB function.
LogService's MysqlClient connection uses the UseDB function to ensure that the `use db` statement remains valid even after connection disconnection.
Introduce the table_def_cache_max_mem_size parameter to enable TABLE_SHARE eviction based on memory size.
Introduce the table_def_cache_max_mem_size parameter to limit the memory size occupied by the TABLE_SHARE structure. If the memory size occupied by the TABLE_SHARE structure exceeds this parameter value, it will trigger the eviction mechanism.
Account the memory allocated by ha_rocksdb::alloc_key_buffers to table_open_cache_max_mem_size.
The memory allocated by ha_rocksdb::alloc_key_buffers is also accounted to the table_open_cache_max_mem_size variable, making the table_open_cache_max_mem_size calculation more precise and the eviction policy for table structures more accurate.
RefOrNull may return incomplete data when parallel processing is used
Fix the issue where RefOrNull may return incomplete data during parallel processing.
Enhanced memory control capability for Binlog log receiver to eliminate OOM.
Added the log_receiver_get_raft_log_from_cos_total_size parameter to control the memory usage when the Binlog log receiver obtains Raft logs from cos. This eliminates OOM issues caused by excessive memory consumption when Raft logs are fetched from cos.
CDC nodes are not affected by variables persisted via set persist.
CDC node specifications may differ from hybrid node specifications. If hybrid nodes persist resource-related variables, they may report errors. Therefore, CDC nodes are not affected by variables persisted via set persist.
Fast Online DDL maintains GES during the playback process until completion, then releases it.
MC will maintain GES until the ingest behind Raft log generated by Fast Online DDL completes playback on all nodes, ensuring data consistency across all nodes.

Operations

Breakdown of Time Consumption Statistics for split rg job
Refined time consumption statistics for split rg, particularly the commit process, to facilitate online troubleshooting.
Reduce the size of individual Binlog files
Adjust the size of individual Binlog files to prevent them from becoming excessively large.
Change delayed reporting for CDC nodes
The latency statistics have been changed from replay_leader_ts to commit_ts_barrier, ensuring that user rg latency exceeds or equals sys rg latency for more accurate metrics.

Bug Fixes

Several rpcs in tdstore failed to fully return ret in the response, which may cause behavioral errors in SQLEngine.
Concurrent participant rollback and active master switchover may cause some participants to fail to be cleared.
Transactions may become stuck and unable to progress when log synchronization fails during UpdateCoorTerm, as the coor_term_ field cannot be updated.
The concurrent scenarios of RG split + coordinator master switchover + pre-switchover COMMIT state + post-switchover PREPARE state may cause transactions to become stuck and fail to progress.

V20.1.2

Version Release Notes

Database management

Optimization of LogService monitoring information
Provide more granular and independent monitoring for multiple CDC scenarios and situations where both Binlog dump and disaster recovery are enabled within a single CDC.

Stability

Parallel Execution Correctness Issue
When parallel execution is performed on mrr tables, it produces incorrect results.
hint encounters issue where set_var optimizer_switch does not take effect.
hint encounters set_varoptimizer_switch not taking effect, and outline also fails to take effect.
During CPU hot modification, even if the number of replay threads remains unchanged before and after the modification, it still waits for all replay tasks to complete.
When the number of replay threads remains unchanged before and after modification, skip the waiting process and return directly.

Scalability and functionality

Addition of Forceful Disconnect Feature for Disaster Recovery Links
Disaster recovery connections allow for forceful disconnection, but do not guarantee data consistency between upstream and downstream.

Security Enhancement

Prevention and Error Reporting of CORRUPT DATA
Added validation mechanism to the write process to prevent memory overrun and writing of erroneous data. When corrupt data is read, print the complete key-value for troubleshooting and analysis.

Bug Fixes

When the range cache is used to estimate the number of rows within a range, it incorrectly obtained statistical information for all block ranges.
When the range cache is used to estimate the number of rows within a range, some range queries generate gap ranges. Although these gap ranges contain no data, they still require access to the storage layer each time.
Before splitting or merging a Region, the system checks the data size discrepancy among replicas. If the data discrepancy is excessive, splitting or merging is prohibited. However, due to a code issue, the comparison of size was omitted, and only the comparison of keys was performed.
A partial replay failure of the commit log triggered a full replay of the entire 1PC log. Due to flawed duplicate detection logic for prepare log replay, state transitions experienced persistent failures.
The MysqlClient used for disaster recovery synchronization introduced a memory limit, resulting in an unexpected slowdown of the synchronization speed.
The MysqlClient used for disaster recovery synchronization introduced a memory limit, causing an unexpected update exception to the global minimum synchronization timestamp, which resulted in the disaster recovery synchronization becoming stuck.
Since merging RGs deletes the memory information of vanished RGs in MC, the log-service continuously reports errors when replaying jobs related to these RGs. Normally, the log-service would prevent MC deletion, but this prevention mechanism fails during the establishment of disaster recovery instances based on backups.
The MysqlClient mode used for disaster recovery synchronization will synchronize unexpected system tables.
Binlog: When a join update is performed between two tables where columns from one table are used to update another table, the primary key for old rows is incorrectly generated in the Binlog.
The GetRegionsByKeyRange RPC times out due to failure to acquire the HyperNodeInfo lock.
When a node's IP address is updated, it results in the loss of the role field information in PeerId.
During the SQLEngine startup process, node information is not persisted promptly. If startup fails for other reasons after successful registration, subsequent restarts attempting to re-register the node will fail due to address conflicts.
Printing CORRUPT DATA alters the behavior of read_row_from_secondary_key, which may cause incorrect query results when MRR+ICP is enabled.
Fixed an issue where the Binlog Log Receiver in CDC nodes failed to properly trigger the close (close) operation for Raft Log files, preventing the required logs from being obtained from COS.
When fast online copy ddl is performed, check whether the table schema versions are consistent; if not, return an error.
A deadlock occurs when a disaster recovery task is canceled while it is in progress.
When obtaining the routing for the node where a table is located via the SQL forward forwarding feature, do not fetch all routes for that table; only one Region needs to be obtained.

V20.1.1

Bug Fixes

Strengthened the DDL rollback process by determining whether a table can be deleted based on the tindex id.
When executing rename or alter rename ddl operations, perform conflict detection for the new name.
During upgrades, the system tables in mysql do not get rebuilt with the change of server_sub_version.
Adjust the default value of tdstore_rpc_max_body_size to 512M and remove the upper limit on tdstore_txn_max_entry_size.
Resolve the issue where the outline parsing thread thd copies environment variables from the client session.
Fixed a bug where the write fence was not set before the operation returns to the table during multi-table joins.

V20.1.0

Version Release Notes

Database management

Supports hot loading for modifying configurations of binlog_space_limit, binlog_dump_cache_max_size, and tdstore_data_db_max_background_jobs.
The three parameters above are related to disk space, memory size, and the number of cpu cores, respectively. When node specifications change, their corresponding values are dynamically calculated based on the new specifications.
Provides an api to pin the location distribution of log receivers in multi-CDC node MySQL Client mode.
Provides an API to specify the binding of Resource Groups (RGs) and data objects (database/table names) to node mappings.
Provides a switch to ensure that the distribution of receivers is no longer scheduled during runtime.
Added the DBMS_ADMIN method CHECK_UPGRADE_CDC to verify that there are no ongoing DDL operations in the current cluster and that all DDLs have been replayed.
Used for pre-upgrade checks to verify whether CDC nodes can be upgraded. If there are DDL operations in progress or unreplayed DDL statements, this DBMS package will fail the check.

Scalability and Performance

Performance Optimization: BulkLoad Import Supports Adaptive Commit Policy
During data import, it supports adaptive merging/splitting of transactions within a Session to enhance Bulk Load import performance.
MC adaptively adjusts the token bucket size of the throttle configuration based on its own CPU specifications.
The token bucket size calculation method: net_limiter_burst (token bucket size) = 100 * log2(x) + 400, where x represents the number of cores.
Supports affinity binding between subpartitions within RANGE/LIST + HASH secondary partitioned tables.
Adds a predefined DP rule inner_affinity. When a secondary partitioned table is created, binding dp enables corresponding subpartitions under different primary partitions to be bound to the same RG. For example, p0.sp0 and p1.sp0 will be bound together.
CREATE TABLE ... USING DISTRIBUTION POLICY inner_affinity;
Outline supports EXPLAIN ANALYZE.
In this version, EXPLAIN ANALYZE can also match Outline rules.
Optimized Speed for Batch Retrieval of region Routing
This version refactored and optimized the RPC implementation for MC to obtain routing. When a large number of region routes are pulled, the API speed has improved by orders of magnitude, reducing persistent connection timeout issues caused by concurrent routing pulls.
Supports explicit affinity for primary key partitioning.
Supports explicitly creating affinity policies for primary KEY partitions via SQL to bind between KEY primary partitioned tables with identical structures.
CREATE TABLE SQL: CREATE PARTITION POLICY {policy_name} PARTITION BY KEY COLUMNS ({columns_num}) PARTITIONS {partition_num};. For details, see CREATE PARTITION POLICY.

Syntax and feature

Introduction of the INDEX_FOR_GROUPBY/NO_INDEX_FOR_GROUPBY hints
INDEX_FOR_GROUPBY/NO_INDEX_FOR_GROUPBY provide hints to control the adoption of the Loose Index Scan method (loose index scan) during GROUPBY operations, reducing scan overhead. For details, see INDEX_FOR_GROUPBY.

Stability

Modify the column length limit for data dictionary cache
Modify max_dd_cache_size to 100 to reduce the upper limit of memory usage for the data dictionary cache.
During MC throttling, compute nodes delay sending RPCs to MC.
When MC enters throttling state, compute nodes delay sending RPC requests to MC to prevent overloading MC nodes (overloading may render the system unserviceable). The compute engine has added parameters to regulate RPC interactions with MC.
BulkLoad Data Import Supports Adaptive Commit Policy.
BulkLoad data import supports an adaptive commit policy, aggregating writes from different transactions within a session and committing when the data volume reaches a certain threshold.

Restoring via Backups

Backup Storage Media Supports S3.
Added support for backing up to S3-compatible storage media, improving data backup reliability and storage scalability.

Data Migration

Myloader Tool Supports Aggregating Multiple Files as a Single Transaction for Commit.
Currently, the maximum size of a single transaction that MyLoader can commit is limited to the size of a single SQL file. A new parameter package-file-cnt has been added to control the number of files aggregated by MyLoader as a single transaction. When package-file-cnt>1, it enables the feature of aggregated file commits.

Operations

Supports Dynamic Modification of the tdsql_auto_increment_batch_size Parameter.
Remove the read_only restriction. No restart is required after parameters are modified. tdsql_auto_increment_batch_size is a GLOBAL-level variable, and changes take effect immediately.
TDStore Added Monitoring Metrics.
Hyper nodes added the monitoring metric total_sst_files_num, which indicates the current number of SST files.
MC Static Parameters Support Rolling Restart.
Static configuration parameters that require restarting MC nodes now support node-by-node configuration and rolling restarts, delivering high system availability.

Bug Fixes

Fixed an issue where concurrent RG splitting and distributed transaction commits could cause distributed transactions to hang when log synchronization fails.
When TDSQL's tdsql_use_online_copy_ddl is set to true by default, some Online DDL operations cannot be executed. For such errors, non-partitioned tables catch and throw specific exception messages, while partitioned tables only throw ERROR 8510 (HY000): SQLEngine system error 'Unknown error occurs'.
During rebalancing, the src node can be selected, but no suitable target node can be found.
Hotspots may cause primary keys and indexes to be partitioned into different RGs.
Fixed an issue where the MDL lock was not promptly released upon completion of the ingest-behind subtask thread.
log receiver encounters on_error triggering a refresh while SQLEngine is killed, resulting in synchronization data loss.
During the execution of create table … like ddl, if concurrent ddl operations exist on the source table, using wait during retry will block other bthreads on the current thread.
Fixed an issue where the CPU hot reduction process gets stuck.
After SQL execution completes, clear the as_connection_closed_ flag in the THD rpc_ctx.
Fixed an issue where a master switchover during Fast Online DDL execution before RG routing partitioning may cause DDL failure.
Fixed an issue where there was a 100s delay in reestablishing connections between TDStore and MC.
Fixed an issue where during incremental recovery of Bulk Load commit logs, the cf_name was not populated when SSTs were split, causing td_sst_healthy_check failure.
Fixed an issue where TDStore may fail to restart when serving as a time source.

Parameter Change

Change Type
Parameter Name
Description
Modification
Support dynamic modification of the tdsql_auto_increment_batch_size parameter.

Syntax change

Change Type
Syntax
Description
Addition
The INDEX_FOR_GROUPBY/NO_INDEX_FOR_GROUPBY hints control whether the Loose Index Scan method (loose index scan) is used for GROUPBY operations to reduce scanning overhead.
Modification
Supports explicitly creating affinity policies for primary KEY partitions via SQL to bind between KEY primary partitioned tables with identical structures.

Help and Support

Was this page helpful?

Help us improve! Rate your documentation experience in 5 mins.

Feedback