SQLServer数据库内存会不断增加的问题分析

SQLServer数据库内存会不断增加的问题分析,第1张

SQLServer数据库内存会不断增加的问题分析,第2张

当SQL Server数据库引擎在Microsoft & reg中运行时Windows NT & reg或者Windows & reg。000,其默认的内存管理行为不是获取特定数量的内存,而是在不产生冗余分页I/O的情况下获取尽可能多的内存,为此,数据库引擎获取尽可能多的可用内存,同时保留足够的可用内存以防止操作系统交换内存。
SQL Server实例通常在启动时获得8到12 MB的内存来完成初始化过程。初始化实例时,在用户连接到实例并开始生成工作负载之前,不会获得更多内存。此时,实例会根据需要不断获取内存来支持工作负载。随着越来越多的用户连接并运行查询,SQL Server将获得支持需求所需的额外内存。实例将继续获取内存,直到它达到自己的内存分配目标,并且不会释放任何内存,直到它达到目标的下限。
为了在不产生冗余分页I/O的情况下获得尽可能多的内存,SQL Server的每个实例都会设置一个内存获取目标,直到计算机的可用物理内存在4 MB到10 MB的范围内。选择这个范围是因为测试表明,在内存分配等于可用物理内存减去4 MB之前,Windows NT和Windows 2000的内存交换都很少。工作负载较重的SQL Server实例保留的可用物理内存处于范围的下限(4 MB);工作负载较轻的实例保留的可用物理内存位于范围的高端(10 MB)。
SQL Server实例的目标随着工作负载的变化而变化。当更多的用户连接并产生更多的工作时,这个实例倾向于获取更多的内存来保持可用内存低于4 MB的限制。当工作负载减少时,实例将其目标调整为10 MB的可用空空间,并将内存释放给操作系统。将available 空的数量保持在10 MB到4 MB之间可以防止Windows NT或Windows 2000执行过多的页面更改操作,同时,SQL Server可以在不引起额外交换的情况下获得尽可能多的缓存内存。
实例的目标内存设置与数据库缓冲池相对于可用缓冲池大小的页面需求有关。在任何时刻,缓冲区页面的总需求取决于满足所有当前执行的查询所需的数据页面的数量。如果相对于高速缓存中的页面数量,对数据页面的需求较大,则当前在缓冲区中的每个页面都可能在相对较短的时间内被新页面替换。这可以通过缓冲区管理器对象的页面生存期性能计数器来衡量。如果对相对较小的缓冲区有很高的需求,就会产生很短的生存期,纯粹的效果就是增加I/O,因为页面在被多个逻辑读取和引用之前往往会被重写。为了缓解这个问题,数据库引擎可以获取更多的内存来增加缓存的大小。当页面寿命很长时,数据库引擎将可用内存定位在目标的高端(10mb);当页生存期很短时,数据库引擎位于目标范围(4 MB)的低端。
当其他应用程序在运行SQL Server实例的计算机上启动时,它们会消耗内存,从而导致可用物理内存量低于SQL Server的目标。然后,SQL Server实例从其地址空中释放足够的内存,将可用内存返回给SQL Server的目标。如果其他应用程序停止运行并且可用内存增加,SQL Server实例将增加其内存分配大小。SQL Server每秒可以释放和获取几MB的内存,这使它能够根据内存分配的变化进行快速调整。您可以通过设置sql server可以使用的内存来限制它:最小和服务器内存的影响
最小服务器内存和最大服务器内存配置选项确定SQL Server数据库引擎使用的内存的上限和下限。数据库引擎不会立即获得最小服务器内存中指定的内存量。当数据库引擎启动时,它只使用初始化所需的内存。随着数据库引擎工作负荷的增加,它将继续获取支持工作负荷所需的内存。在达到最小服务器内存中指定的内存量之前,引擎不会释放任何所需的内存。一旦达到最小服务器内存,数据库引擎将使用标准算法(将操作系统的可用内存保持在4 MB到10 MB之间)来获取和释放所需的内存。不同之处在于,数据库引擎永远不会将内存分配降低到最小服务器内存指定的级别以下,也永远不会获得超过最大服务器内存指定的级别的内存。
数据库引擎获取的内存量完全取决于实例上的工作负荷。不处理许多请求的SQL Server实例可能永远不会达到最小服务器内存。
如果为最小服务器内存和最大服务器内存指定相同的值,一旦分配给数据库引擎的内存达到该值,数据库引擎将停止动态释放和获取内存。
如果在运行SQL Server实例的计算机上频繁启动或停止其他应用程序,由于SQL Server实例分配和释放内存,启动这些应用程序所需的时间可能会延长。此外,如果SQL Server是在一台计算机上运行的多个服务器应用程序之一,系统管理员可能需要控制分配给SQL Server的内存量。在这些情况下,可以使用最小服务器内存和最大服务器内存选项来控制SQL Server可以使用的内存量。
如何设置固定内存量(企业管理器)
设置固定内存量
扩展服务器组。
右键单击服务器,然后单击“属性”。
单击“内存”选项卡。
单击“使用固定内存大小(MB)”,然后将固定内存滑块放在适当的位置。
注意:
如果使用默认设置,Microsoft & regSQL Server & # 8482内存将被动态配置。这是由sql server的内存管理机制决定的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer数据库内存会不断增加的问题分析

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情