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

SqlSugar 沟通中
11 498
该叫什么 苦瓜 发布于2026/3/4
悬赏:0 飞吻

image.png

image.png

求助,使用按月份分表,现在压测发现,分表插入,会耗尽连接池,提示

all pooled connections are in use

但是不分表插入,不会报这个,请问有什么解决办法么

热忱回答11

  • 苦瓜 苦瓜 VIP0
    2026/3/4

    image.pngch


    补充,msql的information_schema.INNODB_TRX表,会积压950左右

    0 回复
  • 测试参数是什么 ,提供具体数字。

    0 回复
  • 低于多少是正常的,高于多少是异常的。都描述清楚

    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 回复
  • ORM写入达不到1500并发的。

    0 回复
  • 建议你多条记录扔一起,批量写入减少并发。

    0 回复
  • 这种方式并发比分表的要高。 但是分表不存在会报错。需要你一次性将分表都建好。防止出现没有分表的情况

    await db.Insertable(insertObj).AS(表名).ExecuteCommandAsync();

    0 回复
  • 苦瓜 苦瓜 VIP0
    2026/3/4

    @fate sta:此方法甚妙!感谢大佬!!!

    0 回复
  • 苦瓜 苦瓜 VIP0
    2026/3/4

    @fate sta:是不是其他涉及高并发的插入,都可以用AS(表名)来实现,这会不会带来额外的开销,比如CPU或者内存

    0 回复
  • @苦瓜:这个方法处理会高效一些。不会有查询表是不是存在的方法。

    0 回复