我们有一个混合OLAP / OLTP工作负载的数据库。这些查询是非常特殊的,并且是在中间层应用程序服务器中动态创建的。当我们启动服务器时,性能是可以接受的,但是在所有可用内存(30GB)用完之前,内存消耗越来越多。在那之后,系统变得越来越慢。
像这样的命令Dbcc freeproccache
无效。
交易select * from sys.dm_tran_session_transactions
不多(不超过系统正常时),有时此列表为空。
的第一个结果dbcc memorystatus
是
VM Reserved 42136628
VM Committed 1487176
Locked Pages Allocated 24994048
Reserved Memory 1024
Reserved Memory In Use 0
重新启动SQL Server可以解决该问题一段时间。
- 是什么原因导致这种现象?如何避免呢?
- 如果真正的解决方法太困难了,是否有一条命令可以强制SQL Server在不重新启动DBMS的情况下实际释放所有内存?
服务器在专用硬件(不是VM)上运行。我们有一些预定的工作,但是暂时禁用了它们,没有任何变化。同一台服务器上还运行着其他中层应用程序,但是它们使用的内存不超过2GB,CPU可以忽略不计,几乎没有I / O。我们没有更改就重新启动了所有此类应用程序。