Documentos de Académico
Documentos de Profesional
Documentos de Cultura
14 OptimizadorOracle PDF
14 OptimizadorOracle PDF
14 OptimizadorOracle PDF
OPTIMIZADOR ORACLE.
Ejemplo :
FILTER
1
2 NESTED 6 TABLE
LOOPS ACCESS
(FULL)
salgrade
TABLE
3 TABLE 4 ACCESS
ACCESS (BY ROWID)
(FULL) dept
emp
INDEX
5 (UNIQUE
SCAN)
pk_deptno
1
2
eje3: x > ANY ( SELECT sal FROM emp WHERE job = „ANALYST‟)
es transformada en
EXISTS ( SELECT sal FROM emp WHERE job = „ANALYST‟ AND x > sal );
ejemplo 1 :
SELECT * FROM emp WHERE job = „CLERK‟ OR depto = 10;
Si uso el optimizador basado en reglas, se asume que el uso de los índices es de menor costo
que leer todos los bloques que contienen la tabla.
Con el optimizador basado en costos se evaluan las dos alternativas y se asume la de menor
costo.
ejemplo 2 :
SELECT accounts.*
FROM accounts,customers WHERE accounts.custno = customers.custno;
Ejemplo1 :
CREATE VIEW emp_10
2
3
Se transforma en :
SELECT empno FROM emp WHERE deptno = 10 AND empno > 7800;
TIPOS DE OPTIMIZACION:
Basada en reglas: Se apoya en una información predefinida, donde cada operación tiene un
rango de menor a mayor. Escoge la opción de menor rango.
Basada en costos: Entre todos los posibles caminos de acceso escoge el de menor costo; para
calcular dicho costo se apoya en estadísticas almacenadas en el diccionario de datos (tamaño
de las tablas, indices existentes, imagen de los índices, etc). Tambien considera “sugerencias”
definidas por quien ejecuta la instruccción.
2.5. Para cada tabla utilizada se escoge uno ó varios caminos de acceso a los datos.
3
4
4
5
Camino 9 : Indice de solo una columna. Cada índice no único está creado sobre una sola
columna de la tabla .
Camino 10 : Búsqueda por rango limitado sobre una columna con índice.
SELECT * FROM emp WHERE deptno BETWEEN 30 AND 50;
Camino 11: Búsqueda con rango ilimitado sobre una columna con índice.
SELECT * FROM emp WHERE deptno > 30;
5
6
col1 > col2 ( idem para >=, <= ,etc ) y pertenecen a la misma tabla.
col NOT IN
col IS NOT NULL col !=
col LIKE PATRON expresion1 = expresion2;
6
7
SELECT empno FROM emp WHERE ename = „PEPE‟ and sal > 2000;
Asumo la tabla con índice en las columnas:
empno (su clave primaria), ename ( no único) y sal (no único).
Caminos posibles :
camino 9 : utilizando ename = „PEPE‟.
camino 11: utilizando sal > 2000;
camino 15 : barrido completo.
La clave primaria no se tiene presente pues no aparece en el predicado.
El optimizador escoge el camino 9.
Eje 2 :
SELECT * FROM emp WHERE empno < 7500;
Si uso col BETWEEN A AND B se descompone en col <= B AND col >= A y calcula la
selectividad de cada caso, S1 y S2 respectivamente. Luego aplica la fórmula :
S = ABS(S1+S2-1).
7
8
CLUSTER
c. El orden del join, cuando es un join de más de dos tablas.
a. NESTED LOOPS
Ejemplo: SELECT * FROM emp.dept WHERE emp.deptno = dept.deptno;
1 NESTED
LOOPS
4 TABLE
2 TABLE ACCESS
ACCESS (BY ROWID)
(FULL) dept
emp
INDEX
(UNIQUE
SCAN)
3 pk_deptno
1 MERGE
JOIN
4
SORT
2 SORT
(JOIN)
(JOIN)
TABLE TABLE
3 ACCESS 5 ACCESS
(FULL) (FULL)
dept emp
1 NESTED
LOOPS
3
2
8
9
TABLE ACCESS
TABLE
(CLUSTER)
ACCESS
emp
(FULL)
dept
Se generan R posibles secuencias para el join, definiendo en cada caso una tabla inicial
diferente.
Para definir el orden subsiguiente de las tablas cada vez se escoge , entre las restantes,
aquella que tenga el camino de acceso de más alto rango.
Se define para cada par de tablas ( ó el resultado del par anterior con la tabla siguiente) la
manera de resolver el join, bajo los siguientes criterios:
Si la segunda tabla tiene un camino de acceso igual o menor a 11 se aplica NESTED
LOOPS.
Si la segunda tabla tiene un camino mayor que 12 y es un equijoin se aplica SORT
MERGE.
Si la segunda tabla tiene un camino mayor que 12 y No es equijoin se aplica NESTED
LOOPS.
Se escoge entre los R planes resultantes aquel que tenga el mayor número de NESTED
LOOPS - con INDEX SCAN en la tablas usadas en el ciclo interno. SI hay empate en varios
planes se evalua adicionalmente y en su orden los siguientes criterios:
Escoge la que tenga menos NESTED LOOPS con FULL SCAN.
Escoge el que tenga menos SORT MERGE.
Si continua el empate escoge el método cuya primera tabla tenga el más alto rango entre
los caminos de acceso.
2.6.4 Evaluación por costos. Se genera un conjunto de planes de ejecución basado en el posible
orden del join, operación a emplear y caminos disponibles. Se estima el costo de cada uno y se
escoge el más barato. La evaluación se lleva a cabo de la siguiente manera :
NESTED LOOPS : Usa la tabla con más filas como tabla externa.
SORT MERGE :
9
10
options varchar2(30),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns numeric,
id numeric,
parent_id numeric,
position numeric,
other long);
3.4. Resultado :
10
11
14 rows selected.
SELECT dname, deptno FROM dept WHERE deptno NOT IN ( select deptno FROM EMP);
Asuma que hay indice en la columna deptno de la tabla emp llamado idx_deptno.
1 FILTER
2 3 TABLE
TABLE
ACCESS ACCESS
(FULL) (FULL)
dept emp
FILTER
1
2 3
TABLE INDEX
ACCESS RANGE_SCAN
(FULL) idx_deptno
dept
11
12
USER_DUMP_DEST= directorio. Alli se crean los archivos que arrojan estas utilidades.
a) Si las lecturas lógicas están muy por encima de las filas retornadas pueden faltar índices.
b) b.Si la columna count de la operación fetch es muy cercana a la columna rows de la misma
operación use la facilidad array proccessing.
c) Si La columna count de la operación parsed es muy cercana a la columna count de la fila
execute es probable que tenga una libreria cache pequeña. véase SHARED_POOL_SIZE.
Tambien es probable un manejo pobre de los cursores.
d) Si el total de la columna disk está cercano al total de lecturas lógicas, el database buffer
cache puede ser insuficiente. Véase DB_BLOCK_BUFFER.
e) Tambien es posible que está reciente el arranque de la B. de D.
f) La columna query significa el número de veces que necesitó información desde los
segmentos de Rollback.
12
13
5.2. Para aplicaciones en BATCH es deseable lograr una meta de mejor desempeño global:
ALTER SESSION SET OPTIMIZER_GOAL = ALL_ROWS.
5.3. Para aplicaciones en línea es deseable lograr una meta de respuesta inicial rápida:
ALTER SESSION SET OPTIMIZER_GOAL = FIRST_ROWS.
5.4. Puedo inducir al optimizador en la escogencia del método de ejecución usando HINTS.
SELECT /*+ FIRST_ROWS */ empno,ename, sal,job FROM emp WHERE empno = 7566
SELECT /*+ INDEX(sex_idx) */ name, height,weight FROM patients WHERE sex = „M‟;
SELECT temperature
FROM tank_readings
WHERE time = ( SELECT MAX(time)
FROM tank_readings
WHERE time <= TO_DATE(:T) );
Proceso : Encuentra de menor a mayor todos los valores menores a T, entre ellos escoge el
mayor y se ejecuta la parte externa de la consulta.
13
14
Recorre el índice de mayor a menor obtiene el ROWID del tiempo buscado y lee el bloque de
datos donde se halla almacenado;
Nota:
14