报如下错误,是否赢数据的写入["dispatch error"]

[2020/08/09 21:16:42.180 +08:00] [WARN] [conn.go:711] [“dispatch error”] [conn=27662] [connInfo=“id:27662, addr:172.21.96.6:43854 status:10, collation:utf8_general_c
i, user:etl”] [command=Prepare] [status=“inTxn:0, autocommit:1”] [sql=“replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,b
alance,trade_type,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_rem
ark,system_remark,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) val
ues (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,bala
nce,trade_type,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark
,system_remark,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance
,trade_type,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,sy
stem_remark,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?
,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,tr
ade_type,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,syste
m_remark,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,trade
type,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,system_r
emark,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?,?,?,?
,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,trade_ty
pe,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,system_rema
rk,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,trade_type,
serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,system_remark,
is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?,?,?,?,?,?,?
,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,trade_type,ser
ial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,system_remark,is

settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,trade_type,serial
_num,create_date,create_date_time,complete(len: 4427)”] [err="[executor:1]Can not prepare multiple statements"]

提供下集群版本
说明下是哪个节点得 log
简述下进行操作出现此报错

1、v3.1.0

2、tidb server节点出现的错误

3、使用java 方式解析日志 入库过程出现的错误

4、相关错误日志如下

这个是啥问题啊?

hi 上面报错的用 ; 连接的 replace 语句是您代码中生成的,还是用 batch api 生成的?

代码生成的啊

就是连接MySQL方式一样生成的增删改的SQL

如果是代码中拼接生产建议修改生成的 sql 为:

replace into accnt_zqsl_history ( id,trade_flow_id,zqsl_no,direction,amount,fee_amount,balance,trade_ty
pe,serial_num,create_date,create_date_time,complete_date,can_collect_date,collect_code,can_settle_type,merchant_zqsl_id,summary,product_type,user_remark,system_rema
rk,is_settled,is_collected,partner_zqsl_no,partner_zqsl_name,bank_zqsl_id,product_name,pnr,payment_method,payment_channel,project_name,dna) values (?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?), (?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?), (?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?), (?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?), (?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?), ...

即 values 后多个 () 用逗号链接方式

上面的报错信息是因为 TiDB 和 MySQL 一样不支持 multi-query 的 prepare,对于您这个 case 建议修改生成 sql,除了不报错还可以获得相比 multi query 更优的执行效率

这个是官方优化参数批量insert的结果啊
https://docs.pingcap.com/zh/tidb/stable/java-app-best-practices#开发-java-应用使用-tidb-的最佳实践

addBatch/executeBatch API

如果使用的是 batch api 做 rewrite 建议按照 https://docs.pingcap.com/zh/tidb/stable/java-app-best-practices#batch-相关参数

中提到的

批量更新时如果要配置 rewriteBatchedStatements = trueuseServerPrepStmts = true ,推荐同时配置 allowMultiQueries = true 参数

配置 allowMultiQueries = true 来避免 jdbc 尝试对 multi 进行 prepare

https://bugs.mysql.com/bug.php?id=96623 所述, jdbc 对于 multi 会先用 prepare 失败一次(因为 mysql 和 tidb 都没有支持),然后重新用文本执行成功(所以虽然看到有 tidb 日志但执行结果是成功的),解决办法是在 jdbc 链接参数中配置 allowMultiQueries = true 来让 jdbc 目前的代码避免发开始那次 prepare