我有一个 SQL Express 2008 实例,作为服务器上一个小型 Web 应用程序的后端运行。
服务器规格: Windows 2003,64 位四核,4GB RAM
SQL 数据库在磁盘上只有 50mb,而且我从未在任务管理器中看到 SQL 进程使用超过 200mb 的 RAM,但我注意到 SQL 日志中存在与内存问题相关的消息。
由于内存压力,AppDomain 2 (mssqlsystemresource.sys[runtime].1) 被标记为卸载。
知道这是什么原因造成的吗?
答案1
Express 版本对内存和 CPU 使用了人为施加的自我限制。它不会将缓冲池扩展到 1GB 以上,也不会创建多个调度程序(即只使用一个核心)。因此,无论您有多少物理 RAM,您的系统都会遇到内存压力。由于某些 SQL 数据类型是在 CLR 中实现的(例如地理和几何),这种内存压力可能会驱逐承载这些系统类型的应用程序域(因此应用程序域位于 mssqlsystemresource 中)。
答案2
不要相信任务管理器!查看 perfmon 计数器以了解 SQL Server 实际使用了多少内存。
您是否在使用链接服务器?请查看以下主题/文章:
MSDN 论坛:由于内存压力,AppDomain 被标记为卸载
SQL Monster:由于内存压力,AppDomain 被标记为卸载
PSS SQL 博客:如果您使用链接服务器查询,则需要阅读此内容
还有这些知识库文章: