Plan de ejecución en Oracle

Anuncio
Grandes volúmenes de
datos
Plan de ejecución
bases de datos
Plan de ejecución en Oracle

Plan de ejecución
◦ Es la fase del “parseo” de una sentencia encargada de decidir cómo
se va a acceder a los datos solicitados -> se encarga el optimizador.
◦ El optimizador puede trabajar por REGLAS o COSTES (defecto)
◦ En función de si trabaja por REGLAS o COSTES el optimizador debe
considerar diversos factores relacionados con los objetos
referenciados y las condiciones especificadas en el query (indices
existentes, tamaños de las tablas, histogramas de los datos, num.
filas estimadas en la recuperación, etc …)
◦ El resultado es el plan de ejecución (hoja de ruta a seguir para
acceder a la información)
2
Plan de ejecución en Oracle

EXPLAIN PLAN
◦ Permite consultar el plan de ejecución de una
sentencia
 Muestra plan de ejecución
 La sentencia no se ejecuta
3
Plan de ejecución en Oracle

EXPLAIN PLAN
◦ Inserta una fila por cada paso del plan de
ejecución en una consulta
◦ La tabla en la que se inserte la descripción debe
contener columnas con nombres y tipos de datos
idénticos a la tabla PLAN_TABLE
 proporcionada en el script
$ORACLE_HOME/RDBMS/ADMIN/UTLXPLAN.SQL
4
Plan de ejecución en Oracle

PLAN_TABLE
◦ http://download.oracle.com/docs/cd/B19306_01/server.102/b14
211/ex_plan.htm#i18300
◦ Statement_id varchar2(30)
 Valor opcional para identificar planes de ejecución
◦ Operation varchar2(30)
 Nombre de la operación interna realizada
 http://download.oracle.com/docs/cd/B19306_01/server.102/b14211
/ex_plan.htm#i23461
◦ Options varchar2(225)
 Detalles sobre la operación
◦ Object_name varchar2(30)
 Nombre de la tabla o índice
◦ Position numeric
 Para la primera fila indica el coste estimado por el optimizador
para realizar la sentencia.
 Para el resto, indica la posición relativa respecto al padre
5
Plan de ejecución en Oracle

Sintaxis (reducida)
EXPLAIN PLAN
SET STATEMENT_ID = 'texto'
INTO esquema.tabla
(es la PLAN_TABLE)
FOR sentencia ;
6
Plan de ejecución en Oracle

Cláusula set statement_id
◦ Valor para la columna plan_table.statement_id
para las filas del plan de ejecución
◦ Valor por defecto null

Cláusula into table
◦ Nombre de la tabla de salida
◦ Valor por defecto plan_table

Cláusula for
◦ Sentencia para la cual se desea conocer el plan de
ejecución
 Select, insert, update, delete, create table, ………..
7
Plan de ejecución en Oracle

Ejemplo. No existe índice
explain plan set statement_id = 'e1'
into plan_table
for select nomb_empr from empresas where cpos_empr = '03560';
select operation, options, object_name, position
from plan_table
where statement_id='e1';
8
Plan de ejecución en Oracle

Ejemplo. Existe índice
explain plan set statement_id = 'e2'
into plan_table
for select nomb_empr from empresas where cif_empr = 'A1234567';
select operation, options, object_name, position
from plan_table
where statement_id='e2';
9
Plan de ejecución en Oracle

Ejemplo sin indice
explain plan set statement_id='bm1'
for select nume_pedi, fech_pedi
from pedidos
where esta_pedi ='R';
10
Plan de ejecución en Oracle

Ejemplo con indice b-tree
create index idx_pedidos_esta_pedi on pedidos
(esta_pedi);
explain plan set statement_id='bm2'
for select nume_pedi, fech_pedi
from pedidos
where esta_pedi ='R';
11
Plan de ejecución en Oracle

Ejemplo con índice bitmap
drop index idx_pedidos_esta_pedi;
create bitmap index bidx_pedidos_esta_pedi on
pedidos (esta_pedi);
explain plan set statement_id='bm3'
for select nume_pedi, fech_pedi
from pedidos
where esta_pedi ='R';
12
Plan de ejecución en Oracle

Ejemplo. Función aritmética
select nume_pedi, esta_pedi
from pedidos
where fech_pedi +5 = '25/05/07';
explain plan set statement_id='bf1'
for select nume_pedi, esta_pedi
from pedidos
where fech_pedi +5 = '25/05/07';
13
Plan de ejecución en Oracle

Ejemplo. Función aritmética
create index idx_pedidos_fech_pedi on pedidos
(fech_pedi);
explain plan set statement_id='bf2'
for select nume_pedi, esta_pedi
from pedidos
where fech_pedi +5 = '25/05/07';
14
Plan de ejecución en Oracle

Ejemplo. Función aritmética
create index fidx_pedidos_fech_pedi on pedidos
(fech_pedi+5); No hace falta borrar idx_pedidos_fech_pedi
analyze table pedidos compute statistics;
analyze index fidx_pedidos_fech_pedi validate
structure;
explain plan set statement_id='bf3'
for select nume_pedi, esta_pedi
from pedidos
where fech_pedi +5 = '25/05/07';
15
Plan de ejecución en Oracle

Ejemplo. Función aritmética
explain plan set statement_id='bf4'
for select nume_pedi, esta_pedi
from pedidos
where fech_pedi +5 > '25/05/07';
16
Plan de ejecución en Oracle

Ejemplo. Función aritmética
YA NO LO USA PUES EL INDICE SE CONSTRUYO CON +5
explain plan set statement_id='bf5'
for select nume_pedi, esta_pedi
from pedidos
where fech_pedi +15 > '25/05/07';
17
Plan de ejecución en Oracle

Ejemplo. Función predefinida SQL
select nomb_empre
from empresas
where cif_empre = 'A1234567';
explain plan set statement_id='bf6'
for select nomb_empr
from empresas
where cif_empr = 'A1234567';
18
Plan de ejecución en Oracle

Ejemplo. Función SQL
select nomb_empr
from empresas
where substr(cif_empr,1,1) = 'A';
explain plan set statement_id='bf6'
for select nomb_empr
from empresas
where substr(cif_empr,1,1) = 'A';
19
Plan de ejecución en Oracle

Ejemplo. Función SQL
create index fidx_empresas_cif_empr on
empresas (substr(cif_empr,1,1) );
analyze table empresas compute statistics;
analyze index fidx_empresa_cif_empr validate
structure;
explain plan set statement_id='bf7'
for select nomb_empr
from empresas
where substr(cif_empr,1,1) = 'A';
20
Plan de ejecución en Oracle

Existen utilidades que nos facilitan esta tarea
21
Plan de ejecución en Oracle

En muchos casos el plan de ejecución es muy complejo
22
Descargar