我们有一个似乎正在泄漏内存的 SQL 服务器。内存消耗会随着时间线性增加,直到服务器完全耗尽内存,从而导致严重的性能问题。
SQL 服务器包含 6 个小型(平均超过 50MB)数据库和一个稍大一些(大约 2GB)的数据库。
该服务器目前是 VMware 5.1 中的虚拟服务器。它的平均工作负载非常轻(~1% cpu,<10 批请求/秒,< .5 mb/s IO 典型;峰值推到~10% cpu,300 批请求/秒,5 mb/s IO)。
目前,它有 8GB 分配给 VM。其中,4GB 设置为 SQL Server 中的最大服务器内存。但是,SQL 服务器进程使用的内存远不止于此——通常在重新启动后的 12 小时内使用大约 6GB。
除了主要的读取工作负载外,该服务器还运行许多 SSIS 包,以将数据传入和传出到公司结构内的其他系统。这利用 MySQL 通过 ODBC(安装了 5.2.6 驱动程序)连接到内部 MySQL 集群和 ConnX 以连接 OpenVMS 系统。
操作系统:Windows 2012 SQL:2012 Enterprise VM 设置:4 个 CPU 内核,8GB,用于操作系统、数据和日志的独立虚拟卷。
问题: 1) 关于为什么 SQL Server 进程不会遵循服务器上设置的限制的任何想法?2) 有没有人知道在 SQL Server 中分析内存使用情况的好方法?我们可以看到页面预期寿命正在下降,更多的内存被分配给进程,但是有什么方法可以查看 SQL 将内存分配给什么(即过程缓存、缓存结果等)。