PostgreSQL批量插入性能远低于MySQL的问题排查求助
问题:PostgreSQL批量插入性能骤降,远慢于MySQL
软硬件环境
- 硬件:Mac M1
- 软件:
- MySQL 8.1(JDBC Driver 8.0.33)
- PostgreSQL 16(JDBC Driver 42.6.0)
- Hikari连接池(自动提交关闭)
业务场景
本地存储约170000份JSON格式板球记分卡,每6周需重建数据库。每张记分卡生成100-400条INSERT语句,插入34张表。此前使用MySQL运行正常,因数据问题转用PostgreSQL,期望利用其性能优势。
性能对比
相同库结构与代码仅更换JDBC驱动后,性能差异显著:
- MySQL:短记分卡插入耗时约150ms,总耗时3-4小时,全程稳定在约30张/秒(7500行/秒)
- PostgreSQL:短记分卡初始插入耗时600ms,长记分卡初始耗时600ms;运行12小时后,长记分卡耗时增至1.6秒,总耗时超12小时仍未完成。性能测试显示,PostgreSQL初始速度为38张/秒,后续骤降至5张/秒(测试基于无外键、无索引的全新库,更换连接池使用方式、重启服务/机器均无改善)
已尝试的优化措施
- 移除PostgreSQL表的所有索引与外键
- 执行
ALTER ROLE myrole SET session_replication_role = 'replica'禁用触发器 - 采用批量插入方式
- 单记分卡对应一次事务提交
求助需求
作为PostgreSQL新手,请求排查该性能差异的原因,并提供针对性的优化方案。
内容的提问来源于stack exchange,提问作者Kevin Jones
相关产品推荐
相关产品推荐

