关于SQLSERVER2000 占用机器内存如何释放的问题

时间:2021-03-08 07:04:41
W2KSERVER+SQLSERVER2K  
服务器运行一段时间后SQLSERVER占用的内存会很大,我看了一下 1-2个星期就达到1.7G了,我现在知道的是重起服务就会把内存释放出来,想请问一下有没有别的方法?例如:有没有貌似执行一条语句就可以解决问题的东东?

13 个解决方案

#1


设置SQL Server使用的最大内存。

-->企业管理器-->SQL Server实例名,右键-->属性-->内存页-->动态的配置SQL Server 的内存-->设置最大值


--一般都设置为自动,SQL SERVER 2000会处理内存问题的.

#2


关注..
在企业管理器中,右键点本地数据库打开属性在里面内存这项设置..

#3


楼主不用担心,这是SQL SERVER内部机制,当需要释放时(根据内存情况),SQL SERVER会自动释放的。如果楼主担心的话,可以给它设置最大内存。

SQL SERVER 2000的补丁要打到SP4

#4


多谢楼上的回复。

SQLSERVER2K经常会不释放内存的,我现在需要有一个办法 写到程序里,每当我跑程序的是后就先释放一次内存.不知道还有没有别的建议.

#5


我这目前的设置就是自动分配的0->MAX  但是因为SQLSERVER没有即使释放内存是我的程序效率变的很低

#6


如果不影响程序的运行就不用管了,如果影响就设置最大内存来加以限制,
这样剩下的内存就供其它使用,
SQL SERVER 2000当内存不足时,他会自动释放的.

#7


SQLSERVER2K经常会不释放内存的,我现在需要有一个办法 写到程序里,每当我跑程序的是后就先释放一次内存.不知道还有没有别的建议.
-------------------------------------------
那你就在程序里写上2句
net stop mssqlserver
net start mssqlserver
不就释放了。。。

#8


exec master..xp_cmdshell 'net stop mssqlserver/y'
exec master..xp_cmdshell 'net start mssqlserver/y'

#9


gc_ding(E.T) 楼上是重起服务,如果服务都STOP了那我程序岂不是也断开连接了。。。

#10


参考:
1.升级操作系统、sql server补丁
2.确保不是病毒原因(可能性比较小)
3.sql server设计时的要求就是最大可能的减少磁盘的I/O,磁盘I/O是比较消耗资源的,这个磁盘I/O包括了读取数据库文件还有和虚拟内存的页交换。如果还有足够的可用内存它都会毫不吝啬的使用的(没有设置上限),它会根据需要动态获取和释放内存的。你要分析的是这占用内存的开销主要用做了什么?是不是有大型的查询或事务操作。
4.如果服务器是专职的数据库服务器,不建议设置最大内存上限。如果还有其它重要的服务在
机器上运行,就要考虑它的内存使用是否会影响其它服务的正常的运行和性能。

#11


这是SQL Server 缓冲池的预期行为。
默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。

#12


俺也遇到過這種情況!
一般是重啓服務
現在知道了

#13


总而言之,SQL Server就是不管你是谁,只要你有内存,我就占,
最后快要全部占用完的时候(大约还剩4~10M),
感觉不好意思了,就开始释放了!

#1


设置SQL Server使用的最大内存。

-->企业管理器-->SQL Server实例名,右键-->属性-->内存页-->动态的配置SQL Server 的内存-->设置最大值


--一般都设置为自动,SQL SERVER 2000会处理内存问题的.

#2


关注..
在企业管理器中,右键点本地数据库打开属性在里面内存这项设置..

#3


楼主不用担心,这是SQL SERVER内部机制,当需要释放时(根据内存情况),SQL SERVER会自动释放的。如果楼主担心的话,可以给它设置最大内存。

SQL SERVER 2000的补丁要打到SP4

#4


多谢楼上的回复。

SQLSERVER2K经常会不释放内存的,我现在需要有一个办法 写到程序里,每当我跑程序的是后就先释放一次内存.不知道还有没有别的建议.

#5


我这目前的设置就是自动分配的0->MAX  但是因为SQLSERVER没有即使释放内存是我的程序效率变的很低

#6


如果不影响程序的运行就不用管了,如果影响就设置最大内存来加以限制,
这样剩下的内存就供其它使用,
SQL SERVER 2000当内存不足时,他会自动释放的.

#7


SQLSERVER2K经常会不释放内存的,我现在需要有一个办法 写到程序里,每当我跑程序的是后就先释放一次内存.不知道还有没有别的建议.
-------------------------------------------
那你就在程序里写上2句
net stop mssqlserver
net start mssqlserver
不就释放了。。。

#8


exec master..xp_cmdshell 'net stop mssqlserver/y'
exec master..xp_cmdshell 'net start mssqlserver/y'

#9


gc_ding(E.T) 楼上是重起服务,如果服务都STOP了那我程序岂不是也断开连接了。。。

#10


参考:
1.升级操作系统、sql server补丁
2.确保不是病毒原因(可能性比较小)
3.sql server设计时的要求就是最大可能的减少磁盘的I/O,磁盘I/O是比较消耗资源的,这个磁盘I/O包括了读取数据库文件还有和虚拟内存的页交换。如果还有足够的可用内存它都会毫不吝啬的使用的(没有设置上限),它会根据需要动态获取和释放内存的。你要分析的是这占用内存的开销主要用做了什么?是不是有大型的查询或事务操作。
4.如果服务器是专职的数据库服务器,不建议设置最大内存上限。如果还有其它重要的服务在
机器上运行,就要考虑它的内存使用是否会影响其它服务的正常的运行和性能。

#11


这是SQL Server 缓冲池的预期行为。
默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。

#12


俺也遇到過這種情況!
一般是重啓服務
現在知道了

#13


总而言之,SQL Server就是不管你是谁,只要你有内存,我就占,
最后快要全部占用完的时候(大约还剩4~10M),
感觉不好意思了,就开始释放了!