背景:我刚刚完成了将大约 50 个经典 ASP 站点从 IIS6/Sever 2003 和 SQL Server 2000 环境迁移到 nginx 负载平衡器后面的 2 台机器的新虚拟环境。每台 MS 机器都运行 IIS7.5 和 SQL Server 2008 R2。他们目前每个都有 6Gb 和 2 个 VCPU。数据库在镜像配置中设置(目前没有见证)。
在测试期间,所有站点似乎都正常运行。
一旦实时流量开始到达站点,很快就会发现初始资源分配(2Gb 和 1 VCPU 太低并且很快增加)。主要问题来自服务器上大约 10 个(可能包括最繁忙的)站点上发生的间歇性 ASP 错误。他们将从 ASP 错误中产生 500 响应
提供程序错误“8002000a”超出当前范围。
所有研究都指出了诸如数字太大而无法放入整数变量之类的原因,并且有些人提到了与 SQL Server 2008 与 2000 相比的新实现的一些相关性RAND
。NEWINT()
似乎导致错误的存储过程相对简单,其中一些简单到接受单个VARCHAR
参数(在限制范围内)并在表上执行单列选择。大多数甚至根本不涉及INT
s,如果涉及,则值在范围内。
错误可能会在一台机器上出现一段给定的时间,而在同一时间另一台服务器不一定会出现错误,但有时会出现。一段时间后,错误将停止发生,这似乎也与过度过载的系统资源无关。
ASP 到数据库是通过使用 SQL Server Client 10 驱动程序的 DSN 完成的。该代码使用 ADODB 连接和命令对象。这段代码在以前的服务器上已经运行了 6 年多。数据库设置为兼容模式 80 (SQL Server 2000)。
任何人都可以阐明我应该在哪里尝试解决这个问题吗?如果有任何其他信息我可以分享,具体的代码片段等,请告诉我。
更新:我以为UPDATEUSAGE
下面的答案已经得到了它,但不幸的是它稍后又恢复了。经过一番思考后,我有了以下想法…… IIS 有两个实例,彼此独立,它们都与单个数据库对话,无论它当时是否是本地的,它们都执行相同的同步代码使用长时间使用相同语法和有效变量的代码。由于通过 IIS 执行的 ASP 是这个等式中唯一不是单点的层,因为这就是我要去的地方。当问题再次发生时,我在显示错误的机器上重新启动了 IIS(这种情况通常只发生在两台服务器之一上)。重新启动 IIS 似乎可以解决问题。然后它发生在具有不同站点的另一台服务器上,
进一步阅读现在让我了解了应用程序池的“托管管道”模式。它们当前设置为“集成”。我做了一些阅读,我想知道是否应该将它们设置为经典以模拟 IIS6。有人对此有更多想法吗?
非常感谢埃里克