数据库插入瓶颈是高频写入场景下的典型问题,核心思路是减少单条开销、放大批量收益、绕开锁/IO冲突、或剥离主链路。下面按“由浅入深、可落地”的方式给你一套破局清单。
❌ 错误:
INSERT INTO t VALUES (1),(2),... 一条一条来
✅ 正确:
INSERT INTO t (a,b,c) VALUES
(1,2,3),
(4,5,6),
(7,8,9);
rewriteBatchedStatements=true(JDBC)SET FOREIGN_KEY_CHECKS=0;
MySQL 示例:
innodb_buffer_pool_size = 70% 内存
innodb_log_file_size = 1G+
innodb_flush_log_at_trx_commit = 2 (允许丢最后一秒)
业务 → MQ → 消费线程 → 批量写库
比 insert 快 10~100 倍:
LOAD DATA INFILE 'xxx.csv' INTO TABLE t;
适合:
用下面判断:
| 现象 | 瓶颈 |
|---|---|
| CPU 高 | 索引 / 锁 |
| IO 高 | 磁盘 / redo |
| 锁等待 | 事务 / 热点行 |
| 单线程慢 | 应用串行 |
插入瓶颈 = 单条太贵 + 锁太多 + 主库太忙
解法就是:批量、异步、少索引、分而治之
如果你愿意,可以告诉我:
我可以直接帮你算“最优批大小 + 参数”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。