Documente Academic
Documente Profesional
Documente Cultură
Objetivos
• Describir las ventajas del lenguaje de
manipulación paralela de datos (PDML)
• Usar hints y la cláusula PARALLEL para
definir el grado de paralelismo de una
sentencia DML
• Conocer las restricciones del uso del PDML
• Ejecutar sentencias DML en modo directo
y en tablas particionadas
• Consultar el DD en relación con el PDML
7-2
Introducción
• Las operación DML paralelas aceleran el
acceso a grandes tablas, cuando se
modifican al menos un 1% de las filas
• Útil en entornos DSS o Datawarehouse, y
en ciertas operaciones OLTP
• Oracle8 complementa las consultas
paralelas disponibles en v7 con DML
paralelo
• Muchas operaciones paralelas requieren
7-3
tablas e índices particionados, excepto
INSERT... SELECT...
Beneficios del DML paralelo
• La principal ventaja es el
RENDIMIENTO: el paralelismo puede
acelerar la velocidad de proceso de
transacciones DML P99S1
UPDATE PEDIDO
SET PENDIENTE = ’F’; P99S2
P99ERR
P99S1
UPDATE /*+PARALLEL(PEDIDO,3)*/ PEDIDO
SET PENDIENTE = ’F’; P99S2
P99ERR
7-4
Beneficios del DML paralelo
• Ya no es necesario:
– que múltiples sesiones ejecuten las operaciones
sobre los mismos datos
– conocer los rangos de rowid o de claves para dividir
el trabajo
– coordinar manualmente las sentencias que se
ejecutan en paralelo
• Con Parallel DML se ejecuta una sentencia
como una simple transacción sobre una única
sesión: el control de la atomicidad de la
transacción
7-5 es máximo (commit/rollback único)
Beneficios del PDML
• Alto grado de afinidad: Oracle usa el mapeo
partición-dispositivo
• Beneficios sobre tablas particionadas
Instancia 1 P99S1
P99S2
Instancia 2
P99ERR
7-6
Operaciones soportadas en
paralelo
• Consulta paralela (como en v7),
– soporta paralelismo dentro de una partición
• Nuevas opciones, paralelizadas por partición
(no hay paralelismo dentro de cada partición):
– INSERT... SELECT... con carga directa sobre
tablas particionadas
– DELETE sobre tablas particionadas
– UPDATE sobre tablas particionadas
– INSERT... SELECT... con carga directa sobre
7-7 tablas no particionadas
Tipos de paralelismo
• Las operaciones paralelas PE1
siempre tienen un proceso PE2
Maestro
maestro que coordina los
proceso esclavos PE3
PQ1 PE1
PE1 P99S1
PE2 P99S2
7-11
PE3 P99ERR
Comandos paralelos
Tipo de operación Paralelizado por
PARALLEL QUERY ROWID
PARALLEL INSERT... PARTICIÓN
SELECT... Direct Load
(tablas particionadas)
PARALLEL DELETE
PARTICIÓN
(tablas particionadas)
PARALLEL UPDATE
PARTICIÓN
(tablas particionadas)
PARALLEL INSERT...
PROCESOS ESCLAVO
SELECT... Direct Load
7-12 (tablas no partitionadas)
Parallel INSERT Direct Load
• Las filas se insertan en un segmento temporal
• El segmento temporal se añade luego al
segmento de datos por encima de la HWM
• Después, se asigna a cada fila un rowid y se
mueve la HWM (similar al SQL*Loader)
INSERT /*+PARALLEL(PEDIDO,3)*/ INTO PEDIDO
SELECT * FROM PEDIDOS_PENDIENTES;
PE1 P99S1
S. Temp. HWM
P99S2
PE2 S. Temp. HWM
P99ERR
7-13
PE3 S. Temp. HWM
Parallel DML: Activación
• Por defecto está desactivado, pudiéndose
hacer sólo consultas paralelas
• La sentencia ALTER SESSION que
permite la ejecución paralela de DML ha
de ser la primera de la transacción.
ALTER SESSION ENABLE PARALLEL DML;
7-20
INSERT...SELECT... paralelo
• Se pueden especificar hints para el INSERT y para el
SELECT, y ambas tablas pueden tener sus respectivas
cláusulas PARALLEL
• Cuatro factores pueden influenciar el paralelismo de
la sentencia entera, con esta preferencia:
– hint del INSERT
– cláusula PARALLEL de la tabla donde se inserta
– hint del SELECT
– máximo paralelismo definido en las clásulas PARALLEL de
las tablas que se consultan
7-21
INSERT...SELECT...: Ejemplo
INSERT /*+PARALLEL(PEDIDO,3)*/ INTO PEDIDO
SELECT /*+PARALLEL(PEDIDOS_PENDIENTES,5)*/ *
FROM PEDIDOS_PENDIENTES;
7-22
UPDATE y DELETE paralelo
• La sintaxis no cambia al añadir la posibilidad de
ejecución en paralelo
• El mismo paralelismo se aplica tanto para la consulta
previa la tabla como al realizar la actualización
• Si se definen subconsultas con sus propios hints y
cláusulas PARALLEL, estos no afectan a la
paralelización de la operación UPDATE/DELETE, ya
que esta decisión se toma independientemente de la
porción de consulta y viceversa
• Un UPDATE se paraleliza aunque la tabla se escanee
en modo serial
7-23
UPDATE/DELETE: Ejemplo
UPDATE /*+PARALLEL(PEDIDO,4)*/ PEDIDO
SET PENDIENTE = ’F’;
7-24
Diccionario de datos
V$SESSION • El nuevo atributo de
SADDR V$SESSION es
SID
USERNAME
PMDL_ENABLED
SCHEMANAME que permite consultar
... si una sesión tiene
PDML_ENABLED
... habilitada el PDML
7-26
PDML y segmentos de rollback
UPDATE /*+PARALLEL(PEDIDO,4)*/ PEDIDO
SET PENDIENTE = ’F’;
7-30