jueves, 13 de agosto de 2015

Casos en que los Indices de Tabla son Ignorados por el Motor de BD

Al aplicar funciones en columnas indexadas en la clausula WHERE (TRUNC, TRIM.. ETC).
Estadísticas Obsoletas o inexistentes: El motor de base construye el plan de ejecución basándose por completo en las estadísticas de los objetos almacenadas en el diccionario de datos. Las estadísticas deben realizarse de manera periódica de manera que Oracle sepa con claridad cuales son los costos  asociados a cada uno de los métodos de acceso a los registros para así poder escoger la mejor opción de acceso a los datos.
Consultas que retornan muchos registros: En los casos en que las consultas retornen mas del 5% del total de filas de la tabla. Cuando ocurre esto es menos costoso para Oracle realizar un FULL SCAN de la tabla y almacenarla en memoria, que  acceder a cada uno de los registros mediante el uso del índice.
Usar el operador NULL en columnas indexadas.
Concatenar columnas indexadas. Ej.: where  nombre || apellido = ‘JUAN PEREZ’
Uso de OR en sentencias SQL.
Uso de funciones matemáticas sobre columnas indexadas.

miércoles, 12 de agosto de 2015

Monitorear operaciones de Larga Duracion

La vista V$SESSION_LONGOPS nos indica en detalle cuales son las operaciones que estan siendo realizadas en el motor oracle. Aqui podemos obtener informacion acerca de el usuario, la terminal y la operacion que esta realizando en la base de datos. Con esta informacion podemos identificar aquellas operaciones que estan causando problemas de Performance o consumo de memoria excesivos, pudiendo aplicar filtros por usuario (como indica el codigo sql adjunto).

SELECT
V.USERNAME AS 'USUARIO',
AD.MACHINE,
AD.TERMINAL,
V.OPNAME  AS 'OPERACION',
V.TARGET  AS 'OBJETO',
V.START_TIME AS  'HORA_INICIO',
V.LAST_UPDATE_TIME  AS 'ULTIMO_UPDATE',
V.ELAPSED_SECONDS  AS 'TIEMPO_TRANSCURRIDO',
V.MESSAGE
FROM
V$SESSION_LONGOPS  V, ALL_USERS AD

WHERE 1=1
AND V.USERNAME ='USERNAME'
AND V.USERNAME=AD.USERNAME