0

SQLDB Bluemix 服务的高级计划支持 DB2 高可用性。但是,服务凭证提供的默认 JDBC URL 使用的宽容超时比我想使用的要多。以下是默认 JDBC URL 的示例:

jdbc:db2://1.1.1.1:50001/DBName:clientRerouteAlternateServerName=2.2.2.2;clientRerouteAlternatePortNumber=50001;sslConnection=true;

从各种实验来看,默认超时似乎是:

  • 初始连接超时:2 分钟
  • 套接字读取超时:操作系统的默认值。我读过它可能超过一个小时。

在主服务器突然不可用的故障场景中,现有连接将保持“打开”状态,直到达到套接字读取超时。这可以使该连接上的请求看起来“挂起”。此外,由于默认连接超时时间为 2 分钟,因此任何建立新连接的尝试都需要 2 分钟或更长时间。

我想使用更小的超时来确保更高程度的应用程序可用性。我尝试自己调整各种 JDBC URL 参数,但我成功地打破了几次故障转移。所以我想是时候问专家了:

为了控制初始连接超时和套接字读取超时(并且不中断到辅助服务器的故障转移),我应该设置或更改哪些 DB2 JDBC 超时相关参数?

4

2 回答 2

2

您需要设置几个重要的属性:

  • loginTimeout设置为新的 JDBC 连接对象打开到每个服务器的套接字的超时。
  • blockingReadConnectionTimeout设置初始连接建立后执行请求时从套接字读取的超时时间。
  • commandTimeout限制任何 SQL 请求可以执行的最长时间。

因此,您的 JDBC URL 将如下所示:

jdbc:db2://1.1.1.1:50001/DBName:clientRerouteAlternateServerName=2.2.2.2;clientRerouteAlternatePortNumber=50001;sslConnection=true;loginTimeout=10;blockingReadConnectionTimeout=10;commandTimeout=30;

前两个属性分别对于与服务器没有网络连接或在请求中间失去与服务器的网络连接的情况很重要。

设置 是一个好习惯commandTimeout,但这样做也会在边缘情况下覆盖您:如果您在请求中间失去与服务器的连接,blockingReadConnectionTimeout则在达到之后,连接将尝试打开与服务器的新套接字连接. 不幸的是,没有设置打开新套接字的超时时间[1]的属性,因此使用默认的操作系统超时时间(在 Linux 中通常约为 2 分钟),除非您有commandTimeout设置。在这种情况下,它将使用剩余时间作为打开新套接字的超时时间。

如果您真的想动手,您可以通过在驱动程序中启用跟踪日志记录并在使用驱动程序时在不同点模拟网络故障(阻塞网络流量)来观察所有这些行为以及何时使用各种超时。

可以在此处找到所有 JDBC 属性的文档。

[1] 这主要是由于在故障期间的这一点,驱动程序的Connection对象没有关闭。

于 2015-09-11T01:37:25.153 回答
0

看到这个链接

https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.1.0/com.ibm.db2.udb.apdv.java.doc/doc/rjvdsprp.htm

它具有所有属性描述并帮助您理解

blockingReadConnectionTimeout 连接套接字读取超时之前的时间量(以秒为单位)。此属性仅适用于 IBM DB2 Driver for JDBC and SQLJ 类型 4 连接,并影响成功建立连接后发送到数据库服务器的所有请求。默认值为 0。值为 0 表示没有超时。

于 2015-09-11T02:59:43.450 回答