Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCION
Porque se afina un Sistema ?
Quien afina ?
Cuando se afina ?
AFINANDO SQL
Estándares de SQL
Utilizar bind-variables
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
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 ?
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:
25 25
20 20 Diseño
Beneficio
Costo
15 15
Producción Desarrollo
10 10
Desarrollo Producción
5 Diseño 5
0 0
0 2 4 6 8 0 2 4 6 8
Tiempo Tiempo
Causas de Problemas de Performance
Causas de Problemas de Performance
Problemas con el diseño y desarrollo
Memoria
Entrada/Salida en discos y controladores
CPU
Redes
Causas de Problemas de Performance
Afinando Índices :
Debo indexar la llave primaria de una tabla ?
Afinando Índices :
Debo indexar la llave foránea de una tabla ?
Afinando Índices :
Necesito otros índices ?
Afinando Índices :
Como puedo reforzar el uso de índices ?
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
sentencia SQL en la que el constraint de
integridad se traduciría.
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
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.
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
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.
Diseñando para un mejor
performance
Query Performance
Parallel Query
FROM company C,
Emp E
FROM Company C,
Emp E
Ya que no es lo mismo:
(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.
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
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:
SELECT ........
FROM emp E
WHERE emp_salary > 50000
AND emp_type = ‘MANAGER’
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)
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
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 METODO 2
DECLARE CURSOR C1 (E_no NUMBER) IS
SELECT emp_name,salary,grade SELECT emp_name,salary,grade
FROM emp FROM emp
WHERE empno = 123; WHERE empno = E_no;
BEGIN
SELECT emp_name,salary,grade OPEN C1(123);
FROM emp FETCH C1 INTO .........;
WHERE empno = 567; 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
H.emp_no, lookup_emp(H.emp_no),
H.hist_type, lookup_hist_type(H.hist_type),
COUNT(*)
FROM emp_history H
ANALIZE
EXPLAINPLAN
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.
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 para ejecutar las
sentencias. Examinando el plan de ejecución
usted puede ver como ORACLE ejecuta sus
sentencias SQL.
EXPLAIN PLAN
Accept a1
SELECT LPAD(‘’,2*(LEVEL-1))||operation||’’||
FROM plan_table
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
USER_DUMP_DEST Directorio
TIMED_STATISTICS TRUE
MAX_DUMP_FILE_SIZE number
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.
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