当前位置:Gxlcms > mysql > 优化Informix数据库访问

优化Informix数据库访问

时间:2021-07-01 10:21:17 帮助过:51人阅读

访问一个 IBM Informix 数据库所需的时间通常在不到一秒钟到某个期望的时间段之内,这取决于具体的数据库操作。但是,有时花费时间可能会比您预期的要长得多,这有许多原因,比如网络速度、系统性能、系统负载等。

在最糟的情况下,Informix 客户端可能会因为无法获得期望的响应而永远被阻塞。本文将解释,在 SQL 或连接请求花费比预期更长时间时,如何中断该 SQL 或请求,以改善您的 Informix 应用程序的性能。

数据可访问性在众多业务中变得越来越重要。Informix 服务器因其快速的性能和高度的可靠性而著称。但是,从客户端访问存储在 Informix 服务器上的数据同样依赖于硬件和操作系统的性能。Informix 提供了许多技术来保证数据访问的性能和可靠性,比如包含连接管理器的 MACH-11、自动数据库统计更新等。但是,本文主要介绍 Informix 如何处理某些由无法预测的随机系统事件所引起的异常场景,这些事件可能会导致数据库操作花费比预期更长的时间,其中包括缓慢的网络速度、意外的系统负载过重、TCP 包的丢失或其他无法预见的事件。

在很多时候,Informix 客户端会使用阻塞模式 中的 TCP 套接字与 Informix 服务器进行通信,这意味着客户端会一直等到有可用的服务器数据来实现通信。对于缓慢的连接请求,您可以中断并重试该请求,其方法是基于您的正常系统行为,将 Informix 环境变量 INFORMIXCONTIME 和 INFORMIXCONRETRY 设置为合适的值。

在数据库服务器执行一个 SQL 请求时,在来自数据库服务器的预期响应可供读取之前,应用程序会被阻塞。有时您可能想要中断一个 SQL 请求来获得应用程序控制权,因为您不想等到当前 SQL 语句完成操作。例如,如果您无意之中为一个长查询提供了错误的搜索条件,您想取消 SELECT 语句,而不是等待不需要的数据。如果它是一个多层应用程序,那么情况可能更糟。Informix 客户端(包括 CSDK 和 JDBC)允许用户在执行中中断 SQL 请求。应用程序的设计和实现需要提供用户取消 SQL 请求的支持。

如果运行的应用程序是来自第三方供应商,那么若该应用程序中没有相关选项,会很难中断 SQL 请求。为了处理此情形,Informix 在最新的客户端版本中引入了一项新功能,支持您在 Informix 客户端中启用 TCP 套接字超时,以便中断请求而无需更改任何代码。

本文中所列出的样例程序都进行了简化,仅用于演示用途。

Informix 连接超时

概述

连接到一个 Informix 数据库通常只需不到一秒到几秒的时间(具体取决于网络速度),但有时它所花的时间比预期更长。INFORMIXCONTIME 和 INFORMIXCONRETRY 是两个可控制连接行为的客户端环境变量。

INFORMIXCONTIME

INFORMIXCONTIME 环境变量指定在每次尝试建立数据库服务器连接时,数据库连接请求会持续几秒钟才返回一个错误。如果 INFORMIXCONTIME 环境变量设置为 0 或一个小于 0 的值,那么数据库连接请求将等到该操作成功或失败。如果没有对其变量进行设置,那么各个系统中的默认值可能会有所不同:

  • ESQL/C:INFORMIXCONTIME 的默认值设置为 60 秒。您可以在 OS 环境中使用 OS 命令为 ESQL/C 程序设置 INFORMIXCONTIME 环境变量。
    • UNIX®/Linux®:使用 export 或 setenv 命令,具体取决于 shell。
    • Windows®:Set 命令或控制面板。
  • ODBC:它默认设置为 15 秒。相反,您可使用此 SQL_ATTR_LOGIN_TIMEOUT 连接属性指定连接请求的连接超时间隔。如果同时设置了 INFORMIXCONTIME 和 SQL_ATTR_LOGIN_TIMEOUT,则 SQL_ATTR_LOGIN_TIMEOUT 连接属性会具有更高的优先级。
  • OLEDB 和 .NET:默认值为 15 秒。您可为 Informix OLEDB 提供程序设置 INFORMIXCONTIME 环境变量,但这不适用于使用 IfxConnection.ConnectionTimeout 属性来设置连接超时的 Informix .NET 提供程序。
  • JDBC:默认值为 0,表示连接从不超时。可以在 JDBC 连接 URL 或 JDBC DataSource 连接属性中设置 INFORMIXCONTIME 环境变量。JDBC 3.70.JC1 引入了另一个名为 LOGINTIMEOUT 的环境变量。可使用它指定轮询服务器端口来建立连接的时间段(以毫秒为单位)。如果应用程序没有在指定时间内连接到 Informix 数据库服务器,将返回一个错误。它只能设置为一个 DataSource 属性。在 JDBC 连接 URL 中对它进行设置将不会生效。

您可以基于正常应用程序行为将 INFORMIXCONTIME 环境变量设置为合适的值。

如果连接请求涉及到搜索 DBPATH,则可能看到连接请求所花的时间长于 INFORMIXCONTIME 限制,以至于返回了一个错误。如果 DBPATH 包含多个服务器,那么 INFORMIXCONTIME 值需要除以 DBPATH 中包含的服务器条目数量。在此情况下,您应相应地增加 INFORMIXCONTIME 值。

INFORMIXCONRETRY

INFORMIXCONRETRY 环境变量指定客户端在 INFORMIXCONTIME 所指定的时间限制内客户端应对每个数据库服务器执行的连接尝试总数。例如,如果 INFORMIXCONTIME 设置为 30 秒并且 INFORMIXCONRETRY 设置为 2,那么若初始连接尝试无法实现,客户端将尝试在第 15 秒时重新发送连接请求。在终止之前,如果需要,它将在第 30 秒时进行另一次连接尝试。

在 CSDK 和 JDBC 3.70.xC1 以前,INFORMIXCONRETRY 环境变量的默认值为 3。从 JDBC 3.70.xC1 开始,新的默认值为 1,这意味着在初始连接尝试之后仅进行一次重试。

人气教程排行