Está en la página 1de 69

OPTIMIZACION Y ALTO RENDIMIENTO

Curso Manejo e Implementacin de Archivos


Cat. Ing. Alvaro Daz A. (Secc. A+)
Cat. Ing. Oscar Paz (Secc. A-)
Universidad de San Carlos de Guatemala
Segundo Semestre 2015

CONTENIDO

INTRODUCCION
Porque

se afina un Sistema ?

Quien

afina ?
Cuando se afina ?

CAUSAS DE PROBLEMAS DE PERFORMANCE


Problemas

con el diseo y desarrollo


Problemas con Recursos
Problemas con I/O de disco
Problemas

con CPU
Problemas de la red

CONTENIDO

DISEANDO PARA UN MEJOR PERFORMANCE

Afinando el modelo de datos

Afinando ndices

Desnormalizando una Base de Datos

Constraints

Triggers

Performance de Querys

Parallel Query

CONTENIDO

AFINANDO SQL

Estndares de SQL

Utilizar bind-variables

Utilizar alias

El Optimizador de SQL

Afinamiento de SQL

Sentido comn en SQL

HERRAMIENTAS DE DIAGNSTICO

CONTENIDO

METODOLOGIA DE AFINAMIENTO

Inspeccin Inicial

Identificar posibles problemas

Recolectar informacin mediante mediciones

Elaborar diagramas

Resumen

Anlisis

Identificacin de causas y efectos

Priorizar tareas

Conclusiones y Recomendaciones

Elaborar Cronogramas

Acciones Correctivas

Presentacin de Resultados

INTRODUCCION

Porqu se afina un Sistema ?

Beneficios econmicos 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 tambin los costos de mantenimiento


tanto de software como hardware.

Beneficios Humanos

Incrementa la productividad, a la vez que satisface a los clientes de la organizacin

Quin afina ?

El diseador debe comunicar el diseo del sistema para que cualquier persona
pueda entender el flujo de datos en una aplicacin.

Los desarrolladores de aplicacin deben comunicar las estrategias de


implementacin que escogen y aquellos mdulos y sentencias SQL pueden ser
rpida y fcilmente 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 disear y administrar sistemas efectivamente.

INTRODUCCION

Cuando se afina ?

El tiempo mas efectivo que se tiene para afinar es durante la fase


de diseo, obteniendo los mximos beneficios al menor costo.
Esto podemos observarlo en las siguientes figuras:

Beneficio Vrs. Tiempo

25

25

20

20

15

Beneficio

Costo

Costo Vrs. Tiempo

Produccin

10
5

Desarrollo

Diseo

Diseo

15

Desarrollo

10

Produccin

5
0

4
Tiempo

4
Tiempo

Causas de Problemas de Performance

Causas de Problemas de Performance

Problemas con el diseo y desarrollo

Diseo: Los problemas en el diseo son causados por diseadores que no


consideran los puntos siguientes:

Performance considerado cuando se selecciona una arquitectura

Performance considerado cuando se crea el modelo de datos

Programas diseados adecuados para una base de datos relacional

Programas diseados adecuados para la configuracin de hardware usada.

Programas: Los principales problemas son :

Inapropiado uso de ndices

Uso incorrecto del optimizador

Uso incorrecto de la opcin procedural

Causas de Problemas de Performance

Problemas con el diseo y desarrollo

Base de Datos: Estos problemas son principalmente causados por DBAS


que no consideran los siguientes puntos:

Uso efectivo de los recursos de la mquina.

Uso efectivo de la memoria.

Configurar los parmetros de INIT.ORA para evitar contencin 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 configuracin o tamao de la mquina 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 mquina que interactan y afectan el performance del
sistema, stos componentes son :

Memoria

Entrada/Salida en discos y controladores

CPU

Redes

Causas de Problemas de Performance

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 ms eficiente si las extensiones son
contiguas e independientes segn el tipo de segmento.

Problemas con CPU


Los problemas de la CPU frecuentemente ocurren cuando
muchos procesos estn 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 travs de la red
exceden la capacidad de la misma.

Diseando para un mejor Performance

Diseando para un mejor performance


Afinando

el Modelo de Datos

Desnormalizando
Hace

una Base de Datos

la codificacin mas compleja

Sacrifica
Mejora

flexibilidad

el tiempo para obtener datos (select) pero


