none
SQL Server设置MemToLeave RRS feed

  • 问题

  • 尊敬的微软工程师,

    能否详细解释一下SQL Server设置MemToLeave这个解决方案,谢谢!


    谷青松

    2019年1月3日 0:58

答案

  • Hi 谷青松,

    一般情况下,如果一台机器上安装了SQL Server,并且这个SQL Server上有一定的负载,那么大部分的内存都会被SQL Server所占用。这是因为默认情况下,SQL Server会动态地根据负载情况来获取内存并一直保留,除非收到系统的请求才会释放内存。

    这些内存的最大部分是被分配给buffer pool(用来保存SQL Server的数据页)使用的,分配大量的内存给buffer pool有利于提升SQL Server的性能(对于SQL Server来说,数据是以每个page file 8KB存放在磁盘中的,因为内存的速度比磁盘快很多,当需要处理数据时,会将数据页放入内存中进行处理,一旦这些数据页进入内存,一般情况下并不会释放以备继续使用,这样可以防止不断地读写磁盘,但会造成大量内存占用)。但是SQL Server中并不只是buffer pool需要使用内存,还有很多其他的内存需求,比如说调用的dll,.NET CLR, Linked Servers 和extended stored procedures,MemToLeave就是指的这些剩下的内存,如果不对buffer pool的大小进行控制,那么即使该服务器上没有安装其他应用,对SQL Server本身而言,也会造成性能问题。

    一般预留MemToLeave有两种方法,一个是为SQL Server的buffer pool设置最大内存,这里可以使用SQL Server的设置"max server memory",该设置只会影响buffer pool的内存大小,而不会影响其他的内存使用。还有一种方法适用于32位系统的情况,就是使用启动参数-g,这个参数会帮助SQL Server为除了buffer pool以外的进程预留空间。

    重要:启动参数-g适用于32位系统的情况,当物理内存超过系统分配给应用的虚拟地址时,会使用这一块内存。

    Best Regards,
    Teige

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 谷青松 2019年1月3日 6:44
    2019年1月3日 6:35
    版主

全部回复

  • Hi 谷青松,

    一般情况下,如果一台机器上安装了SQL Server,并且这个SQL Server上有一定的负载,那么大部分的内存都会被SQL Server所占用。这是因为默认情况下,SQL Server会动态地根据负载情况来获取内存并一直保留,除非收到系统的请求才会释放内存。

    这些内存的最大部分是被分配给buffer pool(用来保存SQL Server的数据页)使用的,分配大量的内存给buffer pool有利于提升SQL Server的性能(对于SQL Server来说,数据是以每个page file 8KB存放在磁盘中的,因为内存的速度比磁盘快很多,当需要处理数据时,会将数据页放入内存中进行处理,一旦这些数据页进入内存,一般情况下并不会释放以备继续使用,这样可以防止不断地读写磁盘,但会造成大量内存占用)。但是SQL Server中并不只是buffer pool需要使用内存,还有很多其他的内存需求,比如说调用的dll,.NET CLR, Linked Servers 和extended stored procedures,MemToLeave就是指的这些剩下的内存,如果不对buffer pool的大小进行控制,那么即使该服务器上没有安装其他应用,对SQL Server本身而言,也会造成性能问题。

    一般预留MemToLeave有两种方法,一个是为SQL Server的buffer pool设置最大内存,这里可以使用SQL Server的设置"max server memory",该设置只会影响buffer pool的内存大小,而不会影响其他的内存使用。还有一种方法适用于32位系统的情况,就是使用启动参数-g,这个参数会帮助SQL Server为除了buffer pool以外的进程预留空间。

    重要:启动参数-g适用于32位系统的情况,当物理内存超过系统分配给应用的虚拟地址时,会使用这一块内存。

    Best Regards,
    Teige

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 谷青松 2019年1月3日 6:44
    2019年1月3日 6:35
    版主
  • 谢谢大神指教!

    谷青松

    2019年1月3日 6:51