呵呵这是SQL Server2000的新功能!SQL Server 2000 实例使用的内存池大小可以是动态的,尤其是在运行其它应用程序或其它 SQL Server实例的计算机上。默认情况下,SQL Server 力求使计算机的虚拟内存分配量保持在比物理内存少 4 MB 到 10 MB 的水平上。SQL Server 实例可以实现此目的的唯一方法是改变它的地址空间大小。SQL Server 实例的地址空间中唯一可变的组件是内存池。SQL Server 地址空间中的其它可变组件(如 OLE DB 提供程序、OLE 自动化对象和扩展存储过程的数目和大小)全都由应用程序请求控制。如果应用程序执行分布式查询,SQL Server 必须装载相关联的 OLE DB 提供程序。这意味着如果装载 SQL Server 组件或其它应用程序启动,SQL Server 实例释放新组件或应用程序所需的内存的唯一机制只能是减少内存池的大小。SQL Server 管理员可以通过 min server memory 和 max server memory 配置选项限制内存池大小的改变量。内存池内的区域也是高度动态的。SQL Server 代码不停地调整分配给不同区域的内存池量以优化性能。在内存池内,用于存储连接环境和系统数据结构的区域由用户请求控制。当建立新连接时,SQL Server 须分配数据结构存储连接环境。当定义新数据库时,SQL Server 须分配数据结构定义数据库的属性。当引用表和视图时,SQL Server 须分配数据结构描述它们的结构和属性。这使缓冲区高速内存、过程高速缓存和日志高速缓存成为内存单元,其大小由 SQL Server 控制。SQL Server根据需要动态调整这些区域的大小以优化性能。

解决方案 »

  1.   

    设置内存池的大小似乎没用啊,
    我把内存池大小设为0-4M,但是一启动sqlservr.exe
    占的内存就超过了10M,而且仍然不断增加,
    打开enterprise manager玩了会,就到20M了
    谁能解释啊
      

  2.   

    这个问题我曾经问过,而且咨询过ms的技术支持请参考
    http://www.csdn.net/expert/topic/831/831449.xml?temp=.4277765
      

  3.   

    当时我曾经把csdn所有和VC,SQL server有关数据库内存占用相关的帖子阅读过
      

  4.   

    今天我用PIII机器,1200M,我的内存1000M,结果做实验象一个表中插入100万条记录,利用时间试19分,利用内存是856M,两边都差不多!
    原理:
    SQL SERVER 有很多的缓存,其中有一个比较重要的是脏数据缓存,它的作用是当对数据修改时候首先放在该缓存中,由检查点放入数据页中!
      

  5.   

    停止SQL SERVER服务,再重启它。
      

  6.   

    tmd,这个sql server是什么烂东西,
    这样根本无法支持不间断应用嘛
      

  7.   

    我的一般看法时SQL和OS的集成比较密切,SQLSERVER的MEMORY MANAGER就是有OS来管理的,所有如果MEMORY增加非常的大,唯一的办法时在自己的SOURCE CODE找原因,看看是否TRIGGER,CURSOR,SP,FUNCTION....是否有没释放的memory,或不够高效。非常的累,烦....
    你可以通过SP_WHO,SP_WHO2,SP_LOCK....看看那一个连接占用了MEMORY,再仔细分析......