我们有一个sql Server与几百个数据库.该服务器上的许多数据库每周仅使用几次.我们有一个问题,sql Server有时变得非常慢.当发生这种情况时,内存使用率指示为99%,并发生分页.为了解决这个问题,我们每天晚上安排重新启动sql服务,以卸载所有这些数据库并释放内存.
释放空闲数据库使用的内存而不使sql Server失效的正确方法是什么?我们希望自动卸载在过去30分钟内未被访问的任何数据库.
解决方法
sql Server将自动释放所有可以释放的内存,并避免分页.如果遇到分页,则99%的内存正在使用中,无法释放.您需要调查内存是如何使用的,可能是外部组件(如sp_oa_xxx)创建的对象或分布式查询.首先调查内存消费者,查看
sys.dm_os_memory_clerks
并阅读
How to use the DBCC MEMORYSTATUS command to monitor memory usage on SQL Server 2005.
作为附注,您已经有自动关闭不使用的数据库的方法:alter database <dbname> set auto_close on
:
AUTO_CLOSE
: When set to ON,the
database is shut down cleanly and its
resources are freed after the last
user exits. The database automatically
reopens when a user tries to use the
database again.
如果您托管数百个很少使用的数据库,那么AUTO_CLOSE正是您要查找的.