如何降低内存使用率SQL Server 2012内存使用率

悬赏园豆:20 [已解决问题]

版本都是x64的,内存没有做什么限制设置:

windows服务器的内存也很够大,64G的内存。

还请大家帮忙分析一下。

你在任务管理器中看到的不是SQL Server实际使用的内存,建议用RAMMap看一下

看这个内存也是这么多。。

@5207: 看一下系统总内存消耗情况

@dudu: 总消耗17%,还有很多没用上。同台机器上装了orcale,用起来都是正常的。

是不是因为都变成备用内存了导致的?

@5207: 可能参考这篇文章看一下:

@dudu: 打不开呢。要翻?

看日志应该是开启了,不知道还有什么配置不对会导致内存上不去呢?

@dudu: 把所有都删除了,还是不行。只不过服务器现在不能重启,也不知道生效了没有

有问题呀,有些大数据操作时会报错失败。

@5207: 具体的错误是什么呢?根据错误分析更好!

@幻天芒: 这个试过没有效果

这个不正常...看看是不是装的有问题...装的时候用管理员权限用户装..一般不会出现问题

以后才能回答,未注册用户请先

在Sqlserver中,数据的交互实际上是一种磁盘活动,即是一种IO操作。然而,为了加快读取速度,减低CUP负荷,Sqlserver会将许多的数据预先加载进入内存中,程序所进行的数据交互,优先在内存中进行。因此,SqlServer占用了很多的内存。只要访问的数据还在内存中,就不需要磁盘IO来读写存储在缓冲中的数据值。如果没有足够的内存来存储经常用到的数据,就意味着数据必须在内存和磁盘自检不断地来回移动。尽管交换在SqlServer中很常见,但是它非常消耗时间和性能,所以要尽可能地减少这样的活动。

在软件开发中,使用了ORM映射工具的系统,如C#的Linq和JAVA中的Hibernate,进行数据交互,都会占用大量的数据库内存,因此,采用了这一类映射工具的系统,往往都会遇到SqlServer内存瓶颈问题,2GB对于这样的系统来说,简直太少了。而且,多个数据库实例运行在一台服务器上的时候,很容易造成数据库实例为了争抢内存而发生饿死现象。

那么SqlServer在实际中可以用到多少内存,又怎么样最大化利用系统内存呢?

影响到SqlServer可使用内存的因素很多,主要有服务器的CPU体系结构和SqlServer的版本。本文将以32位操作系统为例,讲解如果最大化利用系统内存为SqlServer服务。

32位的环境中,SqlServer的物理可寻址内存限制在2GB以内,由于32位操作系统体系结果的限制,操作系统可寻址内存总共只有4GB,2GB是操作系统专用,2GB可以供给SqlServer使用。这样就限制了SqlServer的内存利用率。

解决方案之一:在Windows Server 2003以及更高的版本中,它们全面支持一个叫做/3GB的开关。

可以把/3GB开关加入到boot.ini文件中的(我的Win7系统中没有找到,XP据说在C盘根目录下),这样操作系统就可以只使用1GB,SqlServer使用3GB。

解决方案之二:使用boot.ini的文件中的/PAE开关。这个开关控制了物理地址扩展(Physical Address Extensions,PAE),允许多个应用程序使用超过4GB的内存,在屋里地址可用的情况下,每一个SqlServer实例都会得到自己的2GB内存块,而不会与其他SqlServer实例竞争内存资源,如果与/3GB开关同时使用,则可以让每一个实例都得到自己的3GB物理内存。

注:这两个开关同时开启时,当计算机有超过16GB内存,服务器将不能访问16GB以外的内存,因为这时候操作系统需要2GB的内存来寻址16GB以外的内存。

Extension,AWE),这个选项可以显著增加SqlServer实例的可访问扩展内存。Win2003的版本在AWE下可以用4GB内存,win2003企业版支持高达32GB应用程序内存。需要在SqlServer属性中勾选上AWE。使用这个选项必须设置“内存策略”中的“锁定页面”来阻止扩展内存被分页存储到磁盘。还需要考虑将SqlServer选项“最大服务器内存”设置为一个合适的值。如果多个是咧运行的话,这样可以防止所有实例的最大服务器内存值的总和不超过可用于应用程序的物理内存。

64位操作系统配置更简单,内存更大化(可以达到8TB),

行业的趋向是,采用64位机器。将来系统扩大时,可以利用该平台的可扩展性。

更多细节内容可以通过查阅联机丛书获得。

本文参考《精通SqlServer2008》 清华大学出版社出版。

请教各位大神,为什么我的数据库以前内存到一定值后都会清空,现在内存会一直往上飙升,1天可以到12G!除非手动清理才会释放?是否是因为设置问题?

缓存的数据过多没能及时释放,基本上的数据库都会出现,通常是重启SQL服务

可能通过内存占用过多时释放一部份

这是我的常用方法,不同版本配置可能不同,你按提示自己改改

DBCC FREEPROCCACHE --删除计划缓存中的所有元素,通过指定计划句柄或 SQL 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目。

这个真没怎么关注过,我手上一个30w数据左右的库,也是2008R2,16G内存的机子,平时占用也就10G左右,开了半年也没出什么问题

你这个方法我在使用中,用户大概会有几秒的卡顿并且可能会出现失去连接的状态

这是我的常用方法,不同版本配置可能不同,你按提示自己改改 DBCC FREEPROCCACHE --删除计划缓存中的所有元素,通过指定计划句柄或 SQL 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目。

平时一直保持着占用10个G的情况并不会有卡顿的影响吗?


我之前看过一篇文章说,安卓手机是清理掉后台进程更好还是留住后台进程更好

它的观点是,如果内存足够用的话,留住后台可以提高APP的打开速度

因为APP的进程是存在的,只需要切换至前台就行了

对于数据库也是这样的,如果内存足够,让它占用去吧

内存的速度不是硬盘能比的

如果你的数据库服务器内存吃紧,那么说明你的配置跟不上了

要么优化数据库的设计,要么提升硬件配置

绝对不是什么清理下内存就能解决卡慢的问题

你清理掉那些内存,到需要使用对应功能的时候,你还得从硬盘读取回来,还会更慢

给SQLSERVER使用的最大内存做一个限制就可以了。保证系统有空闲的内存即可。

数据库内存会一直往上飙升是正常,如果不往上飙升,那表示数据库有问题。。

因为内存比硬盘快很多,所以数据库把数据从硬盘读取后弄到内存里,用户读取数据先从内存里搜索,搜不到再读硬盘。

数据库的进程,是系统有多少内存,就会吃多少(根据查询频次决定,一般都会吞掉一大半),不过其实并不用担心,我现在服务器8G内存,跑一个日PV40W的网站,之前4G内存的时候,内存占用率80%,前段时间到8G,也是80%。。而且一旦有其他进程需要内存,数据库的进程会马上自己吐出来的。。

我的也是这个问题,感谢论坛的回答,我试试看

匿名用户不能发表回复!

我要回帖

更多关于 如何降低内存使用率 的文章

 

随机推荐