Vistas materializadas Archivo

Anuncio
Grandes volúmenes de
datos
Vistas materializadas
bases de datos
Vistas materializadas en Oracle




Objeto de base de datos que almacena los
resultados de una consulta.
Es una vista pero no solo se almacena su
definición, sino también los datos que devuelve.
Estos datos deben ser refrescados.
Se le pueden definir índices
Se le puede especificar parámetros de
almacenamiento como a una tabla
(internamente es una tabla)
2
Vistas materializadas en Oracle

Ventajas
◦ Su uso es transparente para las aplicaciones y los usuarios
◦ Evita realizar cálculos que requieren gran tiempo de ejecución
en el momento de ejecución de la consulta
 Agregaciones (sum, avg, …)
 Joins complejos entre tablas
◦ Existe la posibilidad de que el optimizador de consultas
reconozca automáticamente cuando existe una vista
materializada que puede ser utilizada para resolver una consulta
 Re-escribe la consulta (QUERY REWRITE)
 Compara los planes de ejecución
 Elige el mejor
3
Vistas materializadas en Oracle

Desventajas
◦ Ocupan espacio
 Tabla interna
◦ Necesitan de operaciones de refresco
 Actualización temporal (refrescos programados)
 Actualización instantánea (cada vez que se
modifican los datos de origen)
4
Vistas materializadas en Oracle

Sintaxis reducida
CREATE MATERIALIZED VIEW [esquema.]vista
[BUILD { IMMEDIATE | DEFERRED }
[ REFRESH { FAST | COMPLETE | FORCE }
{ ON { DEMAND | COMMIT }
| { START WITH | NEXT } date ]
[ { DISABLE | ENABLE } QUERY REWRITE ]
AS subquery ;
DROP MATERIALIZED VIEW [esquema.]tabla
[PRESERVE TABLE];

Sintaxis completa:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm
5
Vistas materializadas en Oracle

BUILD
◦ Immediate
 Opción por defecto
 Refresca los datos inmediatamente con la
ejecución de la sentencia de creación
◦ Deferred
 La vista se crea vacía
 Los datos aparecerán en la siguiente operación de
refresco
6
Vistas materializadas en Oracle

REFRESH
◦ complete | fast | force
 Complete. Se ejecuta cada vez la query de la vista. Se borran
todos los datos y se vuelven a calcular.
 Fast. Método de refresco incremental. Los cambios en las
tablas que afectan a la vista se almacenan en un log asociado
a la tabla
 El log de las tablas maestras de la vista han de crearse
previo a la vista (create materialized view log on nombre_tabla ….)
 No permitido con BUILD DEFERRED
 Muchas restricciones sobre la sentencia de la vista.
 Para saber si una vista materializada puede utilizar el
método FAST, el package DBMS_MVIEW proporciona el
procedure EXPLAIN_MVIEW
 Force. Valor por defecto. Si puede rápido y si no completo
7
Vistas materializadas en Oracle

REFRESH
 Demand | commit
 Commit. Refresco cada vez que una operación
modifica alguna de las tablas maestras (sólo para
tipo FAST)
 Demand. Valor por defecto. Bajo demanda. Una
opción de refresco es utilizar uno de los
procedimientos de refresco (DBMS_MVIEW)
8
Vistas materializadas en Oracle

REFRESH
 Cuando es “on demand” también podemos dejar
programados los refrescos con: start with | next
 Start with. Especifica una expresión temporal para
el primer refresco
 Next. Especifica una expresión temporal para
calcular el intervalo entre refrescos
 ORACLE automáticamente genera un JOB para
estos refrescos
9
Vistas materializadas en Oracle

Ejemplo
se poblará en
la siguiente
operación de
refresco
CREATE MATERIALIZED VIEW mv_pedidos Refresco completo y bajo
demanda llamando a
BUILD DEFERRED
procedimiento
DBMS_MVIEW
REFRESH COMPLETE ON DEMAND
AS
SELECT fech_pedi, esta_pedi, count(*) AS nume_pedi
FROM pedidos
GROUP BY fech_pedi, esta_pedi;
DBMS_MVIEW.REFRESH(
LIST
=> ‘MV_PEDIDOS'
,ATOMIC_REFRESH
=> FALSE);
Podemos especificar una
lista de vistas.
Tiene otros parámetros.
(ver manual)
Forzamos un truncate en
vez de un delete. Es más
rápido aunque la vista
aparece vacía hasta que no
se finaliza el proceso.
10
Vistas materializadas en Oracle

Ejemplo
Refresco completo, automático cada siete días
Comenzando 7 después de la creación de la vista
CREATE MATERIALIZED VIEW mv_pedidos
BUILD IMMEDIATE
REFRESH complete NEXT sysdate + 7
AS SELECT * FROM pedidos;
Podemos especificar parámetros de
almacenamiento
CREATE MATERIALIZED VIEW mv_pedidos
TABLESPACE OTRAS_APP_DAT
Se creará inicialmente vacia, el primer referesco
STORAGE (INITIAL 50K NEXT 50K)
será hoy a las 13 y todos los días a las 6:00
completo
BUILD DEFERRED
REFRESH COMPLETE
START WITH ROUND(SYSDATE) + 13/24 NEXT ROUND(SYSDATE+1)+ 6/24
AS AS SELECT * FROM pedidos;
11
Vistas materializadas en Oracle

Ejemplo
create materialized view log on pedidos with primary key
(fech_pedi, impo_pedi)
Creamos el log de la tabla maestra.
Almacenamos cambios en campos fecha e
including new values;
importe y los tenemos “localizados” por la primary
key de pedidos
create materialized view mv_pedidos
refresh fast on demand
as
select count(*), sum(impo_pedi), to_char(fech_pedi, 'YYYY')
from pedidos
Cuando se produzca el refresco solo se
refrescaran los datos modificados
12
Vistas materializadas en Oracle

QUERY REWRITE
◦ El optimizador puede decidir, por razones de
eficiencia, usar una vista materializada cuando
se encuentra con una query en la que podría ser
usada
◦ ENABLE: Indicamos que la vista es candidata
◦ DISBLE (por defecto) : Indicamos que la vista NO
es candidata
◦ Se debe activar en la parametrización del ORACLE
13
Vistas materializadas en Oracle

QUERY REWRITE (ejemplo)
El optimizador
decide
usar la visa
materializada
14
Descargar