You are on page 1of 69

OPTIMIZACION Y ALTO

RENDIMIENTO
Curso Manejo e Implementación de Archivos
Cat. Ing. Alvaro Díaz A. (Secc. A+)
Cat. Ing. Oscar Paz (Secc. A-)
Universidad de San Carlos de Guatemala
Segundo Semestre 2011
CONTENIDO
INTRODUCCION
Porque se afina un Sistema ?
Quien afina ?
Cuando se afina ?
CAUSAS DE PROBLEMAS DE CAUSAS DE PROBLEMAS DE
PERFORMANCE
Problemas con el diseño y desarrollo
Problemas con Recursos
Problemas con I/O de disco
Problemas con CPU
Problemas de la red
CONTENIDO
DISEÑANDO PARA UN MEJOR PERFORMANCE
Afinando el modelo de datos
Afinando Índices
Desnormalizando una Base de Datos Desnormalizando una Base de Datos
Constraints
Triggers
Performance de Querys
Parallel Query
CONTENIDO
AFINANDO SQL
Estándares de SQL
Utilizar bind-variables
Utilizar alias Utilizar alias
El Optimizador de SQL
Afinamiento de SQL
Sentido común en SQL
HERRAMIENTAS DE DIAGNÓSTICO
CONTENIDO
METODOLOGIA DE AFINAMIENTO
Inspección Inicial
Identificar posibles problemas
Recolectar información mediante mediciones
Elaborar diagramas
Resumen Resumen
Análisis
Identificación de causas y efectos
Priorizar tareas
Conclusiones y Recomendaciones
Elaborar Cronogramas
Acciones Correctivas
Presentación de Resultados
INTRODUCCION
Porqué se afina un Sistema ?
Beneficios económicos para la Empresa
• Evita incurrir en costos adicionales de equipo.
• Con un adecuado afinamiento se obtiene un mejor performance.
• Al disminuir el equipo utilizado se disminuyen también los costos de
mantenimiento tanto de software como hardware.
Beneficios Humanos
Incrementa la productividad, a la vez que satisface a los clientes de la
organización
Quién afina ? Quién afina ?
El diseñador debe comunicar el diseño del sistema para que cualquier
persona pueda entender el flujo de datos en una aplicación.
Los desarrolladores de aplicación deben comunicar las estrategias de
implementación que escogen y aquellos módulos y sentencias SQL pueden
ser rápida y fácilmente identificadas durante la tarea de afinamiento.
El administrador de la base de datos debe monitorear y documentar las
actividades del sistema cuidadosamente y aquellos rendimientos inusuales
del sistema que pueden ser identificados y corregidos.
Los administradores de hardware y software deben documentar y
comunicar las configuraciones del hardware y software del sistema para
que cualquiera pueda diseñar y administrar sistemas efectivamente.
INTRODUCCION
Cuando se afina ?
El tiempo mas efectivo que se tiene para afinar es durante la fase
de diseño, obteniendo los máximos beneficios al menor costo.
Esto podemos observarlo en las siguientes figuras:
Costo Vrs. Tiempo Beneficio Vrs. Tiempo
Producción
Desarrollo
Diseño
0
5
10
15
20
25
0 2 4 6 8
Tiempo
C
o
s
t
o
Diseño
Desarrollo
Producción
0
5
10
15
20
25
0 2 4 6 8
Tiempo
B
e
n
e
f
i
c
i
o
Causas de Problemas de
Performance
Causas de Problemas de
Performance
Problemas con el diseño y desarrollo
Diseño: Los problemas en el diseño son causados por diseñadores que no
consideran los puntos siguientes:
Performance considerado cuando se selecciona una arquitectura
Performance considerado cuando se crea el modelo de datos
Programas diseñados adecuados para una base de datos relacional
Programas diseñados adecuados para la configuración de hardware usada.
Programas: Los principales problemas son :
Inapropiado uso de índices
Uso incorrecto del optimizador
Uso incorrecto de la opción procedural
Causas de Problemas de
Performance
Problemas con el diseño y desarrollo
Base de Datos: Estos problemas son principalmente causados por DBA’S
que no consideran los siguientes puntos: que no consideran los siguientes puntos:
Uso efectivo de los recursos de la máquina.
Uso efectivo de la memoria.
Configurar los parámetros de INIT.ORA para evitar contención de redo logs y
otros objetos.
Sistemas : Algunos problemas ocurren como resultado de:
Otros sistemas que afecten al DBMS.
Un sistema operativo no afinado.
La configuración o tamaño de la máquina que es inadecuada para soportar el
DBMS.
Causas de Problemas de
Performance
Problemas con Recursos del Sistema
Para obtener un mejor performance usted debe conocer cuatro componentes
del ambiente de máquina que interactúan y afectan el performance del
sistema, éstos componentes son :
Memoria
Entrada/Salida en discos y controladores
CPU
Redes
Problemas con I/O de disco
La carga del disco debe ser distribuida eficientemente. Por ejemplo,
cuando las tablas, índices y rollback son creados son asignados a una
localidad inicial. Si esta localidad es excedida, Oracle debe asignar
extensiones adicionales. El acceso a los datos es más eficiente si las
extensiones son contiguas e independientes según el tipo de segmento.
Causas de Problemas de
Performance
extensiones son contiguas e independientes según el tipo de segmento.
Problemas con CPU
Los problemas de la CPU frecuentemente ocurren cuando muchos
procesos están tratando de usar la CPU al mismo tiempo.
Problemas con la Red
Los cuellos de botella en la red ocurren cuando la cantidad de datos que
necesitan ser transferidos a través de la red exceden la capacidad
de la misma.
Diseñando para un mejor
Performance
Diseñando para un mejor
performance
Afinando el Modelo de Datos
Desnormalizando una Base de Datos
Hace la codificación mas compleja Hace la codificación mas compleja
Sacrifica flexibilidad
Mejora el tiempo para obtener datos (select) pero
desmejora el tiempo de la actualización de datos
(update, delete, insert o también llamados operaciones
ABC-altas, bajas y cambios-)
Diseñando para un mejor
performance
Afinando Índices : Hay una serie de preguntas
que deben ser respondidas antes de asignar índices:
Debo indexar la llave primaria de una tabla ?
Debo indexar la llave foránea de una tabla ? Debo indexar la llave foránea de una tabla ?
Necesito otros índices ?
Como puedo reforzar el uso de índices ?
Diseñando para un mejor
performance
Afinando Índices :
Debo indexar la llave primaria de una tabla ?
Es única la llave primara ?
Los índices refuerzan la unicidad.
Si es así defina un índice (usualmente)
Pero si el volumen esperado de la tabla es menor de 250
registros y las columnas no son usadas dentro de los
estatutos de un join de SQL, no defina índice.
Diseñando para un mejor
performance
Afinando Índices :
Debo indexar la llave foránea de una tabla ?
Es la llave foránea usada para chequear la integridad Es la llave foránea usada para chequear la integridad
referencial ?
Es la llave foránea usualmente parte de una clausula Where ?
Si es así defina un índice, si no, no lo defina.
Diseñando para un mejor
performance
Afinando Índices :
Necesito otros índices ?
Si la tabla tiene miles de entradas, índices extra podrían Si la tabla tiene miles de entradas, índices extra podrían
ayudarlo a evitar largas búsquedas en la tabla
Tome en cuenta que el exceso en el uso de índices puede
bajar el performance en las sentencias Insert, Delete y Update.
Diseñando para un mejor
performance
Afinando Índices :
Como puedo reforzar el uso de índices ?
Coordinando el uso y definición de índices con el DBA, el Coordinando el uso y definición de índices con el DBA, el
programador y el equipo de Control de Calidad.
Diseñando para un mejor
performance
Constraints:
La integridad de los datos toma fuerza a través del
uso de constraints, sin embargo estos tienen un
costo en performance. Oracle Corporation dice
que éste costo es similar a la ejecución de una que éste costo es similar a la ejecución de una
sentencia SQL en la que el constraint de
integridad se traduciría.
Existen algunas otras implicaciones de performance
que usted debe de ser consciente de usar en un
diseño eficaz de constraints.
Diseñando para un mejor
performance
Constraints:
Primary Key Constraints: una llave primaria refuerza la
unicidad, es raro que una tabla no requiera un constraint de
llave primaria. Al agregar dicho constraint a una tabla se
crea un índice, asegúrese de proveer los detalles del
tamaño al índice en las especificaciones del diseño. tamaño al índice en las especificaciones del diseño.
Unique Key Constraints: en éste tipo de constraints
también se chequea la unicidad, pero permite que las
columnas de la llave sean nulas, también se crea un índice.
Foreign Key Constraints: chequea que la tabla
dependiente (hija) tenga una tupla en la tabla referenciada
(padre).
Check Constraints: son utilizados en una columna de la
tabla para especificar una condición que debe ser cierta.
Un caso típico es el caso en el cual una columna FLAG
tiene sólo dos valores valido: ON u OFF.
Diseñando para un mejor
performance
Triggers:
Esta es otra buena opción para el diseño de de
aplicaciones, estos son usados a menudo para
registros de auditoría. Los triggers a nivel de tupla
han sido conocidos como la causa de severas han sido conocidos como la causa de severas
degradaciones de performance cuando son utilizados
inapropiadamente, es importante que mantenga el
código de sus triggers simples, tenga cuidado de
triggers que realizan actualizaciones en otras tablas
que también contienen triggers.
Nota: Los Constraints han sido optimizados para realizar chequeos
de integridad de datos. No use un trigger para realizar el
trabajo que puede hacer un constraint.
Diseñando para un mejor
performance
Triggers:
Tome nota de las siguientes restricciones:
No se puede especificar un trigger en las tablas
del diccionario de Datos del DBMS.
Los triggers toman efecto en filas que son Los triggers toman efecto en filas que son
modificadas en la tabla después de que el trigger
ha sido incorporado.
Un trigger no puede leer o modificar filas en una
tabla que tiene una llave foránea apuntando a la
tabla dueña del trigger.
Un trigger no puede contener sentencias
COMMIT, ROLLBACK ó SAVEPOINT.
Un trigger no puede ejecutar sentencias DDL, tal
como CREATE TABLE.
Query Performance
Parallel Query
Versiones más recientes de los más conocidos
Diseñando para un mejor
performance
Versiones más recientes de los más conocidos
DBMS, introducen la opción de Parallel Query,
lo cual puede acelerar:
La creación de índices.
La carga de datos en la base de datos.
La consulta de datos
Afinando SQL
Afinando SQL
Pasos estándar para la resolución de SQL
Chequeo de sintaxis (estructura del SQL, paréntesis, Etc..)
Buscar en el shared area
Buscar en el diccionario de datos (Seguridad, Privilegios, Etc..)
Calcular el path de búsqueda (Rule-based o Cost-based)
Salva el plan de ejecución
Ejemplo: Las siguientes sentencias SQL no son iguales y no se compartirán en el
SGA
SELECT NAME FROM S_CUSTOMER WHERE ID = 212;
SELECT NAME FROM S_CUSTOMER WHERE ID = 213;
SELECT NAME FROM S_CUSTOMER WHERE ID = :b1;
SELECT NAME FROM s_customer WHERE id = 212;
SELECT NAME FROM S_CUSTOMER WHERE id =212;
SELECT NAME
FROM S_CUSTOMER
WHERE id =212;
Afinando SQL
Consejos para afinar el SQL:
Cuando varios programadores están desarrollando una aplicación
cada uno tiene su propio estilo, preferencias y tendencias, aun
cuando cada uno esta produciendo un código eficaz, su futuro
mantenimiento puede darle un verdadero dolor de cabeza.
A menudo cuando no se aplican normas en la codificación significa A menudo cuando no se aplican normas en la codificación significa
que solo la persona que escribió el código lo puede entender.
Antes de iniciar a codificar una aplicación es importante definir
un estándar de programación.
Afinando SQL
Consejos para afinar el SQL:
Usar Alias :
El uso de alias en las tablas y la inclusión de los prefijos en todos
los nombres de columnas cuando más de una tabla es
consultada reducirá el tiempo de análisis de sintaxis y previene
errores.
Considerando el siguiente ejemplo:
SELECT E.emp_no, name, tax_no, c.comp_code, comp_name
FROM company C,
Emp E
WHERE E.comp_code = C.Comp_Code
Es mejor utilizar los Alias como se muestra a continuación:
SELECT E.emp_no, E.name, E.tax_no, C.Comp_Code, C.Comp_name
FROM Company C,
Emp E
WHERE E.comp_code = C.comp_code
Afinando SQL
Consejos para afinar el SQL:
Utilizar bind variables :
Se aprovecha mejor el shared area si se utilizan bind variables.
Ya que no es lo mismo:
(Non-Sharable SQL) (Non-Sharable SQL)
SELECT * FROM emp WHERE emp_no = 123;
SELECT * FROM emp WHERE emp_no = 987;
(Sharable SQL)
SELECT * FROM emp WHERE emp_no = :B1; (Bind value:123)
SELECT * FROM emp WHERE emp_no = :B1; (Binde value:987);
El Optimizador de SQL
El optimizador de Oracle es un recurso del sistema que está
escondido pero es extremadamente importante. Una parte del
kernel de Oracle, el optimizador examina cada sentencia SQL que
se encuentra en su aplicación y escoje el plan de ejecución
optimo, o recupera el path, para la sentencia. El plan de ejecución
es la secuencia física de pasos que el RDBMS debe tomar para
realizar una operación que usted ha especificado.
Para deducir el path de búsqueda optimo, el optimizador considera
varias áreas como por ejemplo: varias áreas como por ejemplo:
Las tablas de la base de datos que su sentencia necesitará
accesar
Alguna condición que deben satisfacer los datos (la cláusula
WHERE)
La localización física de la tabla (SQL distribuido)
Optimizadores que existen:
Optimizador basado en reglas
Optimizador basado en costos
Optimizador basado en reglas
El optimizador basado en reglas utiliza un conjunto de reglas de precedencia
el cual es manejado por 20 reglas de oro las cuales instruyen al optimizador
en como determinar el path de ejecución.
Rango Condicion
1 ROWID = Constant
2 Cluster join with unique or primary key = Constant
3 Hash cluster key with unique or primary key = Constant
4 Entire unique concatenated index = Constant
5 Unique indexed column = Constant
6 Entire cluster key =Corresponding cluster key of other 6 Entire cluster key =Corresponding cluster key of other
table in the same cluster
7 Hash cluster key = Constant
8 Entire cluster key = Constant
9 Entire non-UNIQUE concatenated index = Constant
10 Non-UNIQUE index merge
11 Entire concatenated index =lower bound
12 Most leading columns of concatenated index = Constant
13 indexed column BETWEEN low value an high value or indexed column LIKE
"ABC%" (Bounded range)
14 Non-UNIQUE indexed column between low value and high value or indexed
column like 'ABC%' (Bounded range)
15 UNIQUE indexed column o constant (Unbounded range)
16 Non-UNIQUE indexed column or constant (unbounded range)
17 Equality on nonindexed =column or constant (sort/merge join)
18 MAX or MIN of single indexed columns
19 ORDER BY entire index
20 Full table scans
Optimizador basado en reglas
TABLA PIVOTE
Join de dos tablas:
Tabla TAB1 de 16,384 registros
Tabla TAB2 de 1 registro
TABLA TAB2 como PIVOTE
SELECT count(*) FROM TAB1, TAB2; 0.96 Segundos
TABLA TAB1 como PIVOTE
SELECT count(*) FROM TAB2, TAB1; 26.09 Segundos
Optimizador basado en reglas
TABLA INTERSECCIÓN
Join de tres tablas:
SELECT ...........
FROM location L,
category C,
emp E
WHERE E.emp_no BETWEEN 1000 AND 2000
AND E.cat_no = C.cat_no
AND E.locn = L.locn
Es mas eficiente de la siguiente manera :
SELECT ..........
FROM emp E,
location L,
catecory C
WHERE E.cat_no = C.cat_no
AND E.locn = L.locn
AND E.emp_no BETWEEN 1000 AND 2000
Optimizador basado en reglas
Competencia de índices
Preferencia por índices únicos
Por la precedencia en las reglas, el optimizador basado en la regla
siempre va a preferir utilizar la llave única.
Suprimiendo el uso de índices
Para que una sentencia SQL utilice el índice, las columnas que
pertenecen al índice deben estar solos (sin funciones u
operaciones que lo anulen) en un lado de la comparación en la
cláusula WHERE.
Operaciones que anulan un índice:
!=, <>
NOT IN
NOT EXISTS
Optimizador basado en Costos
Cuando utilizamos el optimizador basado en costos, podemos tunear
manualmente las sentencias SQL, pasando sobre las decisiones
del optimizador actual. Incluyendo sus propios hints dentro de la
sentencia SQL fuerza a esta sentencia a seguir el path de acceso
que usted desea en lugar del calculado por el optimizador actual.
SELECT /*+ hint */ .....
UPDATE /*+ hint */ .....
DELETE /*+ hint */ .....
Algunos Hints imporantes :
ALL_ROWS : Optimiza para el mejor rendimiento de acceso a los registros
FIRST_ROWS : Siempre escogerá usar un índice sobre un full scan
CHOOSE : Fuerza el uso del optimizador basado en costos.
RULE : Fuerza el uso del optimizador basado en la regla.
FULL : Fuerza al uso de un fulll scan en la tablas.
ROWID : Fuerza a una búsqueda por ROWID en la tabla especificada
Optimizador basado en Costos
Hints (Continuación)
FULL USE_CONCAT
HASH ORDERED
INDEX USE_NL
INDEX_ASC USE_MERGE
INDEX_DESC CACHE
AND_EQUAL NO_CACHE
PARALEL NOPARALEL
Optimizador basado en Costos
Cuando los Hints son ignorados ?
Hints mal escritos
Inconsistencia
Con tablas
Con índices
Identificación valida de la tabla
Localización invalida del hint
Versiones viejas de PL/SQL (2.0)
Afinando SQL
Consejos para afinar el SQL:
Uso eficiente de la cláusula WHERE:
SELECT ........
FROM emp E
WHERE emp_salary > 50000
AND emp_type = ‘MANAGER’
AND 25 < ( SELECT COUNT(*) AND 25 < ( SELECT COUNT(*)
FROM emp
WHERE emp_mgr = E.emp_no)
Es mejor
SELECT ........
FROM emp E
WHERE 25 < ( SELECT COUNT(*)
FROM emp
WHERE emp_mgr = E.emp_no)
AND emp_salary > 50000
AND emp_type = ‘MANAGER’
Afinando SQL
Consejos para afinar el SQL:
Uso eficiente de la cláusula WHERE:
USANDO AND’S SIN COMPETENCIA DE INDICES
SELECT ........
FROM emp E
WHERE 25 < ( SELECT COUNT(*)
FROM emp
WHERE emp_mgr = E.emp_no) WHERE emp_mgr = E.emp_no)
OR (emp_salary > 50000 AND emp_type = ‘MANAGER’)
Es mejor
SELECT ........
FROM emp E
WHERE (emp_salary > 50000
AND emp_type = ‘MANAGER’)
OR 25 < ( SELECT COUNT(*)
FROM emp
WHERE emp_mgr = E.emp_no)
USANDO OR’S SIN COMPETENCIA DE INDICES
SELECT ....
FROM emp E
WHERE 25 < ( SELECT COUNT(*)
FROM emp
WHERE emp_mgr = E.emp_no)
OR (emp_salary > 50000 AND emp_type = ‘MANAGER’)
Afinando SQL
OR (emp_salary > 50000 AND emp_type = ‘MANAGER’)
Es mejor
SELECT ....
FROM emp E
WHERE (emp_salary > 50000
AND emp_type = ‘MANAGER’)
OR 25 < ( SELECT COUNT(*)
FROM emp
WHERE emp_mgr = E.emp_no)
Afinando SQL
Uso de ROWID
SELECT ROWID
INTO :emp_rowid
FROM emp
WHERE emp.emp_no = 5643
FOR UPDATE;
.
.
.
UPDATE emp
SET emp.name = ........
WHERE ROWID = :emp_rowid;
Afinando SQL
Reduciendo el número de viajes a la Base de Datos
METODO 1
SELECT emp_name,salary,grade
FROM emp
WHERE empno = 123;
SELECT emp_name,salary,grade
FROM emp
WHERE empno = 567;
METODO 2
DECLARE CURSOR C1 (E_no NUMBER) IS
SELECT emp_name,salary,grade
FROM emp
WHERE empno = E_no;
BEGIN
OPEN C1(123);
FETCH C1 INTO .........;
CLOSE C1; CLOSE C1;
OPEN C1(567);
FETCH C1 INTO .........;
CLOSE C1;
END;
METODO 3
SELECT A.emp_name,A.salary,A.grade,
B.emp_name,B.salary,B.grade
FROM emp A, emp B
WHERE A.emp_no = 123
AND B.emp_no = 567;
Afinando SQL
Uso de valores null
Deshabilitar índices
SELECT account_name, trans_date, ammount
FROM transaction
WHERE substr(account_name,1,7) = ‘CAPITAL’;
SELECT account_name, trans_date, ammount
FROM transaction
WHERE account_name LIKE ‘CAPITAL%’;
SELECT account_name, trans_date, ammount
FROM transaction
WHERE amount != 0;
SELECT account_name, trans_date, ammount
FROM transaction
WHERE amount > 0;
SELECT account_name, trans_date, ammount
FROM transaction
WHERE TRUNC(trans_date) = TRUNC(SYSDATE)
SELECT account_name, trans_date, ammount
FROM transaction
WHERE trans_date BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE)+0.99999;
SELECT account_name, trans_date, ammount
FROM transaction
WHERE account_name || account_type = ‘AMEXA’
SELECT account_name, trans_date, ammount
FROM transaction
WHERE account_name = ‘AMEX’
AND account_type = ‘A’
SELECT account_name, trans_date, ammount
FROM transaction
WHERE amount + 3000 < 5000
SELECT account_name, trans_date, ammount
FROM transaction
WHERE amount < 2000
SELECT account_name, trans_date, ammount
FROM transaction
WHERE account_name = NVL(:acc_name,account_name);
SELECT account_name, trans_date, ammount
FROM transaction
WHERE account_name LIKE NVL(:acc_name,’%’);
Afinando SQL
Full scan via Parallel Query
CREATE TABLE XXXXX PARALLEL (DEGREE N);
SELECT /*+ FULL(H) PARALLEL(H,8) */
H.emp_no, lookup_emp(H.emp_no),
H.hist_type, lookup_hist_type(H.hist_type), H.hist_type, lookup_hist_type(H.hist_type),
COUNT(*)
FROM emp_history H
GROUP BY H.emp_no, H.Hist_Type;
Afinando SQL
Joins en lugar de EXISTS
EXISTS en lugar de JOINS
EXISTS en lugar de DISTINCT
NO EXISTS en lugar de NOT IN NO EXISTS en lugar de NOT IN
IN o UNION en lugar de OR
Herramientas de Diagnóstico
Herramientas de Diagnóstico
ANALIZE
EXPLAIN PLAN
SQL_TRACE SQL_TRACE
TKPROF
Herramientas de Diagnóstico
ANALIZE
Los objetos de la base de datos necesitan ser
analizados para tener estadísticas disponibles
para el optimizador basado en costos.
La sintaxis de la sentencia para analizar es la
siguiente:
ANALYZE
TABLE XXX COMPUTE STATISTICS
INDEX ESTIMATE STATISTICS
Herramientas de Diagnóstico
EXPLAIN PLAN
El comando EXPLAIN PLAN despliega el plan de
ejecución escogido por el optimizador de
ORACLE para las cláusulas SELECT, UPDATE,
INSERT Y DELETE. El plan de ejecución es la
sentencia de operaciones que ORACLE realiza sentencia de operaciones que ORACLE realiza
para ejecutar las sentencias. Examinando el plan
de ejecución usted puede ver como ORACLE
ejecuta sus sentencias SQL.
Antes de ejecutar el EXPLAIN PLAN, debe existir
una tabla de salida llamada PLAN_TABLE.
Usted debe correr el archivo ULTXPLAN.SQL
para crear esta tabla.
Herramientas de Diagnóstico
Operaciones y Opciones producidas por el EXPLAIN PLAN
OPERACION OPCION DESCRIPCION
AND EQUAL
Una operación que acepta multiples sets de ROWID y regresa
la intersección de los sets, eliminando duplicados.
CONNECT BY
Un retorno de filas en un orden jerárquico para una consulta
que contenga una cláusula CONNECT BY
CONCATENATION
Una operación que acepta múltiples sets de filas y regresa la
CONCATENATION
Una operación que acepta múltiples sets de filas y regresa la
unión, todos los sets.
COUNT
Una operación que cuenta el Número de filas seleccionadas de
la tabla.
STOPKEY
Una operación que cuenta donde el número de filas retornadas
es limitado por la expresión ROWNUM en la cláusula
WHERE.
FILTER
Una operación que acepta un set de filas, elimina algunas de
ellas, y regresa el resto.
FIRST ROW
Un retorno de sólo la primera fila seleccionada por el query.
Herramientas de Diagnóstico
Operaciones y Opciones producidas por el EXPLAIN PLAN
OPERACION OPCION DESCRIPCION
FOR UPDATE
Una operación que devuelve y busca las filas seleccionadas
por el query que contiene una cláusula FOR UPDATE
INDEX UNIQUE SCAN
Un retorno de un simple ROWID de un índice
RANGE SCAN
Un retorno de una o más ROWIDs de un índice. Valores
indexados son buscados en orden ascendente
RANGE SCAN
Un retorno de una o más ROWIDs de un índice. Valores
RANGE SCAN
DESCENDING
Un retorno de una o más ROWIDs de un índice. Valores
indexados son buscados en orden descendente
INTERSECTION
Una operación que acepta dos sets de filas y regresa la
intersección de los sets, eliminando duplicados
MERGE JOIN+
Una operación que acepta dos sets de filas, cada una ordenada
por el valor específico, combina cada fila de un set con la fila
correspondiente del otro, y regresa el resultado.
OUTER
Una operación de merge join para ejecutar una sentencia outer
join.
CONNECT BY
Un retorno de fila en un orden jerárquico por un query que
contenga una cláusula CONNECT BY.
MINUS Una operación que acepta dos sets de filas y retorna filas
que aparecen en el primer set pero no en el segundo,
eliminando duplicados
Herramientas de Diagnóstico
Operaciones y Opciones producidas por el EXPLAIN PLAN
OPERACION OPCION DESCRIPCION
NESTED LOOPS+
Una operación que acepta dos sets de filas, un set de salida y
un set de entrada. Oracle compara cada fila del set de salida
con cada fila del set de entrada y regresa aquellas filas que
satisfacen una condición.
NESTED LOOPS+ OUTER
Un operación LOOP para ejecutar una sentencia outer join
PROJECTION
Una operación interna
PROJECTION
Una operación interna
REMOTE
Un retorno de datos de una base de datos remota
SEQUENCE
Una operación que involucra acceso a valores de una
secuencia
SORT AGGREGATE
Un retorno de una simple fila que es el resultado de aplicar
una función de grupo a un grupo de filas seleccionadas
UNIQUE
Una operación que ordena un set de filas para eliminar
duplicados
GROUP BY
Una operación que ordena un set de filas en grupos para una
consulta con una cláusula GROUP BY
JOIN
Una operación que ordena un set de filas antes de una
operación merge join
ORDER BY
Una operación que ordena un set de filas para un query con
una cláusula OREDER BY
Herramientas de Diagnóstico
Operaciones y Opciones producidas por el EXPLAIN PLAN
OPERACION OPCION DESCRIPCION
TABLE ACCESS* FULL
Un retorno de todas las filas de una tabla
CLUSTER
Un retorno de filas de una tabla basada en un valor de la clave
del cluster indexado
HASH
Un retorno de filas de uana tabla basada en un valor de la
clave del hash cluster clave del hash cluster
BY ROWID
Un retorno de una fila de una basada en sus ROWID
UNION
Una operación que acepta dos sets de filas y regresa la unión
de los sets, eliminando duplicados
VIEW
Una operación que ejecuta una consulta a una vista y entonces
retorna las filas resultantes de otra operación
Herramientas de Diagnóstico
EXPLAIN PLAN
Formato anidado para la salida del EXPLAIN PLAN:
Accept a1
SELECT LPAD(‘’,2*(LEVEL-1))||operation||’’||
options||’’||object_name||’’||DECODE(id,0,’Cost=‘||position) “Query Plan”
FROM plan_table
START WITH id=0
AND statement_id like &a1
CONNECT BY PRIOR id = parent_id AND statement_id like &a1;
Herramientas de Diagnóstico
SQL_TRACE
Utilidad que escribe un archivo de rastro conteniendo estadísticas de
performance.
Parámetros a inicializar en el init.ora con SQL_TRACE
SQL_TRACE TRUE SQL_TRACE
USER_DUMP_DEST
TIMED_STATISTICS
MAX_DUMP_FILE_SIZE
TRUE
Directorio
TRUE
number
Como habilitar el SQL_TRACE :
SQL*Plus Alter session set SQL_TRACE TRUE;
Herramientas de Diagnóstico
TKPROF
Utilidad que traslada a información legible el archivo generado por
SQL_TRACE, mostrando también el plan de ejecución de la
sentencia.
TKPROF tracefile listfile [SORT = parameters] TKPROF tracefile listfile [SORT = parameters]
[EXPLAIN = usr/pass]
tracefile = Nombre del archivo que contiene las estadísticas generadas
Listfile = Nombre del archivo de salida del TKPROF
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
La Metodología de afinamiento de un sistema se basará en los
siguientes cuatro pasos:
1. Identificación de problemas
2. Análisis
3. Acciones Correctivas
4. Presentación de Resultados
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Identificación de problemas
Es necesario identificar los problemas y cuantificarlos para tener
una referencia inicial sobre el estado actual del sistema, una referencia inicial sobre el estado actual del sistema,
para esto se usan los denominados diagramas de Pareto en
los cuales se ve de manera gráfica cuales son los
problemas que son mas frecuentes o puntos críticos en el
sistema y que pueden ser la causa del bajo desempeño,
como resultado se deberá saber cual es el estado actual del
sistema.
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Identificación de problemas
Para esta tarea se deberán seguir los siguientes pasos :
1. Identificar posibles problemas
Fragmentación
Mala utilización del espacio ocupado
Uso inadecuado de memoria
Aplicaciones (SQL) críticas
Accesos sin índices
Uso inadecuado de la integridad referencial (locks o full-Scans)
2. Recolectar información mediante mediciones
3. Elaborar diagrama de Pareto
4. Resumen.
METODOLOGIA DE
AFINAMIENTO DE SISTEMAS
Análisis
El resultado de un proceso puede atribuirse a una multitud de factores,
y es posible encontrar la relación causa-efecto de esos factores.
Podemos determinar la estructura de una relación múltiple de causa-
efecto observándola sistemáticamente. Es difícil solucionar problemas
complicados sin tener en cuenta esta estructura, la cual consta de una
efecto observándola sistemáticamente. Es difícil solucionar problemas
complicados sin tener en cuenta esta estructura, la cual consta de una
cadena de causas y efectos, y el método para expresar esto en forma
sencilla y fácil es un diagrama de causa-efecto. El resultado final del
análisis será un documento de conclusiones del sistema y un
cronograma de actividades que se deberán seguir para afinar el
sistema. Se deberán seguir los siguientes pasos:
- Identificación de causas y efectos
- Priorizar tareas
- Conclusiones y Recomendaciones
- Elaborar Cronograma
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Análisis: Identificación de causas y efectos
Se buscan todas las causas posibles que puedan afectar a las
características de rendimiento del sistema. Como base se características de rendimiento del sistema. Como base se
han identificado de manera general un grupo de causas que
hacen reflejar un bajo rendimiento en un sistema, sin
embargo se podrá conocer con mayor detalle otra lista de
causas al analizar el sistema con mayor profundidad.

