在 UNIX 操作系统上,当在数据库激活时分配初始数据库内存大小之后,DB2 会根据需要分配额外内存以支持动态需求。额外内存分配受任何指定的固定大小限制约束。会将所有数据库内存分配为共享内存,并且会保留下来,直到数据库取消激活。在某些 Linux 和 UNIX 操作系统上,已分配的共享内存的级别仅会将虚拟内存使用情况考虑在内,并且不需要实内存支持。在 Windows 操作系统上,会根据需要将数据库内存分配为专用内存,这受任何指定的固定大小限制约束。不再处于“使用中”状态的分配可动态释放,也可保留以供复用。在数据库取消激活时,会释放所有未完成的内存分配。有关操作系统支持的详细信息,请参阅“操作系统支持”部分。
已落实的内存是受操作系统支持的内存。会根据需要落实已分配的内存,但固定内存(它包括大页配置)例外。会高速缓存内存池不再需要的已落实内存以改进性能,或将其释放(取消落实)回操作系统。执行的操作受 db_mem_thresh 配置参数约束。如果减少了 database_memory 大小(例如通过自调整内存管理器 (STMM)),那么必要时,还会释放或取消落实内存。当数据库取消激活时,会释放所有已落实的内存。
数据库内存大小会将实例内存使用情况考虑在内。数据库内存溢出区域等价于数据库内存使用者的已进行高速缓存的实例内存。必要时,可动态减少数据库内存溢出,以适应数据库实例使用的其他内存区的需求。当实例内存限制生效时,会自动完成此操作。
会根据数据库内存大小保留底层内存池的已配置大小。会将剩余数据库内存视为溢出内存。内存池通常允许使用任何可用的溢出(也称为非保留内存)。
可分配给 database_memory 的值的行为如下所示。
如果存在超出溢出所提供内存的无法预料需求,那么 AUTOMATIC 设置允许数据库内存增大到超出其初始大小。手动或由 STMM 对各个内存池进行的动态配置更改还会按对应的量调整数据库内存大小。
如果启用了 STMM(SELF_TUNING_MEM 的值为 ON),那么 STMM 会控制总体数据库内存大小。STMM 会考虑底层的配置需求(其中包括溢出)以及通过获取额外的可用内存而产生的性能优点。根据 instance_memory 设置,STMM 会调整数据库内存以免系统内存和实例内存不足。当激活了数据库时,如果没有足够的系统内存或实例内存来支持启动配置,那么会减少 STMM 已调整的任何内存区以适应现有的内存约束。此操作受已强制执行的最小大小约束。
如果所分配值太小,那么会分配支持该配置所需的较大最小大小。分配的数据库内存不能超过固定设置或较大最小大小。但是,数据库内存设置仍然可动态增大或更改为 AUTOMATIC。仅当有足够溢出可用时,对内存池的动态配置增大才会成功。
如果启用了 STMM(SELF_TUNING_MEM 的值为 ON),那么仅会调整底层的内存池和溢出。在数据库激活时,如果存在的固定设置太小,无法支持当前配置,那么会减少 STMM 已调整的各个区域以适应现有的内存约束。此操作受已强制执行的最小大小约束。建议至少保留固定 database_memory 配置的一半可用于 STMM 调整。例如,如果手动设置缓冲池区域的大小,请避免让缓冲池耗用的内存超过固定 database_memory 设置的一半。这样做可能会限制 STMM 调整功能,从而导致性能并非最佳并且产生与受约束内存资源相关的症状。
操作系统 | 提供的支持 |
---|---|
AIX | 缺省情况下,使用中等大小 (64K) 的页,这会有益于性能。AIX 支持固定内存和大/巨 (16MB/16GB) 页。1 |
HP-UX | 分配的共享内存需要虚拟交换支持。HP-UX 支持固定内存。1 |
Linux | 分配的共享内存会将虚拟共享内存限制 (shmall) 考虑在内。Linux 支持固定内存和大 (2MB) 页。1 |
Solaris | 分配的共享内存需要虚拟交换支持,并且会将任何虚拟内存限制考虑在内。Solaris 支持固定 ISM 内存和大页。2 |
Windows | 支持大 (2MB) 页。1 |
注:
|
db2 "select member, substr(db_name,1,10)as db_name, substr(memory_set_type,1,10) as set_type,
memory_set_size, memory_set_committed, memory_set_used, memory_set_used_hwm
from table(mon_get_memory_set('DATABASE','',-1))"
会返回以下信息:MEMBER DB_NAME SET_TYPE MEMORY_SET_SIZE MEMORY_SET_COMMITTED MEMORY_SET_USED MEMORY_SET_USED_HWM
------ ---------- ---------- -------------------- -------------------- -------------------- --------------------
0 SAMPLE DATABASE 154927 68616 67829 68616
0 TEST DATABASE 238092 123404 123404 123404
2 record(s) selected.
在此情况下,数据库内存集合正在使用 154927KB instance_memory (MEMORY_SET_SIZE) 以及 68616KB 系统内存 (MEMORY_SET_COMMITTED)(其中 67829KB (MEMORY_SET_USED) 分配给内存池)。
db2pd -db <database_name> -memsets -mempools, db2pd -dbptnmem