Asignación de memoria

La asignación y desasignación de memoria se produce en varios momentos. La memoria puede asignarse a un área de memoria determinada cuando se produce un suceso específico (por ejemplo, cuando una aplicación se conecta), o puede reasignarse en respuesta a un cambio de configuración.

La Figura 1 muestra las diferentes áreas de memoria que el gestor de bases de datos asigna para diversos usos y los parámetros de configuración que le permiten controlar el tamaño de estas áreas de memoria. Tenga en cuenta que en un entorno de base de datos particionada, cada partición de base de datos tiene su propio conjunto de memoria compartida del gestor de bases de datos.

Figura 1. Tipos de memoria asignada por el gestor de bases de datos
La relación entre diferentes áreas de memoria que el gestor de bases de datos asigna
El gestor de bases de datos asigna memoria siempre que se produce uno de los sucesos siguientes:
Cuando se inicia el gestor de bases de datos (db2start)
Memoria compartida del gestor de bases de datos (también conocida como memoria compartida de instancia) permanece asignada hasta que se detiene el gestor de bases de datos (db2stop). Esta área contiene información que el gestor de bases de datos utiliza para gestionar la actividad en todas las conexiones de base de datos. Db2® controla automáticamente el tamaño de la memoria compartida del gestor de bases de datos.
Cuando se activa o se conecta una base de datos por primera vez
La memoria global de base de datos se utiliza en todas las aplicaciones que se conectan a la base de datos. El tamaño de la memoria global de base de datos se especifica mediante el parámetro de configuración de base de datos database_memory . De forma predeterminada, este parámetro se establece en automático, lo que permite a Db2 calcular la cantidad inicial de memoria asignada para la base de datos y configurar automáticamente el tamaño de memoria de la base de datos durante el tiempo de ejecución en función de las necesidades de la base de datos.
Las siguientes áreas de memoria se pueden ajustar dinámicamente:
  • Agrupaciones de almacenamiento intermedio (utilizando la sentencia ALTER BUFFERPOOL)
  • Almacenamiento dinámico de base de datos (incluidos los almacenamientos intermedios de registro)
  • Almacenamiento dinámico de programas de utilidad
  • Caché de paquete
  • Memoria caché de catálogo
  • Lista de bloqueos
Los parámetros de configuración sortheap, sheapthres_shry sheapthres también se pueden actualizar dinámicamente. La única restricción es que sheapthres no se puede cambiar dinámicamente de 0 a un valor mayor que cero, o viceversa.

Las operaciones de clasificación compartidas se realizan de forma predeterminada y la cantidad de memoria compartida de base de datos que pueden utilizar los consumidores de memoria de clasificación en cualquier momento se determina mediante el valor del parámetro de configuración de base de datos sheapthres_shr . Las operaciones de clasificación privadas sólo se realizan si el paralelismo intrapartición, el particionamiento de bases de datos y el concentrador de conexiones están todos inhabilitados y el parámetro de configuración del gestor de bases de datos sheapthres está establecido en un valor distinto de cero.

Cuando una aplicación se conecta a una base de datos
Cada aplicación tiene su propio almacenamiento dinámico de aplicación, que forma parte de la memoria global de aplicación. Puede limitar la cantidad de memoria que cualquier aplicación puede asignar utilizando el parámetro de configuración de base de datos applheapsz , o limitar el consumo general de memoria de aplicación utilizando el parámetro de configuración de base de datos appl_memory .
Cuando se crea un agente
La memoria privada del agente se asigna para un agente cuando dicho agente se asigna como resultado de una solicitud de conexión o una nueva solicitud SQL en un entorno de base de datos particionada. La memoria privada del agente contiene memoria que sólo utiliza este agente específico. Si se han habilitado las operaciones de clasificación privadas, el almacenamiento dinámico de clasificación privada se asigna desde la memoria privada del agente.
Los siguientes parámetros de configuración limitan la cantidad de memoria asignada para cada tipo de área de memoria. Tenga en cuenta que en un entorno de base de datos particionada, esta memoria se asigna en cada partición de base de datos.
numdb
Este parámetro de configuración del gestor de bases de datos especifica el número máximo de bases de datos activas simultáneas que pueden utilizar distintas aplicaciones. Puesto que cada base de datos tiene su propia área de memoria global, la cantidad de memoria que se puede asignar aumenta si aumenta el valor de este parámetro.
maxappls
Este parámetro de configuración de base de datos especifica el número máximo de aplicaciones que pueden conectarse simultáneamente a una base de datos específica. El valor de este parámetro afecta a la cantidad de memoria que se puede asignar para la memoria privada del agente y la memoria global de la aplicación para dicha base de datos.
max_connections
Este parámetro de configuración del gestor de bases de datos limita el número de conexiones de base de datos o conexiones de instancia que pueden acceder al servidor de datos en cualquier momento.
max_coordagents
Este parámetro de configuración del gestor de bases de datos limita el número de agentes de coordinación del gestor de bases de datos que pueden existir simultáneamente en todas las bases de datos activas de una instancia (y por partición de base de datos en un entorno de base de datos particionada). Junto con maxappls y max_connections, este parámetro limita la cantidad de memoria asignada para la memoria privada del agente y la memoria global de la aplicación.

Puede utilizar el rastreador de memoria, invocado por el comando db2mtrk, para ver la asignación actual de memoria dentro de la instancia. También puede utilizar la función de la tabla ADMIN_GET_MEM_USAGE para determinar el consumo total de memoria de toda la instancia o de una sola partición de la base de datos. Utilice las funciones de tabla MON_GET_MEMORY_SET y MON_GET_MEMORY_POOL para examinar el uso de memoria actual a nivel de instancia, base de datos o aplicación.

En los sistemas operativos UNIX y Linux®, aunque el comando ipcs puede utilizarse para listar todos los segmentos de memoria compartida, no refleja con exactitud la cantidad de recursos consumidos. Puede utilizar el comando db2mtrk como alternativa a ipcs.