我有一台带有 DTS 包的 SQL 2000 服务器,该服务器由于内存不足错误而崩溃,而之前我们从未遇到过问题。
DTS 包返回错误“系统内存不足,无法运行此查询。” SQL 错误日志显示以下内容:(为简单起见,修剪了重复的行)
BPool::Map: no remappable address found.
Buffer Distribution: Stolen=198908 Free=779 Procedures=349
Inram=0 Dirty=10291 Kept=0
Buffer Counts: Commited=917376 Target=917376 Hashed=717340
InternalReservation=174 ExternalReservation=24
Min Free=1024 Visible= 199856
Procedure Cache: TotalProcs=17 TotalPages=349 InUsePages=340
Dynamic Memory Manager: Stolen=164278 OS Reserved=1048
OS Committed=1026 OS In Use=1024
Query Plan=416 Optimizer=141466
General=16874
Buffer Counts: Commited=917376 Target=917376 Hashed=717340
Utilities=5840 Connection=206
InternalReservation=174 ExternalReservation=24
Min Free=1024 Visible= 199856
Procedure Cache: TotalProcs=17 TotalPages=349 InUsePages=340
Utilities=5840 Connection=206
Global Memory Objects: Resource=1272 Locks=279
SQLCache=52 Replication=2
LockBytes=2 ServerGlobal=23
Xact=35
Query Memory Manager: Grants=1 Waiting=0 Maximum=35238 Available=270
有人能帮我解释/破译这些内存数字吗?
这是一台专用的 Windows2003 服务器,运行 SQL2000 Enterprise 版本 8.00.2282 (SP4)。它总共有 8GB 的 RAM。SQL 实例配置为最小内存 = 0,最大内存 = 7167。已启用 AWE。
我发现了很多文章似乎有点有关的:
- 知识库 838459- 但是我们已经使用 SP4 了,这不是重新索引。
- 知识库 815114- 似乎相关,因为我们的查询在连接中确实有很多表,其中一半以上带有 LEFT OUTER,但正如我所说,我们已经在 SP4 上了。
- 知识库 831999- 同上。已在 SP4 上。
我承认这是一个非常棘手的查询,但多年来我们一直运行相同的查询而没有任何问题,即使该查询不是真正最优的,它也不应该导致服务器崩溃或执行失败,对吗?
有什么想法吗?即使场景不完全相同,我们是否应该尝试 kb838459 中提到的跟踪标志 3940?
是的,我们一直在鼓励他们升级到 SQL2008 64 位,但这还需要一段时间。
答案1
正如我在对这个问题的评论中所说,当我们的一台 SQL 服务器接收的使用量超过正常使用量时,我们遇到了这个问题。通过增加页面文件,我们能够在这段时间内为用户提供更多资源。
这不是我们的永久解决方案,因为在此之后,我们能够重新评估机器的性能需求并对其进行一些小升级。我不建议将此解决方案用于解决持续存在的大问题,但对我们来说,这是一个足够好的创可贴。