mysql分表插入数据,连接池耗尽 返回


求助,使用按月份分表,现在压测发现,分表插入,会耗尽连接池,提示
all pooled connections are in use
但是不分表插入,不会报这个,请问有什么解决办法么
热忱回答(11)
-
苦瓜 VIP0
2026/3/4
ch补充,msql的information_schema.INNODB_TRX表,会积压950左右
0 回复 -
fate sta VIP0
2026/3/4测试参数是什么 ,提供具体数字。
0 回复 -
fate sta VIP0
2026/3/4低于多少是正常的,高于多少是异常的。都描述清楚
0 回复 -
苦瓜 VIP0
2026/3/4@fate sta:测试代码:
var entity = new BizUserWordRecordEntity();
entity.Id = ButterflyIdGenerator.NextId();
entity.AnswerBeginTime = DateTime.Now;
entity.AnswerEndTime = DateTime.Now;
entity.CreateTime = DateTime.Now;
entity.UpdateTime = DateTime.Now;
entity.Status = Status.Enabled;
await this._sqlSugarClient.Insertable(entity).SplitTable().ExecuteCommandAsync();
jmeter参数:
线程数:1500 Ramp-Up时间(秒):1 循环次数:30 【测试正常】
线程数:2000 Ramp-Up时间(秒):1 循环次数:30 【运行一半会出现all pooled connections are in use】
0 回复 -
苦瓜 VIP0
2026/3/4@fate sta:AllowLoadLocalInfile=true;MaxPoolSize=500;MinPoolSize=20;ConnectionTimeout=150;ConnectionLifeTime=60;Pooling=true;persistsecurityinfo=True;SslMode=none;
这是连接字符串
0 回复 -
fate sta VIP0
2026/3/4ORM写入达不到1500并发的。
0 回复 -
fate sta VIP0
2026/3/4建议你多条记录扔一起,批量写入减少并发。
0 回复 -
fate sta VIP0
2026/3/4这种方式并发比分表的要高。 但是分表不存在会报错。需要你一次性将分表都建好。防止出现没有分表的情况
await db.Insertable(insertObj).AS(表名).ExecuteCommandAsync();
0 回复 -
苦瓜 VIP0
2026/3/4@fate sta:此方法甚妙!感谢大佬!!!
0 回复 -
苦瓜 VIP0
2026/3/4@fate sta:是不是其他涉及高并发的插入,都可以用AS(表名)来实现,这会不会带来额外的开销,比如CPU或者内存
0 回复 -
fate sta VIP0
2026/3/5@苦瓜:这个方法处理会高效一些。不会有查询表是不是存在的方法。
0 回复