SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高
查看内存状态:
DBCC MemoryStatus
这些内存一般都是Sql Server运行时候用作缓存的:
- 数据缓存:执行查询语句,Sql Server会将相关的数据内容(Sql Server操作的数据都是以页为单位的,在SQL Server中页的大小始终是8kb的大小,页有不同的类型:数据页,索引页,系统页等等)加载到内存中进行缓存,以便于再次请求此页的数据的时候,直接从内存返回,大大提高了提取效率。
- 执行命令缓存:在执行存储过程,自定函数时,Sql Server需要先二进制编译再运行,编译后的结果也会缓存起来,再次调用时就无需再次编译。
临时清除缓存
其它DBCC管理命令
DBCC FREEPROCCACHE --清除存储过程相关的缓存 DBCC REESESSIONCACHE --清除会话缓存 DBCC FREESYSTEMCACHE('All') --清除系统缓存 DBCC DROPCLEANBUFFERS --清除所有缓存
以上命令虽然会清除掉现有缓存,为新的缓存腾出空间,但是Sql server并不会因此释放掉已经占用的内存。Sql Server并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整Sql Server可用的物理内存设置来强迫它释放内存。
按以上步骤,设置sql占用内存的上限,就会让sql server在内存上限范围内,主动清除脏数据替换成热数据,无休止占用内在
限制内存最大占有值
限制Sql Server可用的物理内存设置步骤:
- 设置内存最大占有值,如:4096
- 重新服务
设置固定值后的效果