0

在 WAS 中,当我创建数据源时,我可以编辑连接池属性(活动连接数,最大活动连接数)。现在,如果我说 max = 20,并且如果 1000 个用户请求进入 WAS,并且每个请求在其自己的线程中运行并且每个线程都需要连接,那么本质上我将减少到 20 个并行线程。

这是正确的吗?因为连接对象不能在线程之间共享。

我问这个问题是因为大多数时候,我看到这个参数的最大值是 20 - 30,而此时对服务器的同时请求的峰值数量明显超过一千。似乎我们一次只能处理 20 个请求?

4

1 回答 1

0

并不真地。连接池负责通过在数据库访问中重用它们来消除创建和关闭连接的开销。

如果你有 1000 个请求,并且 maxSize 池为 20,那么将并行执行 20 个数据库访问,并且一旦每个请求释放数据库访问,相同的连接将被重用于处理另一个请求。这是假设数据库访问将在有限的时间段内(短操作),并且一旦获取/插入/更新数据,连接将被释放以用于另一个请求。

另一方面,由于池已完全使用而无法检索数据库连接的请求(例如,第 21 个请求)将处于等待状态,直到某些连接被释放,因此在客户端这是一个透明的条件. 所有这一切都假设代码以一种有效的方式从池中请求和释放连接。请求的超时也是池的可配置属性

您可以调整这些值以充分利用它,您还可以考虑使用数据库缓存等技术(即开放式 terracota)来避免耗尽池以进行重复查询(例如所有请求始终使用相同的选择) .

希望这可以帮助!

于 2013-08-02T18:53:40.777 回答