大内存SQLServer数据库的加速剂

核心提示:SQL Server数据库与Windows操作系统来自同一个家庭

  为数据库配置比较大的内存,可以有效提高数据库性能。因为数据库在运行过程中,会在内存中划出一块区域来作为数据缓存。通常情况下,用户访问数据库时,数据先会被读取到这个数据缓存中。当下次用户还需要访问这个数据时,就会从这个数据缓存中读取。因为在数据缓存中读取数据要比在硬盘上读取数据快几百倍。所以扩大数据库服务器内存,可以有效提高数据库性能,特别是操作大型数据库时效果更加明显。

SQL
Server数据库与Windows操作系统来自同一个家庭,在技术上具有一定的共通性。我们可以调整Windows操作系统的一些参数来提高SQLServer数据库服务器的性能,使之更高效的运行。

  但是,现在企业中普遍采用的数据库服务器都是32位的操作系统。而这个32位的操作系统却有最大内存的使用限制。通常情况下,标准的32位地址最多可以采用4GB的内存。若数据库管理员想让数据库系统采用更多的内存来提高数据库的性能,则就需要进行额外的配置。下面笔者就介绍两种常用的配置方式,让SQLServer数据库服务器支持大内存,让其成为数据库的加速剂。

一、 提高虚拟内存来提高数据库服务器性能。

  一、让数据库应用程序支持3GB的内存空间

虚拟内存简单的来说就是内盘中的一块空间。当物理内存不够时,操作系统会自动把某些驻留在内存中暂时不用的内容移植到这个在硬盘上的虚拟内存中,以释放更多的空间给新的应用程序使用。也就是说,当物理内存使用完时操作系统会拿出一部分硬盘空间来充当内存使用,以缓解内存的压力。为此从某种程度来说,这个虚拟内存的设置也会影响到数据库服务器的性能。那么这个虚拟内存到底该设置多少为好呢?这没有一个固定的标准。这需要数据库管理员根据部署的应用来确定。

  虽然操作系统支持4GB内存。可是,这并不会全部给数据库等应用程序使用。默认情况下,在32位操作系统中,将有2GB的内存空间是为操作系统所保留的。即使没有用完,其他应用程序也是不能够染指的。而包含SQL
Server数据库在内的所有应用程序,只能过采用剩余的2GB内存空间。

如数据库没有一些高级的应用,如数据仓库、全文索引或者不适多个应用服务一身的话,笔者认为只要把虚拟内存设置为物理内存的1.5倍即可。但是,如果在数据库服务器上配置了数据仓库或者全文索引的话,则这个1.5倍的虚拟内存往往是不够的。此时笔者建议需要把虚拟内存配置为物理内存的3倍到四倍。同时,需要调整数据库中的最大服务器内存选项,将其设置为物理内存的1.5倍。也就是说,其在使用内存的时候,可以使用虚拟内存大小的一半。注意这个设置时必须的,否则的话,调整数据库虚拟内存很难起到应有的效果。而且当以后内存升级了,则也需要同时更改这个两个参数。

  但是,在实际应用中,操作系统往往用不着多大2G的内存。根据笔者的经验,一般只要为操作系统保留1G的内存已经足够其使用。只要没有病毒等不良因素作怪,这个内存不会被完全适用。如此的话,应用程序可以采用的内存空间就会多达3G,比原先整整多出一个G来。

最后需要说明的一点就是,虚拟内存并不是越大越好。如果设置为10倍、20倍,那么这是浪费。以往内存中没有这么多的内容可以往虚拟内存中存放。所以,针对SQL
Server数据库与Windows服务器来说,4倍于物理内存的虚拟内存已经足够了。设置的再大的话,就没有多少的实际意义了。

  要实现这个转变,其实很简单。在Windows操作系统中,有一个BOOT启动配置文件。为了让数据库服务器支持3GB的用户模式进程空间,必须在这个配置文件中,加入一个/3gb的参数,然后重新启动操作系统即可。这么设置之后,应用程序就可以寻址3GB的进程地址空间
