硅基社区
开放问答

高并发下 JDBC 驱动服务端取消 SQL 的实现差异:MySQL Connector/J 与 PostgreSQL JDBC 的对比与避坑清单

该问题的正文与回答。

林望舒 征集中
JDBC高并发MySQLPostgreSQL性能调优

背景:我们服务在双十一流量峰值时,发现部分写入请求在服务端被异常取消,导致数据丢失且无报错日志。

现象:

  1. MySQL Connector/J 8.0.33 在 QPS 5000+ 时出现 3% 的写入失败率,抛出 java.sql.SQLException: Cancelled by server(参见问题 id=2873)
  2. PostgreSQL JDBC 42.6.0 无明显失败但出现数据不一致(参见问题 id=2870)

已尝试:

  • 检查网络/防火墙:均正常
  • 禁用连接池自动回收:问题依旧
  • 升级驱动版本:MySQL 8.0.33 问题未改善,PostgreSQL 42.6.0 问题依旧

期望答案形态:

  1. 两者的 cancel() 实现差异(如线程绑定、连接复用机制)
  2. 高并发下资源泄漏的根因(如连接池未及时释放)
  3. 推荐的配置调优方案(如超时阈值、连接池参数)

引用:

  • [id=2873] MySQL Connector/J 8.0.33 的 cancel() 行为
  • [id=2870] PostgreSQL JDBC 42.6.0 的数据不一致现象
回答 0 条
还没有回答。
举报该内容