如何(动态)确定最佳db连接数?

时间:2010-12-12 19:06:09

标签: java database oracle database-connection connection-pooling

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

我几乎放弃使用“硬编码”(配置文件,但仍然)连接数。有些时候,更多连接提供更好的性能。在其他时候,较少的连接可以做得更好。 您将使用什么度量来确定您是否打开了太多连接并且实际上是否会损害性能?请记住,我不能只是“停止世界”进行性能测试 - 我需要一些我自己的查询响应(其中我没有具体测量 - 有些很慢,有些很快,我可以事先不知道哪个是确定的。
(请注意我正在使用带有基础DataDirect驱动程序的Java JDBC)

这种方法是否在某处使用(并且成功了)?如果没有,当你必须支持Oracle和MS SQL时,你将如何解决“什么是最佳连接数”,对于多个版本而言,查询性质差异很大(索引查找/非索引查找/批量数据提取/条件匹配(索引和非索引,有和没有通配符))?

[我知道这与optimal-number-of-connections-in-connection-pool问题相似,但我在询问有关静态的问题时,我会询问动态配置。

3 个答案:

答案 0 :(得分:0)

如果您将用户排队等待免费数据库连接,则他们正在等待未知或人为强加的内容。

如果你让他们通过数据库,你至少会发现正在争夺的资源(如果有的话)。例如,如果它是磁盘I / O,您可以移动文件以针对更多或不同的磁盘传播活动,或者为缓存购买一些SSD或更多内存。但至少你知道你的瓶颈是什么,并可以采取措施解决它。

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

您可能还想关闭未使用的会话(因此午餐时可能会有500个会话的高峰,但是当一些较大的批处理作业正在运行时,会在一夜之间降至50个。)

答案 1 :(得分:0)

您需要自由流动的连接池,根据负载自动调整。所以应该有: - 1)最小尺寸:0 2)最大尺寸:根据您的数据库配置 3)如果可用连接缺货,则增加1 4)如果它是X(配置的时间)秒的idel,则放弃连接 5)连接池应该释放废弃的连接。

通过此设置,连接池应根据负载动态管理连接数。

答案 2 :(得分:0)

关闭到缺乏兴趣。我们最终使用了一个高的最大值,它似乎并没有太多困扰DB。