SQLServer如何释放内存

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大数据量的操作是怎样释放内存的!我想这是SqlServer对资源的调度问题吧?如果你任务繁重,SQLServer使用更多的内存应该是正常的,我们不应强行让他释放吧?就像用那些所谓“内存清理”软件,我认为没有什么实际效果。你可以用管理器设置SQLServer的内存使用情况,不过我觉得一般还是让SQLServer自已确定的好。不对吧,难不成用户每查询一次,SQLSERVER所占用的内存就增加一点,这样有几天,我的服务器内存就会爆掉的,不会让我几天就要重起一次机器吧?它不是无限增长啊,到一定的极限应该就会停止增长,而且我认为如果长时间没有操作, SQLServer应该自动清理内存(不过我没有实际验证过)。你用管理器的内存设定可以看到SQLServer的最大内存使用量就是你的物理内存使用量,它不会无限扩张下去的,何况你还可以手工指定最大使用量。就像Windows的内存管理,你运行一个程序,内存使用量一般会上升,特别是刚开机不久的时候,但是你关闭程序,内存使用量一定就会下降吗?内存管理由Windows自已决定,用户不需操心,SQLServer也一样,如果系统解决不好这个问题,那这个系统就太滥了。。。呵呵,这个我就不太明白了,按我们做程序的逻辑原则,内存使用后应该立即释放,如果不能立即释放,那么这个空间会一直被占用直到机器重起,如果SQLSERVER能够释放它所占用的内存,那么为什么不会在用完之后立即释放呢?况且都是用户远程访问它,根本就不存在长期占用系统内存,真的有点糊涂了,还请多多关照! 难道我们就不能在使用完马上释放吗?不可思议!我想数据库系统应该有些特殊性,这个内存保留着显然是有好处的: 1、可以避免内存的频繁申请、释放,这是需要耗费时间的。 2、数据原本是在磁盘文件中,速度比内存慢了几个数量级,所以今后可能要访问的数据保存在内存中显然可以节约很多的时间,减少的磁盘访问次数。这是典型的空间换时间方法。 如果你写过网络程序,你会发现ServerSocket有一个threadcachesize属性,它是在用来缓存数据发送、接收线程,因为释放、重新创建线程是比较耗时的,这样虽然浪费了一些内存,但是换来了更高的效率。远帆同志,你的说法是错误的,如果你有接触过海量数据就不会这样认为了,事实不是你想得那么简单的。所谓的海量数据,数据量应该在1.2T以上,至少我接触的是这么回事的。哦,请指点!贴出程序让大伙分析一下再做判断!远帆兄,多谢帮助,因为是这样的,我的系统是一个用户远程访问且频繁使用的BS结构的一个系统,一般用户的访问量比较大,所以在每天晚上都会做一个统计工作,统计后内存增加的很大,一般得到1G左右,统计前只有100多兆,而整个系统还有其他服务器所构成,所以,你看是不是我应该限制一下SQLSERVER的内存使用!啊,这么大的系统,呵呵~我应该向你学习才是。内存增加到那么大之后呢,是否影响下次的统计?有没有事物没有释放之类的?如果数据处理量大,最好在服务器端用存储过程之类完成比较好吧?看来我只有把我的统计工作都做成存储过程了,没有其他的方法了。多谢您的帮助!是啊,用存储过程还做应该还可以增加速度。也没帮上什么忙,不谢。当物理内存不足的时候,操作系统就会更多的使用硬盘上的虚拟内存,你应将虚拟内存设大一点。你的系统是用户频繁访问数据库,内存当然会不断的增长,但是不应担心, SQL在内存增加消耗时,[red]系统会进行页面交换[/red],将一些暂时的处理放到硬盘的虚拟内存中,先处理新进的线程。内存的使用量是交替的,因为你的客户频繁访问,所以内存始终是大量消耗。你可以看一下任务管理器的情况。不必为这个问题担心,操作系统可以处理的。你是否用到事务了?to songjia:好像不太对,sqlserver似乎不使用虚拟内存(我也不知道是不是这样),如果用虚拟内存那样没有什么太大的意义。听问题的关键是使用的内存不能释放,担心系统会。。。当物理内存不够时,操作系统会进行页面交换,将物理内存中的一部分内容先转移到硬盘的虚拟内存中,根据优先级,使用物理内存处理。当内存占用量很高时,操作系统会频繁的进行页面交换,保证正常的工作。内存占用量高是由于你的客户端频繁访问引起的。这个不需要你担心并且控制,SQL SERVER 本身就是这样设计的,如果你不限制他的内存使用数量,他会用完所有的内存的,主要用于存放编译过后的查询计划,并不是一般的你所认为的应用程序的模式,他是作为一种服务存在的。 当其他程序需要内存的时候,SQL SERVER 会释放部分查询计划所占用的内存并把内存提供给需要的程序,所以不必要关心SQL SERVER的内存管理 如果你觉得不应该让SQL SERVER占用过多内存,可以在属性中限制内存用量。 by the way 我是做证券软件的,数据量一般大于1亿条,SQL SERVER经常吃到2-4G内存但系统运行良好怎么看SQL SERVER 所占的内存呀,:)sql的内存用量是动态自行控制的。不要你去操心,但是她绝对不会使你的系统down掉。当然你也可以控制她最多可以用多少内存的。我公司的那台服务器的内存用量是1.5个G[:D]其实事情不是这么简单。 Mssql在内存的释放上是有问题的。如果真的是海量数据(所谓海量,绝非只一两百个G的概念),你会发现,在一个短时间内,如果联系作大量的查询等操作,它占用的内存会不断上升,接着数据库的速度会明显下降,往往在这个时候,如果重新启动系统,就可以解决问题。和微软联系过,目前无好的解决方案。后来我们自己做了好几个组件来提高它的效率,效果虽然不是很好但也可以接受。象数据库这东西,特别是Mssql,在数据量大的情况,确实不大好用。但是因为它和微软自己的操作系统的连接比较好做,嗯,所以还是只好用他的。。这是SQL的内存管理机制决定的 SQL管理内存的原则是这样的,只要你的内存够用(这个够用是指你分配给SQL的可用内存),则SQL不会释放占用的内存,新的操作会分配新的内存,直到分配完可用的内存后,才会释放内存 因为内存占用会一直上涨,直到达到极限 解决的
相关文档
最新文档