desmejora el tiempo de la actualizacin de datos
(update, delete, insert o tambin llamados operaciones
ABC-altas, bajas y cambios-)

Diseando 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 fornea de una tabla ?

Necesito otros ndices ?

Como puedo reforzar el uso de ndices ?

Diseando 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.

Diseando para un mejor performance

Afinando ndices :

Debo indexar la llave fornea de una tabla ?

Es la llave fornea usada para chequear la integridad


referencial ?

Es la llave fornea usualmente parte de una clausula Where ?

Si es as defina un ndice, si no, no lo defina.

Diseando para un mejor performance

Afinando ndices :

Necesito otros ndices ?

Si la tabla tiene miles de entradas, ndices extra podran


ayudarlo a evitar largas bsquedas 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.

Diseando para un mejor performance

Afinando ndices :

Como puedo reforzar el uso de ndices ?

Coordinando el uso y definicin de ndices con el DBA, el


programador y el equipo de Control de Calidad.

Diseando para un mejor performance


Constraints:
La integridad de los datos toma fuerza a travs del
uso de constraints, sin embargo estos tienen un
costo en performance. Oracle Corporation dice
que ste costo es similar a la ejecucin de una
sentencia SQL en la que el constraint de
integridad se traducira.
Existen algunas otras implicaciones de performance
que usted debe de ser consciente de usar en un
diseo eficaz de constraints.

Diseando 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, asegrese de proveer los detalles del
tamao al ndice en las especificaciones del diseo.

Unique Key Constraints: en ste tipo de constraints


tambin se chequea la unicidad, pero permite que las
columnas de la llave sean nulas, tambin 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 condicin que debe ser cierta.
Un caso tpico es el caso en el cual una columna FLAG tiene
slo dos valores valido: ON u OFF.

Diseando para un mejor performance

Triggers:
Esta es otra buena opcin para el diseo de de
aplicaciones, estos son usados a menudo para
registros de auditora. 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 cdigo de sus triggers simples, tenga
cuidado de triggers que realizan actualizaciones en
otras tablas que tambin 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.

Diseando 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
modificadas en la tabla despus de que el trigger
ha sido incorporado.
Un trigger no puede leer o modificar filas en una
tabla que tiene una llave fornea apuntando a la
tabla duea del trigger.
Un trigger no puede contener sentencias COMMIT,
ROLLBACK SAVEPOINT.
Un trigger no puede ejecutar sentencias DDL, tal
como CREATE TABLE.

Diseando para un mejor


performance

Query Performance

Parallel Query

Versiones ms recientes de los ms conocidos


DBMS, introducen la opcin de Parallel Query, lo
cual puede acelerar:

La creacin de ndices.

La carga de datos en la base de datos.

La consulta de datos

Afinando SQL

Afinando SQL

Pasos estndar para la resolucin de SQL

Chequeo de sintaxis (estructura del SQL, parntesis, Etc..)

Buscar en el shared area

Buscar en el diccionario de datos (Seguridad, Privilegios, Etc..)

Calcular el path de bsqueda (Rule-based o Cost-based)

Salva el plan de ejecucin


Ejemplo: Las siguientes sentencias SQL no son iguales y no se compartirn 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 estn desarrollando una aplicacin
cada uno tiene su propio estilo, preferencias y tendencias, aun
cuando cada uno esta produciendo un cdigo eficaz, su futuro
mantenimiento puede darle un verdadero dolor de cabeza.
A menudo cuando no se aplican normas en la codificacin significa
que solo la persona que escribi el cdigo lo puede entender.
Antes de iniciar a codificar una aplicacin es importante definir
un estndar de programacin.

Afinando SQL
Consejos para afinar el SQL:

Usar Alias :
El uso de alias en las tablas y la inclusin de los prefijos en todos los
nombres de columnas cuando ms de una tabla es consultada
reducir el tiempo de anlisis 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 continuacin:


SELECT
FROM

E.emp_no, E.name, E.tax_no, C.Comp_Code, C.Comp_name


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)
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 aplicacin y escoje el plan de ejecucin
optimo, o recupera el path, para la sentencia. El plan de
ejecucin es la secuencia fsica de pasos que el RDBMS debe
tomar para realizar una operacin que usted ha especificado.
Para deducir el path de bsqueda optimo, el optimizador considera
varias reas como por ejemplo:
Las tablas de la base de datos que su sentencia necesitar accesar
Alguna condicin que deben satisfacer los datos (la clusula
WHERE)
La localizacin fsica 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 ejecucin.

