【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】
mysql> select version();
+------------------------------+
| version() |
+------------------------------+
| 5.7.25-OceanBase_CE-v4.3.5.5 |
+------------------------------+
1 row in set (0.01 sec)
【问题描述】
在 sysbench 的 read_write 场景压测中,未指定 --rand-type=uniform 参数时,会频繁复现 6002(Transaction rollbacked)错误,但该问题在 MySQL、TiDB 的压测中(天级别长时间压测)均未出现。出于对潜在风险的担忧,想知道该错误的根本原因。
该问题已在多个 OceanBase 版本中出现(暂不确定是否覆盖所有版本),此前曾咨询原厂技术人员并在社区发帖求助,但未获得最终结论。社区内也有多个同类问题反馈,普遍建议通过添加 --rand-type=uniform 参数规避,但核心原因始终不明确。本次测试 4.3.5.5 版本时,该问题再次复现,特此跟进。
这是上次的发的贴:4.0bp2版本sysbench压测write场景异常退出
报错如下:
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
[ 1s ] thds: 100 tps: 32.91 qps: 2175.13 (r/w/o: 1801.14/212.43/161.56) lat (ms,95%): 669.89 err/s: 3.99 reconn/s: 0.00
[ 2s ] thds: 100 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
[ 3s ] thds: 100 tps: 4.99 qps: 24.95 (r/w/o: 0.00/19.96/4.99) lat (ms,95%): 2449.36 err/s: 3.99 reconn/s: 0.00
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
[ 4s ] thds: 100 tps: 18.01 qps: 82.06 (r/w/o: 0.00/64.05/18.01) lat (ms,95%): 3773.42 err/s: 6.00 reconn/s: 0.00
FATAL: mysql_drv_query() returned error 6002 (Transaction rollbacked) for query 'BEGIN'
FATAL: `thread_run' function failed: /usr/share/sysbench/oltp_common.lua:405: SQL error, errno = 6002, state = '40000': Transaction rollbacked
【复现路径】
sysbench --db-driver=mysql --threads=100 --time=6000000 --mysql-host=xxx --mysql-port=2883 --mysql-user='xxxx' --mysql-password='xxxx' --report-interval=1 --tables=1 /usr/share/sysbench/ol
tp_read_write.lua run
【附件及日志】
OB_LOG_ob_db01_4_10.112.20.4_20260116150632_20260116153632.zip (2.6 KB)
obdiag_transaction_rollback_20260116152927.tar.gz (7.0 KB)
其中OB_log日志是通过
SELECT trace_id,sql_id,tx_id,ret_code,trans_status FROM GV$OB_SQL_AUDIT
WHERE ret_code = ‘-6002’ ORDER BY request_time desc
查出的trace_id为YB420A701404-0006485517B5A934-0-0,在OCP是查到并下载的日志。
obdiag的日志是通过以下命令查到的:
obdiag rca run --scene=transaction_rollback
【部分结论】
- 和obproxy无关:因为是否经过obproxy,都能复现。