我知道,如果您根本没有池数据库连接,那么每次您需要查询数据库时都需要建立一个新的数据库连接,这会使您的应用程序变慢,并且通过池来节省开销。
如果您将最大池大小设置得太小--比方说,设为1 connection max --那么应用程序的缺点是必须共享所有请求的单个数据库连接,并且请求必须等待上一个数据库连接完成数据库连接,然后才能从池中获取它并重用它。
但是如果你把你的最大池大小设得很大,比如1000个连接。那么,它不应该支持重复使用连接而不是建立新的连接,如果实际需要的话,只需要最大的池大小才能满足需求?
假设空闲超时后未使用的连接被关闭/从池中移除,使连接池大于满足应用程序需求的连接池的缺点是什么?
发布于 2017-11-08 13:41:46
我知道,如果您根本没有池数据库连接,那么每次您需要查询数据库时都需要建立一个新的数据库连接,这会使您的应用程序变慢,并且通过池来节省开销。
一般来说,但这取决于..。如果它是一个长期存在的进程或连接,则专用连接可以具有更高的性能和更少的开销。
如果您将最大池大小设置得太小--比方说,设为1 connection max --那么应用程序的缺点是必须共享所有请求的单个数据库连接,并且请求必须等待上一个数据库连接完成数据库连接,然后才能从池中获取它并重用它。
他们也可能会犯错误。我不认为它会完美地复合。这就是为什么设置最大值太低会产生有害影响(也会设置得太高!)。
但是如果你把你的最大池大小设得很大,比如1000个连接。那么,它不应该支持重复使用连接而不是建立新的连接,如果实际需要的话,只需要最大的池大小才能满足需求?
我想说的是,如果1000个并发连接在应用程序/数据库处理过程中没有破坏任何东西,那就去做吧。实际上,除非该应用程序变得非常流行,或者应用程序/数据库中存在问题,否则不应该需要从同一个应用服务器上的同一个池中命中1000个并发请求。如果是的话,您很可能会在数据库服务器(可能不是,取决于硬件和配置)之前关闭应用程序服务器,或者在数据库级别上会出现一些并发问题(同样,取决于)。
这将允许池的增长,但希望不会超过数据库服务器。如果您将10个应用服务器都设置为此,那么10k连接可能是一个问题。有大量的移动部件,即使在这个简单的例子中,但我试图保持乐观。
假设空闲超时后未使用的连接被关闭/从池中移除,使连接池大于满足应用程序需求的连接池的缺点是什么?
缺点是你可以:
最终,连接将被删除和释放,但设置它们需要资源和时间。池的目的是重用这些资源,以减少成本和资源的使用,总的来说。
发布于 2017-11-08 13:37:03
默认的最大池大小是100,除非有特殊的要求,否则通常应该坚持这样做。将最大连接池的大小设置得更高意味着您可以同时对数据库进行许多查询,并加剧诸如长期阻塞或长期运行的查询等问题。
未使用的池连接总是在创建新连接之前被重用。未使用的池连接如果不重复使用几分钟,也会物理关闭,从而释放服务器端资源。
发布于 2017-11-08 14:58:35
限制是为了防止失控的资源使用。如果您确信您的数据库能够在最高加载期间处理1000个并发连接(因为这正是池使用率最高的时间),并且不会让另一个应用程序服务器同时运行,那么将池大小设置为1000没有坏处。你实际上是在选择你想要陷入困境的东西--你的数据库服务器或者你的应用服务器。
https://dba.stackexchange.com/questions/190403
复制相似问题