sqlserver内存占用太高(sqlserver占用内存过大)
本篇文章给大家谈谈sqlserver内存占用太高,以及sqlserver占用内存过大对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何解决SQLServer占内存过多的问题
- 2、sqlserver 占用内存太高怎么解决
- 3、sqlserver占用内存过高,清理办法
- 4、为什么SQLServer会占用这么大的内存
- 5、解决SQLServer数据库占用内存过多的问题
- 6、如何释放Sqlserver所占用的内存?
如何解决SQLServer占内存过多的问题
当系统本身有内存可以用的的时候,SQL Server 根据操作系统报告的物理内存加载动态增大和收缩其缓冲池(缓存)的大小。只要有足够的内存可用于防止内存页面交换(在 4 至 10 MB 之间),SQL Server 缓冲池就会继续增大。如果你想把sql的内存控制在某个数量,可以更改配置信息,
1.打开企业管理器,展开服务器组。
2.单击该服务器,点击鼠标右键,单击属性菜单。
3.在弹出的对话框中单击内存选项卡。
可以看到SQLServer将动态配置内存的最大值修改为物理内存的最大值了
解决 SQL Server 耗尽内存的情况
如果碰到SQL Server服务造成内存不断扩展最终系统死机等情况,请按照以下方法解决。
原理:SQL Server 2000引入的动态内存分配机制,一般不能很好的回收内存,如果计算机一直不关闭,就会发生内存耗尽的可能。可以选择每周关机一次来避免,或者是按照下述方法来抑制内存的增长。
1、在服务器上开始—Microsoft SQL Server—企业管理器 中启动SQL企业管理器
2、启动以后打开右边的控制台树:控制台根目录\Microsoft SQL server\Sql Server组\(Local) 。
3、在(Local)节点上单击鼠标右键,选择"属性"菜单,可以看到一个 SQl Server属性(配置) 窗体
4、选择"内存"舌标,打开内存配置页面。将内存的最大值限定在一定的范围内,一般按照以下比例:
a) 如果仅仅用于数据库服务器,为总内存的80-90%
b) 如果兼任域服务器,一般为60-70%
c) 如果还兼任WEB服务器,建议最大为60%
5、设定完毕点击确定,然后重新启动SQl Server服务使之生效即可。
解决服务器的w3wp.exe进程占用cpu和内存过多的问题
解决CPU占用过多:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPU监视,不超过30%(一个程序池20个站),每分钟刷新,超过限制时关闭。
根据w3wp取得是哪一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script. Host”来执行,就可以得到PID与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。
解决内存占用过多,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,去掉默认为1720,设置固定时间回收(在下列时间回收工作进程:00:01 06:01 12:01)。再设置当内存占用超过多少(如192M 10个站一个程序池时),就自动回收内存。
3、在性能中设置启用CPU监视
最大使用率 30%
刷新率 1分钟
操作:关闭
1、 要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是无法限制单个站点的。IIS独立应用程序池,就需要独立的进程,非常消耗内存。独立池越多,就有越多的W3WP进程。对于每个站点均要独立应用程序池的备斗告服务器,在一般的普通P43.0 2G内存 的普通服务器上,建议不要超过50个站点,最好30以内,不然服务器压力非常大。在配置上,我一般把资源消耗较大的网站独立一个池,一般普通BBS或者生成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。
2、根据wlmmc的经验,在服务器硬件允许的情销团况下,一般不要限制站点内存使用,这样能够保证网站运行,不会出现用户掉线情况。需要限制某站的最大虚拟内存不要小于64M,不然可能出现一些未知的错误。
3、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题仿明还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。
4、除了w3wp.exe, 在调用数据库进行大量查询操作的时候,也会大量占用CPU资源,这是难免的(数据库方面的语句及结构优化不在本文讨论范围之内)。个人认为,只要不是CPU长时间占用100%, 一般在75%左右都是正常的。
sqlserver 占用内存太高怎么解决
第一步:打开企业管理器双击进入要修改的MSSQL.
第二步:在左侧MSSQL上点击右键,选择属性,弹出SQL Server属性(配置)对话框(最好打上SQL SP4补丁)
第三步:点击内存选项卡. 在这里,你会看到MSSQL默认设置为使用最大内存,也就是你所有孝厅的内物薯存,根据你的需要,设置它的罩慎者最大值(一般为物理内存-128M)和最小值(一般为最大内存的1/4)吧.
第五步:设置完毕,重启MSSQL服务,配置即可生效!
sqlserver占用内存过高,清理办法
SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高。
Sql Server运行时候的缓存:
1.数据缓存:执行个查询语句,Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来, 下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。
2.执行命令缓存:在执行存储过程,自定函数时,Sql Server需要先二进制编译再运行滑薯,编译后的结果也会缓存起来, 再次调用时就无需再次编译。
清除缓存的命令(直接执行第四个命令清除所有缓存):
DBCC FREEPROCCACHE --清除存储过程相关的缓存
DBCC FREESESSIONCACHE --会话缓存
DBCC FREESYSTEMCACHE('All') --系统缓存
DBCC DROPCLEANBUFFERS --所有缓存
注意:清除了缓存,不会释放SQL Server所占用的内存,所以需要通前拍过修改SQL Server内慧让羡存或重启SQL Server服务器来释放内存。
修改SQL Server内存:
优化:使用以下语句查找出什么语句占内存最高,针对占内存高的语句进行优化
SELECT SS.SUM_EXECUTION_COUNT,
T.TEXT,
SS.SUM_TOTAL_ELAPSED_TIME AS '总和时间',
SS.SUM_TOTAL_WORKER_TIME AS '执行耗时',
SS.SUM_TOTAL_LOGICAL_READS AS '总和逻辑读数',
SS.SUM_TOTAL_LOGICAL_WRITES AS '总和逻辑写'
FROM (SELECT S.PLAN_HANDLE,
SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
FROM SYS.DM_EXEC_QUERY_STATS S
GROUP BY S.PLAN_HANDLE
) AS SS
CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
ORDER BY SUM_TOTAL_LOGICAL_READS DESC
转自:
[img]为什么SQLServer会占用这么大的内存
简单回答:
因为它的设计是为了提供最高效快速的数据服务。它拿尺会尽可能利用(占用)电脑的内存、CPU资源来做数据服务。
1、SQL Server是数据库系统,它的设计目标就是以当前设备硬件的最大的资源来为其它或自已提供最高效快速的数据查询、存储、运算支持。
2、所以,它在运行过程中,默认情况下,会占用较大的内存,会用较高的CPU性能,因为它可不管你的想法是什么,它的想法就是陆敏态时刻准备着,查询、存储、运算数据。它会将它认为最常用的数据调入内存中,以加快查询速度,会不停的想法儿优化算法,优化物理存早源储位置,以做到尽可能的最快的速度提供操作者想要的数据。
3、SQL Server对内存的占用是可以调定与调整的,在起动 “企业管理器”或“SQL Server Management Studio”在里面点击树状结构的根目录,点属性,到里面相关的参数处可设定数据库的内存占用。提示的是,过小的内存占用会引发SQL Server的运行故障。
4、个人电脑,安装它用于调试、编程学习、或某些特定软件数据支持,不用时,可以去控制面版的“服务”中,关闭“SQLServer”相关服务,即可让它不再占用系统资源,但这并不是太方便,而且只适用于对电脑比较熟悉的朋友。
解决SQLServer数据库占用内存过多的问题
经常看见有人问,MSSQL占用了太多的内存,而且还不断的增长;或者说已经设置了使用内存,可是它没有用到那么多,这是怎么一回事儿呢?
首先,我们来看看MSSQL是怎样使用内存的。
的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给简饥清掉。所以一般我们在看statistics io的时候,看到的physics read都是0。
其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表、游标也是会有比较大的开销的。
所以用于关联和排序的列上一般需要有索引。
再其次就是对执行计划、系统数据的存储,这些都是比较小的。
我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内存,数据缓存一般是越多坦裤越好,甚至有些时候我们会强行把一些数据pin在高速缓存中。但是如果有其它应用程序,虽然在需要的时候MSSQL会释放内存,但是线程切换、IO等待这些工作也是需要时间的,所以就会造成性能的降低。这样我们就必须设置MSSQL的内存使用。可以在SQL Server 属性(内存选项卡)中找到配置使用内存的地方,或者也可以使用sp_configure来完成。如果没有其它应用程序,那么就不要限制MSSQL对内存的使用。
然后来看查询的开销,这个开销显然是越低越好,因为我们不能从中得到好处,相反,使用了越多的内存多半意味着查询速度的降低。所以我们一般要避免中间表和游标的使用,在经常作关联和排序的列上建立索引让咐简。
如何释放Sqlserver所占用的内存?
sql server 在查询大数据量的数据时,总会占用大量的内存,并且居高不下,一不小心就会死机。
下面这个是我从网上找到的:
当你查询数据的数据量比较大时,sqlserver会把查询结果缓存在内存中,保证你下次查询同样的记录时会很快得到结果,所以内存使用量会激增。厅尺
在你完成此次查询后,sqlserver不会马上释放内存,数据会仍然放在内存中,这是sqlserver的优化策略,sqlserver会不断地占用你的系统内存,来加快sqlserver的运行速度绝源,当你的系统中的其它服务也需要内存时,它才会自动释放部分内存。一句话,sqlserver不会让你的系统有闲置的内存,除非你设置sqlserver的最大内存使用量。这样也没什么不好,如果你的系统很大,单独给sqlserver一台机器,这样会提高它的性能。
如果你只是开发用,要想让sqlserver释放内存,重启sqlserver的服务就行了。扮宏高如果不想让sqlserver占用太多内存,设置sqlserver的最大内存占用量.
设置最大内存后效果好了不少!
关于sqlserver内存占用太高和sqlserver占用内存过大的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。