Instancia y Administración de Memoria en Oracle

1. Componentes de la Instancia

1.1 Áreas de Memoria

SGA (System Global Area)

Shared Pool

Library Cache

Almacena planes de ejecución SQL/PLSQL

Soft Parse vs Hard Parse

Ejemplo: Reutilización de consultas con bind variables

Vistas: v$librarycache, v$sqlarea

Data Dictionary Cache

Metadatos de tablas, índices, usuarios

Vista: v$rowcache

Server Result Cache

SQL Result Cache (consultas repetidas)

PL/SQL Function Result Cache

Ejemplo: Funciones con cláusula RESULT_CACHE

Reserved Pool (bloques grandes contiguos)

Database Buffer Cache

Estructura

Buffer Pools

Default Pool (8K por defecto)

Keep Pool (objetos frecuentes)

ALTER TABLE employees STORAGE(BUFFER_POOL KEEP);

Recycle Pool (objetos temporales)

nk Pools (4K, 16K, 32K)

Estados

Clean (sincronizado con disk)

Dirty (modificado, no escrito)

Unused (nuevo/disponible)

Mecanismos

LRU (Least Recently Used)

Touch Count (accesos frecuentes)

Checkpoint (DBWn escribe buffers dirty)

Vistas: v$bh, v$db_cache_advice

Redo Log Buffer

Buffer circular para registros REDO

Tamaño: log_buffer (parámetro estático)

Proceso LGWR escribe en Online Redo Logs

Eventos: commit, cada 3 segundos, 1/3 lleno

Large Pool

Usos

RMAN (backups grandes)

Shared Server (UGA)

Parallel Query (buffers I/O)

Tamaño: large_pool_size

Java Pool

Almacena objetos Java (JVM)

Tamaño: java_pool_size

In-Memory Area

Column Store (formato columnar)

IMCU (In-Memory Compression Units)

SMU (Snapshot Metadata Units)

IMEU (In-Memory Expression Units)

Configuración

Parámetro: inmemory_size (mínimo 100M)

Habilitar: ALTER TABLE sales INMEMORY;

Vistas: v$inmemory_area, v$im_segments

PGA (Program Global Area)

SQL Work Areas

Sort Area (ORDER BY, GROUP BY)

Hash Area (JOINs)

Bitmap Merge Area

Private SQL Area

Bind Variables

Cursores (open_cursors)

Session Memory

Variables de sesión

Información de conexión

Vistas: v$pgastat, v$sql_workarea

1.2 Procesos

Background Processes

DBWn (Database Writer)

Escribe buffers dirty en datafiles

LGWR (Log Writer)

Escribe Redo Log Buffer en Redo Logs

SMON (System Monitor)

Recovery al inicio, limpia temporales

PMON (Process Monitor)

Limpia procesos fallidos

CKPT (Checkpoint)

Sincroniza headers de datafiles

Server Processes

Dedicados (1:1 con sesión)

Compartidos (M:N con sesiones)

2. Administración de Memoria

2.1 Modos de Administración

Automática (AMM)

memory_target (SGA + PGA)

memory_max_target (límite)

Vistas: v$memory_target_advice

Manual (ASMM)

sga_target (SGA dinámica)

sga_max_target (límite)

pga_aggregate_target (PGA)

Ejemplo: ALTER SYSTEM SET sga_target=4G;

2.2 Optimización

SGA

Ajuste dinámico (v$sga_resize_ops)

Shared Pool: flush con ALTER SYSTEM FLUSH SHARED_POOL;

PGA

Monitoreo: v$pgastat, v$sql_workarea

workarea_size_policy (AUTO/MANUAL)

In-Memory

Compresión: MEMCOMPRESS FOR QUERY LOW

Prioridad: PRIORITY CRITICAL/HIGH/LOW

3. Técnicas de Asignación

3.1 Contigua

Particiones Fijas

Tamaño predeterminado (ej: 100M por proceso)

Particiones Variables

Requiere compactación (coalescing)

Fragmentación

Interna (espacio no usado dentro de partición)

Externa (huecos entre particiones)

3.2 No Contigua

Paginación

Tamaño fijo (ej: 4K, 8K)

Tabla de páginas (MMU/TLB)

Segmentación

Lógica (código, datos, pila)

Tabla de segmentos (base/límite)

4. Estados de la Instancia

STARTUP

NOMOUNT

Solo instancia (lee parámetros)

Archivos: spfileSID.ora, initSID.ora

MOUNT

Lee archivos de control

Operaciones: recovery, renombrar datafiles

OPEN

Acceso completo a la BD

Modos: READ WRITE (default), READ ONLY

SHUTDOWN

NORMAL (espera sesiones activas)

IMMEDIATE (rollback activo)

TRANSACTIONAL (espera transacciones)

ABORT (recovery requerido)

Estados Especiales

SUSPEND (ALTER SYSTEM SUSPEND)

Detiene I/O (útil para backups)

INACTIVE (ALTER DATABASE INACTIVE)

Solo acceso para SYSDBA

5. Casos Prácticos

5.1 Simulación de Fragmentación

Crear tablaspace con particiones variables

Monitorear huecos con dba_free_space

5.2 Uso de In-Memory

Habilitar: ALTER TABLE ventas INMEMORY PRIORITY HIGH;

Verificar: SELECT * FROM v$im_segments;

5.3 Bind Variables

Ejemplo PL/SQL con EXECUTE IMMEDIATE y USING

5.4 Diagnóstico de Memoria

Scripts:

s-13-pga-stats.sql (v$pgastat)

s-05-bind-variables.sql (v$sqlstats)

Topic principal