热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

优化Informix数据库访问

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

访问一个 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,这意味着在初始连接尝试之后仅进行一次重试。

推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
author-avatar
打杂大叔_868
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有