Java 性能调整-JDBC连接时间
我正在完成一个小项目,并在首次发布之前进行一些性能调整。它是一个web应用程序,因此它只接收XHR和页面加载请求形式的HTTP请求 在应用程序启动时,从Tomcat服务器(通过JNDI)检索数据源并将其存储在应用程序中。这是一个Java 性能调整-JDBC连接时间,java,sql,jdbc,Java,Sql,Jdbc,我正在完成一个小项目,并在首次发布之前进行一些性能调整。它是一个web应用程序,因此它只接收XHR和页面加载请求形式的HTTP请求 在应用程序启动时,从Tomcat服务器(通过JNDI)检索数据源并将其存储在应用程序中。这是一个oracle.jdbc.xa.client.oraclexadasource,据我所知(从我所读到的和观察到的),它是连接池 在应用程序中,对服务器的每个请求都会在第一次SQL调用(如果发生)时打开自己的连接。在每个请求结束时,连接关闭(如果打开了连接) 因此,作为性能调
oracle.jdbc.xa.client.oraclexadasource
,据我所知(从我所读到的和观察到的),它是连接池
在应用程序中,对服务器的每个请求都会在第一次SQL调用(如果发生)时打开自己的连接。在每个请求结束时,连接关闭(如果打开了连接)
因此,作为性能调整的一部分,我正试图通过减少建立数据库连接所需的时间来提高这些请求的响应能力<强>你认为什么是可接受的建立数据库连接的时间?< /强>
这是我到目前为止的基准,每个请求-
- 324毫秒(重新启动应用程序后的第一个请求)
- 51毫秒
- 58毫秒
- 56毫秒
- 53毫秒
- 51毫秒
- 49毫秒
- 48毫秒
long start = System.nanoTime();
//oracle.jdbc.xa.client.OracleXADataSource
Connection connection = dataSource.getConnection();
log.info("Connection made in: " + ((System.nanoTime()-start)/1000000) + " ms.");
如果连接是池连接,这意味着它们(大部分)一直保持打开状态,因此在打开连接时应该没有时间等待(除非需要创建新连接来处理当前工作负载)。建议将或添加到项目中以保证池化。如果连接池化,这意味着它们(大部分)在整个时间内保持打开状态,因此在打开连接时应该没有时间等待(除非需要创建新连接以处理当前工作负载)。建议将或添加到项目中以保证共享。您是如何确定它共享连接的?根据我的经验,这种时间安排可以代表正常的“从头开始”网络连接。不,我还不能确认它是否真的在进行任何池连接。只是它用于获取连接的数据源继承了oracle.jdbc.pool.OracleConnectionPoolDataSource接口。@Thorbjørn您知道我应该在什么时候看到我是否从连接池中检索连接吗?我看不到您在获取后关闭连接。你要关门吗?但说到这里,是的,200~500毫秒对于创建连接是正常的,而50毫秒对于获得池连接是正常的。@BalusC很抱歉造成混淆,这只是显示基准测试的一段代码。感谢您确认timingsHow。您确定它共享连接了吗?根据我的经验,这种时间安排可以代表正常的“从头开始”网络连接。不,我还不能确认它是否真的在进行任何池连接。只是它用于获取连接的数据源继承了oracle.jdbc.pool.OracleConnectionPoolDataSource接口。@Thorbjørn您知道我应该在什么时候看到我是否从连接池中检索连接吗?我看不到您在获取后关闭连接。你要关门吗?但说到这里,是的,200~500毫秒对于创建连接是正常的,而50毫秒对于获得池连接是正常的。@BalusC很抱歉造成混淆,这只是显示基准测试的一段代码。谢谢你确认时间