Uso inadecuado de memoria
Bajo
rendimiento en
un sistema
Acceso a disco (I/O)
Indices Tablas
Datafiles
Fragmentación
Diccionario de
datos
Tamaño de
bloques de datos
Distribución de
datos
Pagineo
Array size
Tamaño
del SGA
Tamaño de bloques de
memoria
Diagrama
Causa-efecto
un sistema
Normalización/
Denomarlización
Mal uso de
clusters
Ciclos que causen
redundacia
Diseño
Indices
Consideraciones
de acceso
concurrente
Bloqueos por chequeo
de Integridad
Referencial sin indices
Programación
Por integridad
referencial
Bloqueos
Compartido
No uso de indices
Bind variables
Acceso
redundantes
Tabla pivote
Mal uso del
optimizador
Hints Alias
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Análisis: Priorizar tareas
Una vez completa la información sobre las causas y efectos
el paso siguiente es asignar la importancia de cada factor. el paso siguiente es asignar la importancia de cada factor.
Todos los factores no se relacionan necesariamente en
forma estrecha con la característica, de manera que se
marcarán esos factores que parecen tener un efecto
particularmente significativo sobre la característica y se les
asignará la prioridad correspondiente.
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Análisis: Conclusiones y Recomendaciones
Se elaborará un documento donde se resumen los factores Se elaborará un documento donde se resumen los factores
críticos del sistema recomendándose las técnicas posibles a
usarse que incrementen el rendimiento del sistema y el
tiempo y recursos que tomará cada mejora.
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Análisis: Elaborar Cronograma
Se detallarán todas las actividades en orden de mas alta prioridad Se detallarán todas las actividades en orden de mas alta prioridad
a la más baja, especificando la fecha de inicio y finalización
de cada una.
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Acciones correctivas
Se ejecutarán todas las actividades detalladas en el cronograma,
acompañadas de su respectiva documentación donde se acompañadas de su respectiva documentación donde se
explicarán las técnicas utilizadas para su corrección.
Además se recabará toda la información del desempeño de
cada factor identificado con anterioridad (Punto 1) como
problema
METODOLOGIA DE AFINAMIENTO
DE SISTEMAS
Presentación de Resultados
Basándose en los datos y el diagrama inicial se elaborará un
nuevo diagrama de Pareto para su comparación donde se nuevo diagrama de Pareto para su comparación donde se
observarán el impacto de las mejoras implementadas.
REFERENCIAS
Oracle Performance Tuning, Segunda
Edición
Gurry&Corrigan, Editorial O’Reilly
Oracle Performance Tuning Oracle Performance Tuning
Tips&Techniques
Richard J. Niemiec Editoral Osborne McGraw Hill
Presentación compartida por Blanco
– Silva Consultores.