序号 | 可能原因 |
1 | 单个事务写入数据量过大,超过 tdstore_max_txn_size 限制,导致事务被拒绝写入。 |
2 | 单个事务涉及的参与者(复制组)数量超过 tdsql_transaction_max_participants 限制。 |
3 | 批量导入操作(如 LOAD DATA、INSERT ... SELECT)未分批执行,单次操作数据量过大。 |
4 | 长事务执行时间过久,持有锁和内存资源时间过长,影响其他业务。 |
5 | ALTER TABLE 等大表 DDL 操作产生大量数据拷贝,事务过大。 |
可能原因 | 解决思路 |
单事务写入量过大 | 拆分大事务为多个小事务,通过控制台调整 tdstore_max_txn_size 参数。 |
参与者数量超限 | 减少单事务涉及的表和分区数量,分批执行跨表操作。 |
批量导入未分批 | 将大批量导入拆分为多批次,每批次控制在合理数据量内。 |
长事务持锁过久 | 优化事务内 SQL 执行效率,缩短事务范围,设置合理的超时时间。 |
DDL 数据拷贝过大 | 确认 tdsql_split_trans_during_alter_copy 参数已开启,使 DDL 自动拆分事务。 |
监控指标 | 说明 | 关注点 |
SQL 失败数 | 每秒失败的 SQL 数量 | 事务超限时失败数会突增 |
内存利用率 | 实例内存使用率 | 大事务执行期间内存是否飙升 |
每秒处理的事务数 | 每秒事务提交数 | 事务数是否异常下降 |
慢查询数 | 每秒慢查询数量 | 大事务是否导致其他查询变慢 |
活跃线程数 | 当前活跃线程数 | 是否有线程长时间被大事务阻塞 |
SELECTreplication_group_id,transaction_id,disk_usage_bytes,memory_usage_bytes,rollback,destroyedFROM information_schema.TDSTORE_LARGE_TXNWHERE destroyed = 0ORDER BY disk_usage_bytes DESCLIMIT 20;
replication_group_id:复制组 ID。transaction_id:事务 ID。disk_usage_bytes:磁盘使用量(字节),反映事务数据在 SST 文件中的大小。memory_usage_bytes:内存使用量(字节),反映事务在 MemTable 中的大小。rollback:是否已回滚。destroyed:是否已销毁。disk_usage_bytes 或 memory_usage_bytes 值较大的事务,记录其 transaction_id,用于后续排查。SELECTID,USER,HOST,DB,COMMAND,TIME,STATE,INFOFROM information_schema.PROCESSLISTWHERE COMMAND != 'Sleep'ORDER BY TIME DESCLIMIT 20;
TIME 值较大的会话,这些会话可能正在执行长事务或大事务。PROCESSLIST 查询结果中 TIME 值较大的会话,通过执行时间、SQL 文本等信息综合定位大事务对应的会话 ID。KILL <会话ID>;
KILL 操作会中断正在执行的事务并触发回滚,回滚过程中可能继续占用资源。请确认目标会话后再执行,避免误杀正常业务会话。tdstore_max_txn_size 会增加单事务可占用的内存,在高并发场景下可能导致内存压力增大。INSERT INTO ... SELECT ... 拆分为多个带 LIMIT 的子查询。tdstore_max_txn_size 限制以内。LOAD DATA 等批量导入方式,可通过控制台调整以下参数,详细操作请参见 设置实例参数。tdstore_bulk_load_total_merge_buffer_size:批量导入合并缓冲区总大小,控制批量导入过程中的内存使用。tdstore_bulk_load_merge_chunk_size:批量导入单个合并块大小,控制单次归并排序的数据量。max_execution_time:SELECT 语句的最大执行时间(毫秒),设置为合理值可防止慢查询长时间运行。wait_timeout:连接空闲超时时间(秒),超过此时间未活动的连接将被自动关闭。ALTER TABLE 等大表 DDL 操作会进行数据拷贝,可能产生大事务。TDSQL Boundless 支持在 DDL 期间自动拆分事务,避免单事务过大。请根据业务需要调整以下参数,详细操作请参见 设置实例参数。tdsql_split_trans_during_alter_copy 参数:确认该参数值为 ON。若为 OFF,建议修改为 ON,使 DDL 数据拷贝期间自动拆分小事务提交。tdsql_bulk_commit_records 参数:控制 DDL 拷贝期间每批提交的记录数。默认值为3000,可根据表数据量适当调整。tdsql_txn_keep_alive_lease_sec 参数。该参数控制 TDStore 在多久未收到事务心跳后释放事务上下文,默认值为 3600 秒(1 小时)。若大事务执行时间超过此值,可适当调大。详细操作请参见 设置实例参数。tdsql_split_trans_during_alter_copy 已开启,避免 DDL 产生过大事务。文档反馈