• Firebird Connection pool is full


    今天在做Firebird V3.0.3  x64 版本内存测试,本地PC上,准备开启800个事务(保持不关闭),每个事务做些事,尽量不释放内存。

    每次测试当事务数达到100时,就提示Connection pool is full,此时内存才吃到500+MB。

    在系统配置里没有一个选项是最大连接数,最后发现是在连接字符串里,有个选项是 MaxPoolSize 。

    令 MaxPoolSize = 1000 ,程序敞开跑,最后后台进程用到 5GB多,PC内存不够了。

    以下是连接字符串:

     1 FbConnectionStringBuilder connBuilder = new FbConnectionStringBuilder();
     2 connBuilder.DataSource = "localhost";
     3 connBuilder.UserID = "sysdba";
     4 connBuilder.Password = "123456";
     5 connBuilder.Database = "x";
     6 connBuilder.Charset = "utf8";
     7 connBuilder.ServerType = FbServerType.Default;
     8 connBuilder.Dialect = 3;
     9 connBuilder.MaxPoolSize = 1000;
    10 connBuilder.Pooling = true;
    11 _connStr = connBuilder.ConnectionString;

    测试程序:

     1     for (int i = 0; i < 800; i++)
     2     {
     3         var db = DbCtxt.NewDbContext().UseTransaction(true);
     4         for (int j = 0; j < 500; j++)
     5         {
     6             db.Insert("m_user").Column("code", "1234567890")
     7                 .Column("label", "ABCDEFGHIJ")
     8                 .Column("pwd", "1234").Column("is_del", false).Execute();
     9         }
    10     }

    测试结束清理连接池: FirebirdSql.Data.FirebirdClient.FbConnection.ClearAllPools(); 只会清理池子里暂时不用的连接,正在使用的连接会被打标记,等连接使用完关闭时,自动清理掉。

    内存占用:

     2、如果用32位的版本,内存最多吃到1928MB就不行了,提示“无法从操作系统分配内存”  unable to allocate memory from operating system 

    Note:一个连接connection,最多只能有65000个handler(本文例子 大概就是插入行数),否则就会抛异常: too many open handles to database 。

    所以在做测试时,一定不要用using,他会自动把连接释放到连接池,下次再次申请连接时,又会申请到此连接,就会提示太多句柄被申请。

  • 相关阅读:
    静态方法
    表单的验证
    jquery笔记
    jquery参考
    dom体系 和获取其他页面的Window对象
    jsRegExp对象
    jsDate对象
    js案例
    Sqli-Labs 闯关 less 42-53
    Sqli-Labs 闯关 less 32-41
  • 原文地址:https://www.cnblogs.com/jonney-wang/p/9275617.html
Copyright © 2020-2023  润新知