经典 ASP + MSAccess 在 IIS7.5 上速度极慢
Posted
技术标签:
【中文标题】经典 ASP + MSAccess 在 IIS7.5 上速度极慢【英文标题】:Classic ASP + MSAccess extremely slow on IIS7.5 【发布时间】:2013-08-12 05:16:27 【问题描述】:我将我的经典 asp 站点从 IIS6 迁移到了一个功能非常强大的服务器,其中包含 Windows Server 2008 R2 和 IIS7.5,但它实际上运行得更慢。
对 MSAccess 数据库的每个简单调用都需要很长时间。多次请求因会话超时(120 秒)而被丢弃。
知道什么会导致问题以及如何解决吗?
谢谢。
【问题讨论】:
是什么让您认为来自 MS Access 的请求一直占用时间? 因为没有数据库访问的 asp 页面加载速度很快。为什么,你想到了什么? 当然和普通的html一样,但是你有没有试过查询你对access db本身的请求呢?有很多因素,第一:是你查询的速度;第二:与您的数据库(您的基本数据库类)的连接;第三:将与您使用的 IIS 版本有关。不过,我建议您将数据库升级到 MS SQL Server。它是免费的(快捷版),而且比访问更快。 【参考方案1】:在责备 Access 并迁移到 SQL Server Express 或其他数据库之前,您需要确保知道减速发生的位置。
从您的动作来看,似乎至少有一些查询甚至不起作用(IIS 在 120 秒后超时)。
访问数据库速度很快,尤其是当少数并发用户在本地访问它们时。 迁移到另一个数据库可能会也可能不会解决问题,但这可能比解决当前 Access 数据库的问题要多得多。 也就是说,如果您的网站需要为大量并发用户提供服务(比如一次超过 50 个),您可能需要考虑迁移到完整的数据库服务器,例如 mysql、SQL Server Express 或 PostgreSQL。
需要确保您仔细检查的几件事:
数据库损坏。确保您定期使用Compact and Repair作为定期维护措施(首先进行备份)。
文件系统权限不正确。
确保您的 IIS 进程对数据库所在的文件夹具有读/写权限,以便它能够创建锁定文件(.ldb
或 .laccdb
,具体取决于您使用的是 .mdb
还是新的.accdb
数据库格式)。
一个相关的问题是 IIS 进程必须能够在临时文件夹中创建临时文件,例如 %SystemDrive%\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
。
错误查询。使用 Access 打开数据库并运行查询以检查它们实际需要多长时间以及是否返回任何错误。 如果存在数据完整性问题,则可能是查询返回了意外结果,这可能会对您的 asp 页面中的代码产生奇怪的副作用。
检查 IIS 日志是否有错误。还要检查操作系统事件日志。 确保没有其他可能错误地导致该行为的错误。
确保您profile your asp code 准确了解您的代码中哪些查询和部分运行缓慢,哪些很好。
一旦您解决了问题。通过保持数据库打开来提高性能,以避免一直创建/删除锁定文件(这会对性能产生巨大影响)。
关于上述某些主题的更详细信息的良好参考:Using Classic ASP with Microsoft Access Databases on IIS
【讨论】:
保持数据库打开是什么意思?我使用以下代码打开数据库:Set rs = Server.CreateObject("ADODB.Recordset") rs.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\mydb.accdb" rs.CursorType = adOpenStatic rs.LockType = adLockPessimistic rs.Source = sqlQuery rs.Open rs.Close set rs = Nothing
@YevgeniGrinberg 保持一个全局连接打开,与您提到的代码相同,但在关闭站点之前不要关闭它。如果您在短时间内执行大量查询,这应该会加快查询速度。请参阅[此答案][***.com/questions/6361947/… 了解更多信息:
@YevgeniGrinberg 另一件事:不要将数据库放在驱动器的根目录。将它放在一个文件夹中,并确保将该文件夹添加到 Access 中的 受信任位置 中,这样您就可以在 Access 中毫无问题地打开它。此外,在您的连接字符串中,指定您以共享模式打开数据库:添加“Mode=12;”。见***.com/questions/13484298/…
正如您在我的代码中看到的,我仅在设置rs.Source
后才打开记录集。如何在不关闭和打开记录集的情况下更改它?以上是关于经典 ASP + MSAccess 在 IIS7.5 上速度极慢的主要内容,如果未能解决你的问题,请参考以下文章
IIS7 集成与经典管道 - 使用更多 ASP.NET 线程?
IIS7 上的经典 ASP:拒绝在 500 Internal Server Error 上向浏览器发送错误