经常看见有人问,MSSQL 占用了太多的内存,而且还不断的增长;或者说已经
最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得
你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给
清掉。所以一般我们在看statistics io 的时候,看到的physics read 都是0。
其次就是查询的开销,一般地说,hash join 是会带来比较大的内存开销的,
而merge join 和nested loop 的开销比较小,还有排序和中间表、游标也是会
有比较大的开销的。
所以用于关联和排序的列上一般需要有索引。
再其次就是对执行计划、系统数据的存储,这些都是比较小的。
我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内
存,数据缓存一般是越多越好,甚至有些时候我们会强行把一些数据pin 在高速
缓存中。但是如果有其它应用程序,虽然在需要的时候MSSQL 会释放内存,但是
线程切换、IO 等待这些工作也是需要时间的,所以就会造成性能的降低。这样
我们就必须设置MSSQL 的最大内存使用。可以在SQL Server 属性(内存选项卡)
中找到配置最大使用内存的地方,或者也可以使用sp_configure 来完成。如果
没有其它应用程序,那么就不要限制MSSQL 对内存的使用。
然后来看查询的开销,这个开销显然是越低越好,因为我们不能从中得到好
处,相反,使用了越多的内存多半意味着查询速度的降低。所以我们一般要避免
中间表和游标的使用,在经常作关联和排序的列上建立索引。
可以进SQL Server Management Studio后自个设定,参看下图:
相关知识
一、如果是普通的工作用台式电脑:
1、安装了个SQL Server做测试、开发、单机数据支持。SQL Server相对别的软件来说,对系统占用大是正常的。
2、解决方法是去控制面版中,去“管理工具”-》“服务”中,将所有的SQL Server服务设为手动启动,并停用,要用它们的时候再去手动启动它们。
3、也可以用SQL Server的管理工具(SQL Server Management Studio)设定内存使用量到适合的大小。
二、如果是生产用服务器:
1、SQL Server上如果有大型的生产用数据库,对内存的占用大那是非常正常的。(比如我提供的中,我实际生产用的服务器的内存的硬件配置为64G,给SQL Server用48个G。这算不算巨大呢?其实很正常的。)
2、服务器,它本来的功能就是以最快的速度,最高的效率去为前台应用提供后台支持,它安装内存的目的就是为了让SQL Server等后台数据支持系统使用的。不用,安装那么多的内存干嘛呢?这东西又不能用来显摆。
3、如果SQL Server的内存占用过大,已影响到了别的应用的正常运行,那么,需要进行调整,打开 SQL Server Management Studio,联接上SQL Server,对 根节点 点右键,点“属性”,点“内存”,去设定它的最大的内存占用。注意,内存设得过小会影响SQL Server的工作速度。当然,设得过大,超过了SQL Server的需求,那也提升不了效率,会浪费硬件的资源。
三、异常的内存占用巨大:
如果是生产用的SQL Server,对内存占用出现异常的巨量,那需要对SQL Server及对生产系统非常了解的工程师对运行情况进行监控、分析,找出原因,针对性的修正代码。
sqlserver2008会把整个数据库缓存到内存里面,就是说数据库有多大,就会占内存多个空间,直到把内存占满为止。
这样可以提高数据库速度的,而且一般是没有问题的,如果要限制数据库占用内存控制,要在数据库里面限制,把占用内存改成最大,在SQL server management studio 里面右击服务器,点击属性,选择内存,选择最大内存。
在SQL2008会把整个数据库缓存到内存里面,就是说你数据库有多大,就会占内存多个空间,直到把内存占满,你可以限制SQL 内存
首先我们需要登录 sql server 2005的资源管理器
鼠标右击我们sql server 2005的服务器,然后选择“属性”选项
找到指定数据库服务器的属性中的“内存”属性,并点击
接下来就是配置数据库内存了
>
以上就是关于如何解决SQL Server数据库占用内存的问题 详细�0�3全部的内容,包括:如何解决SQL Server数据库占用内存的问题 详细�0�3、sql server 在占用服务器内存居高不下怎么办、sqlserver2008占内存高,一般是什么原因等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)