rdbms - 你如何设置你的连接池?

标签 rdbms connection-pooling

在以下方面设置游泳池的最佳方法是什么: -

  • 你什么时候创建连接?
  • 你什么时候关闭连接,你会关闭所有连接吗?
  • 你测试连接还是不错的。何时以及如何?
  • 您如何确定最大连接数的好数字?
  • 你有什么样的监控来确保池的用户表现良好?你能阻止一段糟糕的代码带走所有东西吗?
  • 您是否编写了自己的池,或使用了第三方库?

  • 我相信这是一个不可知论的问题,但欢迎对特定数据库/语言的“功能”发表评论。例如,在某些数据库上连接可能比其他数据库更慢或更昂贵。

    澄清一下,我不打算从头开始编写一个池,这个问题更多的是关于如何配置一个现有的池化库。

    最佳答案

    当它只是一种设计模式而不是通用库时,我用 Java 为数据库编写了一个连接池。现在我使用 Tomcat 中内置的那个。

    我用一个线程来监控池的几个方面和几个参数来控制它的行为......

  • minimumInPool="3"... 前三个是在启动时创建的。游泳池永远不允许低于三。
  • maximumIdleTimeBeforeRemoval="60"... 如果一个连接空闲一个小时,则删除它并创建一个新连接。空闲时间可能意味着池中只有最少三个。
  • maximumInUseTimeBeforeRemoval="30"... 如果给定的连接已 checkout 超过 30 分钟,则可能有问题。召回它,并终止连接。
  • maximumTimeBeforeRemoval="60"... 如果超过 60 分钟,请将其删除。
  • maximumUsageBeforeRemoval="1000"... 如果已 checkout 超过 1000 次,请将其删除。
  • monitorInterval="15"... 每 15 分钟检查一次上述参数。

  • 几年来,这对我很有帮助。在一次狂野的窥视中,我见过的池中最高的是 151 个连接。通常游泳池在大量使用期间大约有十几个,并且在清晨空闲到最少三个。

    我使用 Oracle 的 JDBC 瘦驱动程序并连接到 Oracle 数据库。

    关于rdbms - 你如何设置你的连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/271188/

    相关文章:

    Java Web 应用程序线程在 java.net.SocketInputStream.socketRead0( native 方法)中因数据库操作而卡住

    mysql - RDBMS - 无法弄清楚将该表放置在哪里

    mysql - MySQL 中所有行的计数总和 (*)

    Erlang 中的 Postgresql 连接池

    java - 如何在多线程环境下高效使用 RestTemplate?

    java - 当 HikariCP 警告泄漏时发送电子邮件

    sql-server - 使用 View 提高查询性能

    sql - 重新使用选择子查询/结果

    sql - SELECT 的事务隔离级别

    tomcat - getConnection() 和 getConnection(String username, String password) 之间的区别