合理设置内存让数据库与其他程序共存
一、SQL SERVER数据库的内存管理机制。
在数据库启动的时候,其实数据库引擎并不会马上在内存中抓取min参数规定的内存量。这种占着茅坑不拉屎的事情SQL Server数据库是不会做的。系统在刚开始启动的时候,数据库缓冲池只抓取初始化所需要的内存,如上图所示。数据库启动之后随着业务量的增大,数据库引擎的工作负荷也会随之增加。此时数据库引擎会继续获取完成工作所需要的内存。在达到min规定的内存数量之前,数据库引擎缓冲池是不会释放它获取的任何内存。如数据库初始化内存为20M,而规定的min内存数量为50M。则可能因为用户查询某个负责报表的需要,内存需要量会达到40M。查询作业执行完毕后数据库系统缓冲池实际使用的内存量可能只需要20M即可。但是只要没有达到50M这个值。则数据库系统不会把没有的20M内存还给操作系统,而是一直占用着,以方面后续的作业。
如果用户需要调用数据库系统中的函数或者过程,此时内存的需要量可能会超过规定的最小内存量,如达到80M。此时数据库引擎会根据一定的标准算法,根据需要来获取和释放内存。当需要使用超过50M的内存的时候,只要没有达到内存的最大限值之前,则会根据系统提供的标准算法来获取内存。至于这个标准算法到底是怎么样的,这不是我们数据库管理员所需要关注的内容。然后等到这个过程或者函数调用完毕后,内存使用量可能会降低到最低内存数量以下,如又回复到40M。此时数据库引擎就会释放内存,把没有用到的内存释放出来给其他应用程序使用。但是这个释放会有一个限制。数据库引擎缓冲池从不将内存分配降低到最小内存所指定的水平下。也就是说,此时数据库最多会释放30M的内存,为自己留下50M的内存空间,即使当前其可能只需要用到40M内存空间即可。当然在抓取内存空间的时候,其也不会为自己分配高于MAX内存所规定的内存空间。
二、内存参数配置对其他应用系统的影响。
在一台服务器上,往往多个应用程序需要共享内存。如可能在一台服务器上部署了多个应用系统,至少在一台服务器上操作系统与SQL Server数据库之间需要共存。为此SQL Server数据库可以使用多少的内存空间,肯定会对其他的应用程序产生比较大的影响。
如在一台服务器上部署了SQL Server数据库系统、邮件应用系统、ERP应用服务器等等三个应用系统。如果先启动SQL Server数据库系统,后来又要启动邮件应用系统,此时邮件应用系统的启动速度就会受到影响。因为某些应用程序在初始化的过程中可能会需要用到比较大的内存空间。而在启动的过程中,可能数据库在使用的内存比较多,剩余的内存不能够满足其他应用程序启动的需要。此时其他应用程序在启动时就会等待,等待数据库应用程序释放内存。这就会延长其他应用程序的启动时间。
另外在执行某些工作的时候,也会影响到。如在同一个时间对数据库与邮箱服务器进行备份作业。由于备份作业需要用到比较多的内存,此时就会发生内存争用选项。为此如果能够把数据库的最低内存设置的比较低的话,则数据库系统在用完内存话就可以马上把内存释放出来,而不会为自己保留比较大的暂时不同的内存空间。同理,在保障业务需求的情况下把最大内存设置的比较小,则可以为其他应用程序留下比较多的内存空间。