SQL2005 Express从远程VB6应用程序缓慢
我有一个使用MSDE构建的旧版VB6应用程序。
随着许多客户端的数据库逐渐达到MSDE 2 GB的限制,它们已升级到SQL 2005 Express。
直到今天,这已被证明是非常成功的。
当整天通过"网络"连接SQL 2005 Express命名实例时,我整天都在对客户端网络进行故障排除,而我们的应用程序在该客户端网络上运行缓慢得令人无法接受。
我说"网络"是因为只有两台XP SP2计算机,这里没有专用服务器。没有广告。
为了解决此问题,我在两台计算机上都安装了SQL 2005 Express,并在两台计算机上都放置了数据库副本。我什至已经使用现在拥有的SQL2005 Express安装例程完全重新安装了我们的应用程序。无论是还原旧的MSDE数据库还是使用新创建的SQL 2005 Express数据库都没有关系。
当运行我们的应用程序并连接到任何一台计算机的本地服务器时,性能都很好。一旦将我们在两台PC上的应用程序连接到另一台PC上的服务器,这将变得非常缓慢。 (无论组合如何)。
现在,我重建了统计信息(exec sp_updatestats),重建了所有索引,禁用(临时)了防火墙和病毒软件,并且抓紧了无数其他稻草。
我求助于在两台计算机上运行FileMon和ProcessMon,甚至编写了一个小测试应用程序来简单地连接和查询数据库中的表。它也运行缓慢(连接大约需要5 6秒)。
当SQL Server写入日志文件(c:\ program files \ microsoft sql server \ mssql.1 \ log files \ log_12.trc)时,监视器(文件和进程)显示延迟。
但是,从客户端连接到服务器时,其他工具(例如SQL Management Studio Express甚至SSEUtil(我发现的SQL Server Express诊断实用工具)也可以完美运行。查询(甚至大型查询)会按我们期望的那样运行。
我认为这个问题是环境问题,因为我们有许多站点运行的似乎是相同的设置,而没有此类问题。
有人可以告诉我应该怎么做才能解决此问题,甚至可以提供任何有助于解决此问题的线索或者建议吗?
解决方案
这可能是由于缓存的查询计划无法代表数据,即使我们已重建索引和刷新统计信息也是如此。我们描述的症状(即查询可以从SSMS正常运行,但不能从应用程序正常运行)通常是由错误地缓存了查询计划引起的。 SSMS在封面下发出" WITH RECOMPILE"。如果要调用存储过程,请在其定义中临时添加" WITH RECOMPILE"并检查结果。
我们是否尝试过从另一台计算机连接到"服务器" PC?怎么了?
我们是否尝试过将"客户端"连接到另一台"服务器"计算机?怎么了?
这个问题可能只是像普通的网卡或者电缆那样平凡的事情。
在我们进一步动动脑筋之前,可能值得检查一下...
制作清单并系统地进行检查:
在此处添加所有帖子的所有建议,并在下面添加一些建议:
- 网线
- 网络速度
- 整理硬盘碎片
- 没有网络错误-执行ping并查找丢失的数据包
- 每台机器的内存
- 处理器
- 病毒
等等等,
在"表面配置"工具中启用了哪些网络协议?我们可以更改连接字符串以使用(临时)硬编码的IP地址吗?