当前位置:首页 > 内存 > 正文

java 内存数据库

  • 内存
  • 2024-07-02 01:51:18
  • 192

一、怎样解决SQLServer内存不断增加问题为此,数据库引擎会获取尽可能多的可用内存,同时保留足够的可用内存以防止操作系统交换内存。SQLServer实例通常在初始化过程开始时获取8到12MB的内存。初始化完成后,在用户登录实例并开始生成工作负载之前不会获取内存。此时,实例将继续根据需要获取内存以支持工作负载。随着越来越多的用户登录并运行查询,SQLServer会获取满足需求所需的额外内存。实例将继续获取内存,直到达到自己的内存分配目标,并且在达到该目标的下限之前不会释放任何内存。为了获得尽可能多的内存而不生成不必要的分页I/O,每个SQLServer实例都配置了一个内存获取目标,直到计算机的可用物理内存包含在4MB到10MB之间。测试表明,WindowsNT和Windows2000具有最小内存交换,直到内存分配等于可用物理内存减去4MB为止,具有繁重工作负载处理任务的SQLServer实例会在该范围的下限(4MB)保留可用物理内存。具有轻量工作负载处理任务的实例会保留该范围高端的可用物理内存(10MB)。SQLServer实例的目标会随着工作负载的变化而变化。随着更多用户登录并产生更多工作,实例倾向于获取更多内存以将可用内存保持在4MB限制以下。随着工作负载变轻,实例将其目标调整为10MB可用空间并释放内存以供使用。操作系统。将可用空间量保持在10MB到4MB之间可以防止WindowsNT或Windows2000执行过多的页操作,同时允许SQLServer获得尽可能大的缓存,而不会导致额外的分页。实例目标内存配置与数据库缓冲池相对于可用池大小的页面需求有关。在实时的任何时间点,总缓冲区页需求取决于满足正在执行的任何查询所需的数据页数量。如果数据页的需求相对于高速缓存中的页数来说较大,则当前在缓冲区中的每个页都可能在相对较短的时间内被新页替换。这可以通过缓冲区管理器对象的页面寿命性能计数器来测量。对相对较小缓冲区的高需求的情况将产生较短的生命周期,并且最终效果将增加I/O,因为页面通常需要重写才能被多个逻辑读取引用。为了缓解这个问题,数据库引擎可以获取更多内存来增加缓存大小。当页面生存期较长时,数据库引擎将可用内存定位在目标范围的高端(10MB);当页面生存期很短时,数据库引擎将可用内存定位在目标范围的下端(4MB);)。当其他应用程序在运行SQLServer实例的计算机上启动时,它们会消耗内存,导致可用物理内存量降至SQLServer目标以下。然后,SQLServer实例从其地址空间释放足够的内存,以将可用内存量返回到SQLServer目标。如果其他应用程序停止运行并且可用内存增加,SQLServer实例将增加其内存分配的大小。SQLServer每秒可以释放和获取几MB字节的内存,从而使其能够快速适应内存分配的变化。您可以通过配置允许SQLServer使用的最大内存来设置限制:最小和最大服务器内存影响minservermemory和maxservermemory配置选项确定数据库引擎SQLServer使用的内存量的上限和下限。数据库引擎不会立即获取minservermemory中指定的内存量。数据库引擎开始仅使用初始化所需的内存。随着数据库引擎的工作负载增加,它将不断获取支持工作负载所需的内存。在达到minservermemory中指定的内存量之前,数据库引擎不会释放任何所需的内存。一旦达到最小服务器内存,数据库引擎就会使用标准算法获取并释放所需的内存(将可用操作系统内存保持在4MB到10MB之间)。唯一的区别是数据库引擎永远不会将内存分配减少到minservermemory指定的级别以下,并且永远不会获取比maxservermemory指定的级别更多的内存。数据库引擎可用的内存量完全取决于实例上的工作负载。不处理大量查询的SQLServer实例可能永远不会到达minserver的内存。如果为minservermemory和maxservermemory指定相同的值,一旦分配给数据库引擎的内存达到该值,数据库引擎将停止动态释放和获取内存。如果您频繁启动或停止运行SQLServer实例的计算机上的其他应用程序,则启动这些应用程序所需的时间可能会随着SQLServer实例分配和释放内存而延长。此外,如果SQLServer是在一台计算机上运行的众多服务器应用程序之一,则系统管理员可能需要控制分配给SQLServer的内存量。