环境:
Delphi 2009客户端应用程序(和一个Java),运行在Windows 2003服务器上
通过DBExpress连接到Interbase 7.5.1(另一个Windows 2003服务器)
Delphi应用程序使用TSQLConnection对象的AfterConnect事件处理程序记录打开TSQLConnection的时间。
在随机间隔中,连接需要3分钟的“额外时间”。我首先怀疑这可能是SQL查询的问题,但今天更详细的日志记录显示挂起的是SQLConnection.Connect
我不确定这是否是网络、interbase服务器或delphi/dbexpress层的问题。
有人经历过类似的三分钟“挂”吗?
P.S. Java应用程序没有记录连接时间,所以我不能说它受到这个问题的影响。
自从我们2012年开始登录以来,这种现象就出现在日志文件中,但上个月的速度急剧上升。唯一的环境变化是添加了新的windows服务器(用于rdp服务、邮件和传真),因此这可能是一个与网络相关的问题。

最佳答案

除了可能的网络问题之外,延迟的原因可能是,您的查询不时地在它正在查询的某个表中触发垃圾收集。
我不知道Interbase 7.5的详细内部结构,但根据我的经验(使用Firebird),这通常发生在最近删除/更新了许多记录的表上。
This doc at IBExpert.net解释如下:
垃圾收集只在数据库扫描、数据库备份或对表进行select查询(而不是通过insert、alter或delete)时执行。每当firebird/interbase®触及一行时,例如在选择操作期间,版本控制引擎将清除事务号早于最旧的感兴趣事务(oit)的任何版本的行。这有助于保持版本历史小型化和可管理性,并保持性能合理。
在低使用时间进行的定期扫描或备份可以提高性能,并将被不方便的垃圾收集影响的风险降到最低。有关这方面的更多信息,请参见扫描间隔和自动内务管理(第6-20页)以及促进垃圾收集(第11-19页)。

09-27 08:45