,而为操作系统保留1GB的内存空间。

二、 调整本地客户端的任务优先级。

  有时候,这个小小的配置可以在很大程度上提高数据库的性能。记得有一次,笔者为一家企业优化数据库性能。笔者查看了用户的数据库环境之后,就建议用户增大数据库服务器的内存,从2G增加到4G.可是,效果并没有很大的改善。正当笔者束手无措的时候,就想到了改变操作系统与应用程序的内存分配方式。为此,笔者就更改了BOOT启动配置文件,只给操作系统保留1G的内存空间。重新启动后,数据库性能得到了很大的改善。

在数据库初始化的过程中,有大部分的任务需要在本地客户端上完成。即时在后续维护中,出于某种原因仍然要在本地客户端上操作。那么什么是本地客户端呢?其实本地客户端就是跟数据库服务器部署在同一台计算机上的客户端。如我们在导入期初数据的时候,为了方便会在本地客户端上直接进行操作。因为这可以节省数据在网络上传输的时间。

  二、为SQLServer启用更高的内存支持

不过在本地客户端上进行操作的时候,往往分为前台运行与后台运行。操作系统这么设计的本意是为了提高远程客户端的执行效率。如在远程客户端生成物料需求计划的时候,由于运算量比较大,其花费的时间可能比较久,如可能需要20分钟。为了提高工作效率,对于类似的作业,应用程序可以把这个运算放置在后台运行。不过需要注意的是,把某个作业放置在后台运行,并不能够节省其运行的时间,而往往由于放置在后台的作业其优先级比较低,往往实际花费的时间还会延长,如会延长到23分钟等等。之所以要把这个长时间运行的作业放置在后台,主要是为了让用户不用干等,可以先作其他事情。等到运行完成后,系统会自动把相关的结果返回给用户。这在感觉上是缩短了运行的时间(往往在等待的过程中时间过得特别慢),而实际上其运行的时间根本没有缩短,甚至会更长。

  如果数据库应用程序内存寻址空间达到3GB后,数据库管理员还不满足的话,则就需要通过增加物理内存的方式,来提高应用程序的性能。若需要服务器操作系统突破其默认4GB内存空间的限制,支持4GB以上的内存空间,也不是不可能的。只是需要进行额外的配置,并且,其维护的工作量也比较大。

这个处理策略对于远程客户端来说确实有用,至少可以在感觉上缩短用户的等待时间。而且可以让用户先进行其他的操作。但是如果在本地客户端上,处理某些作业的时候,可能并不希望如此。如在本地客户度进行物料需求计划测试,数据库管理员希望即时把这个计划放置在后台运行,其也能够与前台应用程序具有相同的优先级,以减少这个处理时间。所以,当数据库管理员遇到类似情况时,就需要调整操作系统的相关设置,让作为在后台运行的应用程序,也能够与前台运行的其他应用程序具有相同的优先级。

澳门新葡亰3522平台游戏,  若想要SQLServer数据库支持4GB以上的内存寻址空间,则往往需要进行如下配置。

通常情况下,安装完干净的SQL
Server数据库时,服务器任务调度设置为“务”,即前后台应用程序没有优先级的分别。也就是说,此时将为前台应用程序与后台应用程序提供相等的处理时间。但是有时候为了兼顾远程客户端,在部署实例的时候,会改变这设置。如把降低后台应用程序的优先级,让更多的资源能够服务于前台应用程序。在大部分情况下,这个设置是必要的。不过如果出于某些原因需要在本地客户端执行某些操作的话,则数据库管理员需要暂时调整这个配置,以节省某些作业的运行时间。有时候甚至可以将服务器任务调度设置为最大或者应用程序,这就可以为前台应用程序提高最大的处理器时间。

  第一步:锁定内存页。