Rango
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Condicion
ROWID
Cluster join with unique or primary key
Hash cluster key with unique or primary key
Entire unique concatenated index
Unique indexed column
Entire cluster key
Hash cluster key
Entire cluster key
Entire non-UNIQUE concatenated index
Non-UNIQUE index merge
Entire concatenated index
Most leading columns of concatenated index
indexed column BETWEEN low value an high value or indexed column LIKE
"ABC%" (Bounded range)
Non-UNIQUE indexed column between low value and high value or indexed
column like 'ABC%' (Bounded range)
UNIQUE indexed column o constant (Unbounded range)
Non-UNIQUE indexed column or constant (unbounded range)
Equality on nonindexed
MAX or MIN of single indexed columns
ORDER BY entire index
Full table scans

= Constant
= Constant
= Constant
= Constant
= Constant
=Corresponding cluster key of other
table in the same cluster
= Constant
= Constant
= Constant
=lower bound
= Constant

=column or constant (sort/merge join)

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 INTERSECCIN
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 comparacin en la clusula 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 bsqueda por ROWID en la tabla especificada

Optimizador basado en Costos


Hints (Continuacin)

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

Identificacin valida de la tabla

Localizacin invalida del hint

Versiones viejas de PL/SQL (2.0)

Afinando SQL
Consejos para afinar el SQL:
Uso eficiente de la clusula WHERE:
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 clusula WHERE:
USANDO ANDS SIN COMPETENCIA DE INDICES
SELECT

........

FROM emp E
WHERE 25 < ( SELECT

OR

COUNT(*)

FROM

emp

WHERE

emp_mgr = E.emp_no)

(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

USANDO ORS SIN COMPETENCIA DE INDICES


SELECT ....
FROM

emp E

WHERE

25 < (

OR

SELECT COUNT(*)

FROM

emp

WHERE

emp_mgr = E.emp_no)

(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
WHERE

emp.name = ........
ROWID = :emp_rowid;

Afinando SQL

Reduciendo el nmero de viajes a la Base de Datos

METODO 1
SELECT
FROM
WHERE

emp_name,salary,grade
emp
empno = 123;

SELECT
FROM
WHERE

emp_name,salary,grade
emp
empno = 567;

METODO 3
SELECT
FROM
WHERE
AND

A.emp_name,A.salary,A.grade,
B.emp_name,B.salary,B.grade
emp A, emp B
A.emp_no = 123
B.emp_no = 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;
OPEN C1(567);
FETCH C1 INTO .........;
CLOSE C1;
END;

Afinando SQL

Uso de valores null

Deshabilitar ndices

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
substr(account_name,1,7) = CAPITAL;

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
account_name LIKE CAPITAL%;

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
amount != 0;

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
amount > 0;

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
TRUNC(trans_date) = TRUNC(SYSDATE)

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
trans_date BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE)+0.99999;

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
account_name || account_type = AMEXA

SELECT
FROM
WHERE
AND

account_name, trans_date, ammount


transaction
account_name = AMEX
account_type = A

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
amount + 3000 < 5000

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
amount < 2000

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
account_name = NVL(:acc_name,account_name);

SELECT
FROM
WHERE

account_name, trans_date, ammount


transaction
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),
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

IN

EXISTS en lugar de NOT IN

o UNION en lugar de OR

Herramientas de Diagnstico

Herramientas de Diagnstico

ANALIZE
EXPLAIN

PLAN
SQL_TRACE
TKPROF

Herramientas de Diagnstico

ANALIZE
Los objetos de la base de datos necesitan ser analizados
para tener estadsticas 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 Diagnstico

EXPLAIN PLAN
El comando EXPLAIN PLAN despliega el plan de
ejecucin escogido por el optimizador de ORACLE
para las clusulas SELECT, UPDATE, INSERT Y
DELETE. El plan de ejecucin es la sentencia de
operaciones que ORACLE realiza para ejecutar las
sentencias.
Examinando el plan de ejecucin
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 Diagnstico
Operaciones y Opciones producidas por el EXPLAIN
PLAN

OPERACION
AND EQUAL

OPCION

CONNECT BY
CONCATENATION
COUNT
STOPKEY
FILTER
FIRST ROW

