Skip to content

Transacciones, indices y planes

Oracle es transaccional y usa undo para ofrecer consistencia de lectura. Leer planes de ejecucion es esencial para diagnosticar rendimiento.

Transacciones

sql
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;

COMMIT;

Cancelar:

sql
ROLLBACK;

Bloqueo de filas

sql
SELECT *
FROM tareas
WHERE estado = 'PENDIENTE'
FOR UPDATE SKIP LOCKED;

SKIP LOCKED es util para workers concurrentes.

Indices

sql
CREATE INDEX idx_pedidos_cliente_fecha
ON pedidos(cliente_id, fecha);

Indice unico:

sql
CREATE UNIQUE INDEX idx_clientes_email
ON clientes(email);

Explain plan

sql
EXPLAIN PLAN FOR
SELECT *
FROM pedidos
WHERE cliente_id = 10;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

Estadisticas

El optimizador necesita estadisticas actualizadas:

sql
BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname => USER,
    tabname => 'PEDIDOS'
  );
END;
/

Buenas practicas

  • Manten transacciones cortas.
  • Crea indices para consultas reales.
  • Revisa planes con datos representativos.
  • Actualiza estadisticas cuando proceda.
  • Usa bind variables desde aplicaciones.

Errores comunes

  • No hacer COMMIT o ROLLBACK.
  • Crear indices duplicados.
  • Ignorar full table scans en tablas grandes.
  • Usar literales en vez de bind variables.
  • No revisar waits y bloqueos.