SQL SERVER内存使用过高

案例:在启用sqlserver服务后,发现进程sqlservr.exe的内存使用量从开始的100多MB持续增加,很快就高达1G以上,造成机器运行缓慢、卡机,严重影响使用,解决如下:

打开SQL Server Management Studio、右键服务器名、选择属性,出现如下图的属性对话框,选择内存项,将最大服务器内存改成自己设定的值,这里改成200兆,确定后再去看看sqlservr.exe的内存使用量,哗哗地往下掉,爽!!!

分析:虽然设置了最大内存占用,但是当达到这个最大内存占用后,Sql的执行效率就很低了

 

 

从sql server 2005开始,内存的管理就是动态的,与其他关系型数据库不同使用已经调整好的内存空间。如plan cache 是全部的并且自动的,引擎控制根据当前数据库的负载和其他活动信息来控制plan chache内存。sql server 虽然缺少内存的控制方法,但是还有有参数可以设置内存的,如操作系统的版本,内存的大小和处理器的体系结构。
sql server 是如何分配内存的

    第一反应就是查看windows任务管理关于sql server 的内存使用情况,一看到sql server 占用了很大的内存就可能会认为sql server 缺少内存,但是缺少内存和占用很大内存其实是没什么关系的。sql server是被设计为大内存使用的,如buffer cache,存放了大量的数据页,为了减少io,提高性能。通常,不管你提供了多少内存sql server 都能使用光,除非你接到一个来自操作系统的memory low通知,sql server 就会自动调节减小内存,通知有2中:
memory high:通知sql server可以增加内存的使用量
memory low:通知sql server 释放内存
 如果windows 不通知,那么sql server 就不会增加或减少内存,在windows 2003 和 sql server 2005 以前的版本是没有的。有一篇关于sqlos中内存的文章介绍了不同类型的内存压力

sql server 最大内存使用量由以下几点要素:
1.安装的物理内存数量
2.操作系统的最大内存限制
3.sql server 体系结构,32b,64b
 4.sql server 配置项
5.sql server 版本

SQL Server 2008内存性能监控

 

.首先查下哪些SQL查询占用了内存。


--显示SQL Server的内存分配情况
DBCC MEMORYSTATUS



--显示各种对象占用内存的数量
SELECT type, SUM (pages_allocated_count * page_size_in_bytes) as ‘Bytes Used‘ 
 FROM sys.dm_os_memory_objects
 GROUP BY type 
 ORDER BY 2 DESC;
 GO



--由多页分配器分配的内存总量
select sum(multi_pages_kb) / 1024.00 AS multi_pages_mb
 from sys.dm_os_memory_clerks



--统计各种类型Memory_Clerk由多页分配器分配的内存总量
select type, sum(multi_pages_kb) / 1024.00 AS multi_pages_mb 
 from sys.dm_os_memory_clerks 
 where multi_pages_kb != 0 
 group by type 
 order by 2 desc

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。