与数据库的连接限制和应用程序中的Java线程数

时间:2010-06-17 05:08:10

标签: java

我正在开发一个JMS应用程序(独立的多线程java应用程序),它可以一次接收100条消息,需要处理它们,并且需要调用数据库过程来插入/更新数据。程序非常繁重,因为在它们中也进行了验证。每个过程大约需要30到50秒的时间来执行,并且它们能够同时运行。 我关心的是对所有100条消息执行100个程序,并且还通过jms应用程序在90秒的时间限制内发送回复。 没有要使用的应用程序服务器(需求)和数据库是Teradata(RDBMS)

我在java代码中使用连接池和线程池,并使用90个连接测试代码。 问题是:

(1)一次与数据库的连接数限制应该是多少? (2)建议一次使用多少个线程?

谢谢, Jyoti

2 个答案:

答案 0 :(得分:1)

90似乎很多。我的建议是对此进行基准测试。您的标准是唯一的,您需要确保获得最大吞吐量。 我会根据您使用的并发连接数来配置代码,并使用10个100个连接同时运行10个连接。这不应该花很长时间。当你开始放慢速度时,你知道你已经超出了同时运行的好处 多次这样做,以确保您的结果是可预测的。

答案 1 :(得分:0)

另一个问题是你的'程序需要大约30至50秒才能运行'。这段时间有多少是通过Java处理以及等待数据库处理SQL语句的时间?是否真的应该添加两个时间来确定您需要的最大连接数?
一般来说,如果可能的话,您应该在处理Java逻辑后尽快获得连接,使用它并关闭它。如果可能的话,你应该避免获得连接,做一堆java端处理,调用数据库,做更多的java处理,然后关闭连接。可能没有必要长时间保持连接打开。在执行此方法时要记住的一点是在单个事务中需要保留的处理(包括数据库访问)
例如,如果要运行50秒,只需要1秒的数据库访问,那么您可能不需要这么高的最大连接数。