Oracle connection/query timeout

前端 未结 4 1039
鱼传尺愫
鱼传尺愫 2021-01-18 13:57

Is it possible to specify connection/query timeout for the Oracle database queries? Either on Oracle side or in Oracle\'s JDBC driver (10.2.0.4)? So, that Java client just g

相关标签:
4条回答
  • 2021-01-18 14:20

    If you are executing the query in the context of a transaction, the transaction timeout value of the JTA transaction monitor will be the determinant to query timeout. The configuration for this depends from one application server to another.

    At an individual query level (in the absence of a JTA transaction monitor), the setQueryTimeout method can be used to set the timeout on the execution of a Statement/PreparedStatement/CallableStatement object.

    Update

    setQueryTimeout is not to be relied on, although it works (atleast from a J2SE client). It works via the JDBC driver performing a full round-trip to the Oracle database server. Then, it is upto the database to halt execution of the query. Don't rely on it for time critical applications.

    0 讨论(0)
  • 2021-01-18 14:21

    Have a look at Oracle profiles. This allows you to specify several limits at the database level. One of them is a maximum CPU time per query.

    If you have queries running for more than 2 minutes on a regular basis you might want to do some tuning of your queries first.

    0 讨论(0)
  • 2021-01-18 14:34

    According to http://www.javamonamour.org/2012/09/oraclenetconnecttimeout.html

    oracle.net.READ_TIMEOUT for jdbc versions < 10.1.0.5 oracle.jdbc.ReadTimeout for jdbc versions >=10.1.0.5

    So if you are using a JDBC driver version 10.1.0.5 or higher, then oracle.jdbc.ReadTimeout is the correct property.

    0 讨论(0)
  • 2021-01-18 14:38

    Setting oracle.jdbc.ReadTimeout helped to timeout the jdbc calls. I have used it in a production spring boot app by specifying datasource properties as below

    spring.datasource.hikari.connection-timeout=1000
    spring.datasource.hikari.dataSourceProperties=oracle.jdbc.ReadTimeout=2000
    

    Note: Earlier this app was using tomcat connection pool and after setting the above properties for the same, timeouts were happening but the pool was not able to handle the closed connection objects efficiently. Therefore, I switched to hikariCP and got lot better results. I have made a video simulating the slow jdbc calls which compares the results with tomcat and hikari connection pools while using the ReadTimeout property.

    0 讨论(0)
提交回复
热议问题