DESCRIPCION
Una operacin que acepta multiples sets de ROWID y regresa
la interseccin de los sets, eliminando duplicados.
Un retorno de filas en un orden jerrquico para una consulta
que contenga una clusula CONNECT BY
Una operacin que acepta mltiples sets de filas y regresa la
unin, todos los sets.
Una operacin que cuenta el Nmero de filas seleccionadas de
la tabla.
Una operacin que cuenta donde el nmero de filas retornadas
es limitado por la expresin ROWNUM en la clusula
WHERE.
Una operacin que acepta un set de filas, elimina algunas de
ellas, y regresa el resto.
Un retorno de slo la primera fila seleccionada por el query.

Herramientas de Diagnstico
Operaciones y Opciones producidas por el EXPLAIN
PLAN
OPERACION
FOR UPDATE
INDEX

OPCION

UNIQUE SCAN
RANGE SCAN
RANGE SCAN
DESCENDING

INTERSECTION
MERGE JOIN+
OUTER
CONNECT BY
MINUS

DESCRIPCION
Una operacin que devuelve y busca las filas seleccionadas
por el query que contiene una clusula FOR UPDATE
Un retorno de un simple ROWID de un ndice
Un retorno de una o ms ROWIDs de un ndice. Valores
indexados son buscados en orden ascendente
Un retorno de una o ms ROWIDs de un ndice. Valores
indexados son buscados en orden descendente
Una operacin que acepta dos sets de filas y regresa la
interseccin de los sets, eliminando duplicados
Una operacin que acepta dos sets de filas, cada una ordenada
por el valor especfico, combina cada fila de un set con la fila
correspondiente del otro, y regresa el resultado.
Una operacin de merge join para ejecutar una sentencia outer
join.
Un retorno de fila en un orden jerrquico por un query que
contenga una clusula CONNECT BY.

Una operacin que acepta dos sets de filas y retorna filas


que aparecen en el primer set pero no en el segundo,
eliminando duplicados

Herramientas de Diagnstico
Operaciones y Opciones producidas por el EXPLAIN
PLAN
OPERACION
NESTED LOOPS+

OPCION

NESTED LOOPS+
PROJECTION
REMOTE
SEQUENCE

OUTER

SORT

AGGREGATE
UNIQUE
GROUP BY
JOIN
ORDER BY

DESCRIPCION
Una operacin 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 condicin.
Un operacin LOOP para ejecutar una sentencia outer join
Una operacin interna
Un retorno de datos de una base de datos remota
Una operacin que involucra acceso a valores de una
secuencia
Un retorno de una simple fila que es el resultado de aplicar
una funcin de grupo a un grupo de filas seleccionadas
Una operacin que ordena un set de filas para eliminar
duplicados
Una operacin que ordena un set de filas en grupos para una
consulta con una clusula GROUP BY
Una operacin que ordena un set de filas antes de una
operacin merge join
Una operacin que ordena un set de filas para un query con
una clusula OREDER BY

Herramientas de Diagnstico
Operaciones y Opciones producidas por el EXPLAIN
PLAN
OPERACION
TABLE ACCESS*

OPCION
FULL
CLUSTER
HASH
BY ROWID

UNION
VIEW

DESCRIPCION
Un retorno de todas las filas de una tabla
Un retorno de filas de una tabla basada en un valor de la clave
del cluster indexado
Un retorno de filas de uana tabla basada en un valor de la
clave del hash cluster
Un retorno de una fila de una basada en sus ROWID
Una operacin que acepta dos sets de filas y regresa la unin
de los sets, eliminando duplicados
Una operacin que ejecuta una consulta a una vista y entonces
retorna las filas resultantes de otra operacin

Herramientas de Diagnstico

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 Diagnstico

SQL_TRACE
Utilidad que escribe un archivo de rastro conteniendo estadsticas de
performance.

Parmetros a inicializar en el init.ora con SQL_TRACE

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 Diagnstico

TKPROF
Utilidad que traslada a informacin legible el archivo generado por
SQL_TRACE, mostrando tambin el plan de ejecucin de la
sentencia.
TKPROF tracefile listfile [SORT = parameters]
[EXPLAIN = usr/pass]

tracefile = Nombre del archivo que contiene las estadsticas generadas

Listfile = Nombre del archivo de salida del TKPROF

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
La Metodologa de afinamiento de un sistema se basar en los
siguientes cuatro pasos:
1.

