实例分配内存
早上学习一下这段东西,是否理解并吃透了先不管,先看个脸熟再说
发生下列事件时,将为数据库管理器的每个实例分配内存:
•
当启动数据库管理器(db2start)时: 分配数据库管理器全局共享内存,并且一直会保持此分配状态,直到数据库管理器停止运行(db2stop)为止。此区域中包含数据库管理器在管理所有数据库连接上的活动时所需的信息。当第一个应用程序与数据库连接时,将分配全局内存区和专用内存区。
•
当第一次激活数据库或与数据库连接时: 将分配数据库全局内存。所有可能与该数据库连接的应用程序均使用数据库全局内存。数据库全局内存的大小由 database_memory 配置参数指定。指定的内存可以大于最初所需的内存,以便以后可以动态地分配附加内存。虽然在数据库活动时不能增加或减少数据库全局内存的总容量,但是可以调整数据库全局内存中的各个内存区的大小。此类内存区包括缓冲池、锁定表、数据库堆、实用程序堆、程序包高速缓存和目录高速缓存。在已启用数据库管理器分区内并行性配置参数(intra_parallel)的环境中,或者在已启用连接集中器的环境中,还可以分配共享排序堆作为数据库全局内存的一部分。
•
当应用程序与数据库连接时: 在分区数据库环境中、在已启用数据库管理器分区内并行性配置参数( intra_parallel )的非分区数据库环境中或在已启用连接集中器的环境中,可将多个应用程序分配至 应用程序组 以共享内存。每个应用程序组均有其自身分配的共享内存。在应用程序组共享内存中,每个应用程序均有其自身的应用程序控制堆,但都使用应用程序组的共享堆。
以下三个数据库配置参数决定了应用程序组内存的大小:
1 appgroup_mem_sz 参数,用于指定应用程序组的共享内存的大小
2 groupheap_ratio 参数,用于指定允许共享堆占用应用程序组共享内存的百分比
3 app_ctl_heap_sz 参数,用于指定应用程序组中每个应用程序的控制堆大小。
在性能方面,对应用程序内存进行分组的好处是提高了高速缓存和内存使用的效率。
此外,应用程序全局内存的某些元素还可以动态地调整大小。
•当创建代理程序时: 图中未显示此事件。当出现连接请求或并行环境中出现新的 SQL 请求时,系统会指定一个代理程序并为其分配代理程序专用内存,其中包含仅用于该代理程序的内存分配,例如排序堆和应用程序堆。
当数据库已被一个应用程序使用时,任何随后连接的应用程序只能分配到代理程序专用内存和应用程序全局共享内存。
此外,图中还列示了下列配置参数设置,它们用于限制为每个特定用途分配的内存大小。请注意,在分区数据库环境中,将在每个数据库分区中分配此类内存。
•numdb
此参数指定不同应用程序可以使用的并发活动数据库的最大数目。由于每个数据库都有其自身的全局内存区,因此在增大此参数的值时,所分配的内存容量也可能会增加。
•maxappls 此参数指定可以同时连接至单个数据库的应用程序的最大数目。它将影响可能为该数据库分配的代理程序专用内存容量和应用程序全局内存容量。请注意,对于每个数据库,可将此参数设置为不同的值。
•用于并行处理的 maxagents 和 max_coordagents 参数
图中没有显示这些参数。它们用于限制一个实例中的所有活动数据库上可以同时存在的数据库管理器代理程序的数目。与 maxappls 一起,这些参数可以限制为代理程序专用内存和应用程序全局内存分配的内存容量。