果糖网

连接池有大量sleep状态 返回

SqlSugar
10 146
该叫什么 ethan 发布于2周前
悬赏:5 飞吻

数据库报错error connecting: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached..

下面是数据库连接的代码,求大神指点!所有方法都是用的async Task

image.png

热忱回答10

    1. issharedsamethread 不支持异步注释掉 

    2.  sleep数据不超过50 都是正常现象

    0 回复
  • ethan ethan VIP0
    2周前

    @fate stay night:大神,我用了仓储,由于我们的业务特殊性,用户批量查询时(一次100条数据),一个请求使用了10个Task,一个Task10条数据遍历、查询。后台还有定时任务对接第三方系统,为了提高效率,一次也是开了多个线程。时间查了就提示连接池满了。IsAutoCloseConnection是等于true的。SqlSugar注入模式是Scope,AutoFac注入是InstancePerDependency

    0 回复
  • @ethan:建议改成sqlsuagr.ioc 或者把你的方法改成 异步方法

    0 回复
  • sqlsugar.ioc是有过线程安全处理的

    0 回复
  • @ethan:需要注意的是现在的设计,注入的db是不能在 task 中使用的 ,task要new db  , 但是sqlsugar.ioc或者异步方法是支持的

    0 回复
  • ethan ethan VIP0
    2周前

    @fate stay night:谢谢

    0 回复
  • ethan ethan VIP0
    2周前

    @fate stay night:您好,解决了注入的db在task中使用的问题,但是随着大量的测试,又发现了新的问题,当我频繁调用数据数据写入接口时,数据库连接没有能及时释放,导致短时间内连接池爆满了。

    0 回复
  • @ethan: Task中里面用 DbScoped.Sugar  ,把Task.Run中的操作全部换成 DbScoped.Sugar.xx直接操作

    0 回复
  • 设置好自动释放 

    0 回复
  • ethan ethan VIP0
    1周前

    @fate stay night:你好,请问SugarIoc有Demo吗

    0 回复

学习文档