Identificacin de problemas

2.

Anlisis

3.

Acciones Correctivas

4.

Presentacin de Resultados

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Identificacin de problemas

Es necesario identificar los problemas y cuantificarlos para tener


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 grfica cuales son los problemas
que son mas frecuentes o puntos crticos en el sistema y
que pueden ser la causa del bajo desempeo,
como
resultado se deber saber cual es el estado actual del
sistema.

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Identificacin de problemas
Para esta tarea se debern seguir los siguientes pasos :
Identificar posibles problemas

1.

Fragmentacin

Mala utilizacin del espacio ocupado

Uso inadecuado de memoria

Aplicaciones (SQL) crticas

Accesos sin ndices

Uso inadecuado de la integridad referencial (locks o full-Scans)

2.

Recolectar informacin mediante mediciones

3.

Elaborar diagrama de Pareto

4.

Resumen.

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Anlisis
El resultado de un proceso puede atribuirse a una multitud de
factores, y es posible encontrar la relacin causa-efecto de esos
factores. Podemos determinar la estructura de una relacin mltiple
de causa-efecto observndola sistemticamente. Es difcil solucionar
problemas complicados sin tener en cuenta esta estructura, la cual
consta de una cadena de causas y efectos, y el mtodo para expresar
esto en forma sencilla y fcil es un diagrama de causa-efecto. El
resultado final del anlisis ser un documento de conclusiones del
sistema y un cronograma de actividades que se debern seguir para
afinar el sistema. Se debern seguir los siguientes pasos:
- Identificacin de causas y efectos
- Priorizar tareas
- Conclusiones y Recomendaciones
- Elaborar Cronograma

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Anlisis: Identificacin de causas y efectos

Se buscan todas las causas posibles que puedan afectar a las


caractersticas 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.

Diagrama
Causa-efecto
Uso inadecuado de memoria

Acceso a disco (I/O)


Array size

Tamao de bloques de
memoria

Indices Tablas
Datafiles

Tamao de
bloques de datos

Fragmentacin

Distribucin de
datos

Tamao
del SGA

Diccionario de
datos
Pagineo

Normalizacin/
Denomarlizacin

Bajo
rendimiento en
un sistema
Por integridad
referencial

Indices

Bind variables
Consideraciones
de acceso
concurrente

Mal uso de
clusters

Bloqueos

Acceso
redundantes

Compartido

Ciclos que causen


redundacia

Bloqueos por chequeo


de Integridad
Referencial sin indices

Tabla pivote
Mal uso del
optimizador

No uso de indices
Hints

Diseo
Programacin

Alias

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Anlisis: Priorizar tareas

Una vez completa la informacin sobre las causas y efectos


el paso siguiente es asignar la importancia de cada factor.
Todos los factores no se relacionan necesariamente en
forma estrecha con la caracterstica, de manera que se
marcarn esos factores que parecen tener un efecto
particularmente significativo sobre la caracterstica y se les
asignar la prioridad correspondiente.

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Anlisis: Conclusiones y Recomendaciones

Se elaborar un documento donde se resumen los factores


crticos del sistema recomendndose las tcnicas posibles a
usarse que incrementen el rendimiento del sistema y el
tiempo y recursos que tomar cada mejora.

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Anlisis: Elaborar Cronograma

Se detallarn todas las actividades en orden de mas alta


prioridad a la ms baja, especificando la fecha de inicio y
finalizacin de cada una.

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Acciones correctivas

Se ejecutarn todas las actividades detalladas en el cronograma,


acompaadas de su respectiva documentacin donde se
explicarn las tcnicas utilizadas para su correccin.
Adems se recabar toda la informacin del desempeo de
cada factor identificado con anterioridad (Punto 1) como
problema

METODOLOGIA DE AFINAMIENTO DE
SISTEMAS
Presentacin de Resultados

Basndose en los datos y el diagrama inicial se elaborar un


nuevo diagrama de Pareto para su comparacin donde se
observarn el impacto de las mejoras implementadas.

REFERENCIAS
Oracle

Performance Tuning,

Segunda Edicin

Gurry&Corrigan, Editorial OReilly

Oracle

Performance Tuning

Tips&Techniques

Richard J. Niemiec Editoral Osborne McGraw


Hill

Presentacin

compartida por
Blanco Silva Consultores.