java - 如何(动态)确定最佳数据库连接数?

标签 java database oracle database-connection connection-pooling

如何动态配置数据库连接池中的最大连接数?

我几乎放弃了使用“硬编码”(配置文件,但仍然)的连接数。有时,更多的连接可以提供更好的性能。有时,连接越少效果越好。 您将使用什么衡量标准来确定您是否打开了太多连接并且实际上是否因此损害了性能?请记住,我不能只是“停止世界”来运行性能测试 - 我需要一些我可以自己查询响应的东西(我没有具体的测量结果 - 有些很慢,有些很快,我可以事先不知道哪个是哪个)来确定。
(请注意,我使用 Java JDBC 和底层 DataDirect 驱动程序)

这种方法是否在某处使用过(并且是否成功)?如果没有,当您必须同时支持 Oracle 和 MS SQL 时,您将如何解决“最佳连接数是多少”,两者都适用于多个版本,并且查询本质上差异很大(索引查找/非索引查找/批量数据获取/条件匹配(索引和非索引,带或不带通配符))?

[我知道这类似于 optimal-number-of-connections-in-connection-pool问题,但我问的是动态配置,而他问的是静态配置]

最佳答案

如果您将用户排队等待空闲的数据库连接,那么他们正在等待未知或人为强加的东西。

如果您让它们访问数据库,您至少会发现正在争夺哪些资源(如果有)。例如,如果是磁盘 I/O,您可以移动文件以将 Activity 分散到更多或不同的磁盘上,或者购买一些 SSD 或更多内存用于缓存。但至少您知道自己的瓶颈是什么,并且可以采取措施解决它。

如果存在某些查询或服务占用资源,您应该查看资源管理器来隔离/限制这些 session 。

您可能还想关闭未使用的 session (因此午餐时您可能会遇到 500 个 session 的峰值,但当一些较大的批处理作业运行时,夜间将其降至 50 个)。

关于java - 如何(动态)确定最佳数据库连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423420/

相关文章:

Oracle删除语句: how many rows have been deleted by cascade delete

java - 为什么这是无效的 Java?三元运算符输出的类型

java - 是否可以在重写的方法中使用专门的参数?

java - 使用另一个类中的方法将数字添加到数组中?

java - java有编译时绑定(bind)吗?

sql - 选择更新等待网络操作?

java - LPX-00607 用于 ora :contains in java but not sqlplus

oracle - ODI 11g 和 12c 之间的差异

java - GridDB JAVA API 中的异常

c# - SQLite 自动递增问题