Date post: | 18-Feb-2018 |
Category: |
Documents |
Upload: | leandro-arge |
View: | 215 times |
Download: | 0 times |
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 1/22
Grandes volúmenes de
datosPlan de ejecución
bases de datos
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 2/22
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 3/22
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
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 4/22
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 debecontener columnas con nombres y tipos de datosidénticos a la tabla PLAN_TABLE
proporcionada en el script
$ORACLE_HOME/RDBMS/ADMIN/UTLXPLAN.SQL
4
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 5/22
Plan de ejecución en Oracle PLAN_TABLE
◦ http://download.oracle.com/docs/cd/B19306_01/server.102/b14211
/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 optimizadorpara realizar la sentencia.
Para el resto, indica la posición relativa respecto al padre
5
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 6/22
Plan de ejecución en Oracle
Sintaxis (reducida)
6
EXPLAIN PLAN
SET STATEMENT_ID = 'texto'
INTO esquema.tabla (es la PLAN_TABLE)
FOR sentencia ;
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 7/22
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
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 8/22
Plan de ejecución en Oracle
Ejemplo. No existe índice
8
explain plan set statement_id = 'e1'into plan_tablefor select nomb_empr from empresas where cpos_empr = '03560';
select operation, options, object_name, positionfrom plan_tablewhere statement_id='e1';
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 9/22
Plan de ejecución en Oracle
Ejemplo. Existe índice
9
explain plan set statement_id = 'e2'into plan_tablefor select nomb_empr from empresas where cif_empr = 'A1234567';
select operation, options, object_name, positionfrom plan_tablewhere statement_id='e2';
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 10/22
Ejemplo sin indice
10
explain plan set statement_id='bm1'for select nume_pedi, fech_pedifrom pedidos
where esta_pedi ='R';
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 11/22
Ejemplo con indice b-tree
11
explain plan set statement_id='bm2'for select nume_pedi, fech_pedifrom pedidoswhere esta_pedi ='R';
create index idx_pedidos_esta_pedi on pedidos(esta_pedi);
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 12/22
Ejemplo con índice bitmap
12
explain plan set statement_id='bm3'for select nume_pedi, fech_pedifrom pedidoswhere esta_pedi ='R';
drop index idx_pedidos_esta_pedi;
create bitmap index bidx_pedidos_esta_pedi onpedidos (esta_pedi);
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 13/22
Ejemplo. Función aritmética
13
select nume_pedi, esta_pedifrom pedidoswhere fech_pedi +5 = '25/05/07';
explain plan set statement_id='bf1'for select nume_pedi, esta_pedifrom pedidoswhere fech_pedi +5 = '25/05/07';
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 14/22
Ejemplo. Función aritmética
14
create index idx_pedidos_fech_pedi on pedidos(fech_pedi);
explain plan set statement_id='bf2'for select nume_pedi, esta_pedifrom pedidoswhere fech_pedi +5 = '25/05/07';
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 15/22
Ejemplo. Función aritmética
15
create index fidx_pedidos_fech_pedi on pedidos(fech_pedi+5);
analyze table pedidos compute statistics;
analyze index fidx_pedidos_fech_pedi validate
structure;
explain plan set statement_id='bf3'for select nume_pedi, esta_pedifrom pedidos
where fech_pedi +5 = '25/05/07';
No hace falta borrar idx_pedidos_fech_pedi
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 16/22
Ejemplo. Función aritmética
16
explain plan set statement_id='bf4'for select nume_pedi, esta_pedi
from pedidoswhere fech_pedi +5 > '25/05/07';
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 17/22
Ejemplo. Función aritmética
17
explain plan set statement_id='bf5'for select nume_pedi, esta_pedi
from pedidoswhere fech_pedi +15 > '25/05/07';
YA NO LO USA PUES EL INDICE SE CONSTRUYO CON +5
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 18/22
Ejemplo. Función predefinida SQL
18
explain plan set statement_id='bf6'for select nomb_emprfrom empresaswhere cif_empr = 'A1234567';
select nomb_emprefrom empresaswhere cif_empre = 'A1234567';
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 19/22
Ejemplo. Función SQL
19
explain plan set statement_id='bf6'for select nomb_emprfrom empresaswhere substr(cif_empr,1,1) = 'A';
select nomb_emprfrom empresaswhere substr(cif_empr,1,1) = 'A';
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 20/22
Ejemplo. Función SQL
20
explain plan set statement_id='bf7'for select nomb_emprfrom empresas
where substr(cif_empr,1,1) = 'A';
create index fidx_empresas_cif_empr onempresas (substr(cif_empr,1,1) );
analyze table empresas compute statistics;
analyze index fidx_empresa_cif_empr validate
structure;
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 21/22
Existen utilidades que nos facilitan esta tarea
21
Plan de ejecución en Oracle
7/23/2019 05_BBDD.GVD.Plan
http://slidepdf.com/reader/full/05bbddgvdplan 22/22
En muchos casos el plan de ejecución es muy complejo
22
Plan de ejecución en Oracle