ITPub博客

首页 > 数据库 > > 64位操作系统不要安装32位的SQLServer

64位操作系统不要安装32位的SQLServer

作者:TTT1234 时间:2023-02-21 16:43:11 0 删除 编辑

64位操作系统不要安装32位的SQLServer,主要原因就是无法充分使用内存。

这里主要通过我遇到的一个案例进行讲解:


首先查看数据库服务器里的应用程序日志,查看到大量的报错。

这里的报错是:

升级策略卸载了AppDomain以确保应用程序的一致性。访问关键资源时内存不足,曾经运行该线程的应用程序域已卸载。


分析:

概念解释:

AppDomain是CLR的运行单元,它可以加载Assembly、创建对象以及执行程序。

AppDomain是CLR实现代码隔离的基本机制

而数据库里运行CLR,是需要单独分配一部分内存

这一部分内存叫MemToLeave,被称为MemToLeave的原因是由于SQL Server虽然大部分内存被用于缓冲区,但还需要一些连续的内存用于SQL CLR,linked server,backup buffer等操作

小结:上面的错误应该是SQLserver中分配给CLR运行的内存不充足导致的。



那么问题来了?我们现在看下图,数据库服务器的可用内存还有26G,而且数据库设置的最大内存远远大于其实际使用的。那么为什么SQLServer不去使用更多的内存?

原因是:虽然操作系统是SQLServer2012 64位的,但SQLServer应用是32位的。而且版本是SQLServer2012

解释:

由于32位的SQL Server使用的是VAS进行地址分配,因此寻址空间被限制在4GB,这4GB还要有一半分给Windows,使得Buffer Pool最多只能用到2G的内存,这使得32位SQL Server即使有多余的物理内存,也无法使用。

    解决办法之一是通过减少Windows默认占用的2G到1G,使得SQL Server可以使用的内存变为3G。这个可以通过在Windows Server 2008中的命令行键入 BCDEdit set设置increaseuserva选项,设置值为3072MB,对于Windows Server 2003来说,需要在boot.ini中加上/3gb启动参数。   
    但这个办法能使用的内存也最大只有3G,还是不够。而且用户的服务器是64位的,所以没有必要开启这个 

   另一种办法是使用AWE(AddressWindow Extension)分配内存。AWE通过计算机物理地址扩展(Physical Address Extension PAE),增加4位,使得32位的CPU寻址范围增加到2的36次方,也就是64GB。基本解决了寻址范围不够的问题。

   但问题是SQLServer2012取消了这个开启Awe这个选项。

   下图是SQLServer2008R2开启AWE的位置,而SQLServer2012没有


下面是32位SQLServer在各种操作系统下所能使用的最大的内存:



解决办法:

     就是安装64位SQLServer2012


结论:

     32位的SQLServer运行在64位的操作系统上无法充分使用内存空间。

     由于SQLCLR需要锁定内存空间,当应用程序的并发较大时,SQLCLR操作很多时,就会出现上述报错。由于内存空间不足,就会出现卸载AppDomain然后去装载新的应用程序域的问题。


本文来源https://www.modb.pro/db/61013

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69953058/viewspace-3120628/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-11-13

  • 博文量
    566
  • 访问量
    5209