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)