Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Paralelización de operaciones
2
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
3
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 tablas e índices particionados, excepto INSERT... SELECT...
4
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
5
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 es máximo (commit/rollback único)
6
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
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 tablas no particionadas
8
Tipos de paralelismo Las operaciones paralelas siempre tienen un proceso maestro que coordina los proceso esclavos El tipo de operación determina cuándo y cómo se paraleliza la operación Tres métodos de paralelización Por rangos de rowid (sólo consultas paralelas) Por procesos esclavos (INSERT en tablas no particionadas) Por partición (sólo tablas particionadas) PE1 Maestro PE2 PE3
9
Paralelización por rangos de ROWID
Se aplica a consultas de tablas particionadas y no particionadas Proporciona paralelismo dentro de una partición: varios procesos esclavo pueden estar accediendo a una partición PE1 P99S1 AAAAT9AABAAABaIAAv PE2 AAAAT9AABAAABaLAAY ... PE3 P99S2 PE4 FFAAT9AABAAABaIAAv PE5 P99ERR FFAAT9AABAAABaLAAY ... PE6
10
Paralelización por procesos esclavo
Se aplica sólo en INSERT...SELECT... sobre tablas no particionadas Como las nuevas filas no tienen ROWID, las filas se distribuyen entre los procesos paralelos que insertan en la tabla destino tras la HWM INSERT /*+PARALLEL(TABLA1,3)*/ INTO TABLA2 SELECT * FROM TABLA1; Tabla2 Tabla1 PQ1 PE1 PQ2 PE2 PQ3 PE3
11
Paralelización por particiones
Se aplica sólo a tablas particionadas No hay paralelismo dentro de una partición para operaciones DML Un proceso esclavo puede ser asignado a más de una partición para compartir recursos UPDATE /*+PARALLEL(PEDIDO,3)*/ PEDIDO SET PENDIENTE = ’F’; PE1 P99S1 P99S2 PE2 P99ERR PE3
12
Comandos paralelos Tipo de operación PARALLEL QUERY
PARALLEL INSERT... SELECT... Direct Load (tablas particionadas) PARALLEL DELETE (tablas particionadas) PARALLEL UPDATE (tablas particionadas) PARALLEL INSERT... SELECT... Direct Load (tablas no partitionadas) Paralelizado por ROWID PARTICIÓN PROCESOS ESCLAVO
13
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; P99S1 PE1 S. Temp. HWM P99S2 S. Temp. PE2 HWM P99ERR S. Temp. PE3 HWM
14
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. Cada operación PDML ha de terminar con COMMIT o ROLLBACK (si no, error) En una transacción, tras una DML en serie (salvo SELECT), se ignoran los hints o cláusulas paralelas y se continua en serial ALTER SESSION ENABLE PARALLEL DML;
15
Parallel DML: Ejemplo COMMIT; ALTER SESSION ENABLE PARALLEL DML; 1 SELECT * FROM PEDIDO WHERE PENDIENTE = ’T’; 2 UPDATE PEDIDO SET PENDIENTE = ’F’; 3 INSERT /*+PARALLEL(PEDIDO,3)*/ INTO PEDIDO SELECT * FROM PEDIDOS_PENDIENTES; 1. La sentencia SELECT puede ser ejecutada y no afecta a la paralelización de la siguiente 2. La sentencia UPDATE se ejecuta en serie, por lo que se ignora el hint paralelo del INSERT, que se ejecutará también en serie 3. Si el UPDATE se hubiera ejecutado en paralelo, el INSERT devolvería el error ORA-12830
16
Parallel DML: Desactivación
COMMIT; ALTER SESSION DISABLE PARALLEL DML; 1 SELECT /*+PARALLEL(PEDIDO,3)*/ * FROM PEDIDO WHERE PENDIENTE = ’T’; 2 UPDATE /*+PARALLEL(PEDIDO,3)*/ PEDIDO SET PENDIENTE = ’F’; 3 COMMIT; 1. La sentencia SELECT puede ser ejecutada en paralelo (parallel query) 2. El UPDATE se ejecuta en serie (PDML desactivado) 3. Con PDML activado, el UPDATE se hubiera ejecutado en paralelo, y después siempre COMMIT/ROLLBACK
17
Cláusula PARALLEL NOPARALLEL PARALLEL ( DEGREE ) integer DEFAULT INSTANCES integer DEFAULT En las sentencias CREATE/ALTER, indica el grado de paralelismo de sentencias DML DEGREE:el número de CPUs INSTANCES: nodos de base de datos distribuida Los hints paralelos tienen preferencia sobre la especificación de esta cláusula ALTER TABLE PEDIDO PARALLEL (DEGREE 4 INSTANCES 3);
18
Hints de PDML UPDATE tabla /*+ PARALLEL (m,n) */ DELETE FROM tabla /*+ PARALLEL (m,n) */ INSERT INTO tabla /*+ APPEND NOAPPEND */ PARALLEL (m,n) El hint PARALLEL sustituyen los valores por defecto de la cláusula PARALLEL para la definición de la tabla APPEND realiza la carga en modo directo (paralelizada) NOAPPEND realiza inserciones normales en modo serial
19
Grados de paralelismo El número ideal de procesos esclavos paralelos que trabajan sobre una sentencia viene determinado por los siguientes factores: Los valores DEGREE e INSTANCES especificados en la cláusula PARALLEL o en el hint El número de CPUs de la máquina y de instancias El número de particiones a ser accedidas El mínimo valor del parámetro FREELISTS (listas de transacciones libres) en la cláusula STORAGE de entre todos los índices globales a ser actualizados El número real de procesos está limitado por la disponibilidad de las instancias, y el mínimo se calcula a partir del parámetro PARALLEL_MIN_PERCENT
20
SELECT paralelo Las consultas se paralelizan cuando:
Hay un hint en la sentencia SELECT Se ha especificado la cláusula PARALLEL para la tabla Cuando se acceden a varias tablas, se elige de todas ellas el hint o valores PARALLEL que definan un mayor grado de paralelismo, como referencia para el grado total de paralelismo de la consulta
21
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
22
INSERT...SELECT...: Ejemplo
INSERT /*+PARALLEL(PEDIDO,3)*/ INTO PEDIDO SELECT /*+PARALLEL(PEDIDOS_PENDIENTES,5)*/ * FROM PEDIDOS_PENDIENTES; Suponemos que se ha activado el PDML Basado en las reglas de preferencia, el grado de paralelismo de la sentencia entera es 3
23
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
24
UPDATE/DELETE: Ejemplo
UPDATE /*+PARALLEL(PEDIDO,4)*/ PEDIDO SET PENDIENTE = ’F’; DELETE /*+PARALLEL(PEDIDO,4)*/ FROM PEDIDO WHERE NUM_PED > 600; Suponemos que se ha activado el PDML Basado en las reglas de preferencia, el grado de paralelismo de ambas sentencias es 4
25
Diccionario de datos El nuevo atributo de V$SESSION es PMDL_ENABLED que permite consultar si una sesión tiene habilitada el PDML V$SESSION SADDR SID USERNAME SCHEMANAME ... PDML_ENABLED SELECT STATISTIC, LAST_QUERY, SESSION_TOTAL FROM V$PQ_SESSTAT WHERE STATISTIC = ’DML Parallelized’; SELECT STATISTIC, VALUE FROM V$PQ_SYSSTAT WHERE STATISTIC = ’DML Initiated’; Se han añadido nuevas filas a V$PQ_SESSTAT para consultar las sentencias PDML
26
Opción LOGGING/NOLOGGING
Es posible desactivar el uso de redo log para ciertas operaciones paralelas, como INSERT...SELECT... para reducir el tiempo de proceso de la sentencia Se especifica a nivel del objeto (no de la sentencia) A nivel de tablespace, determina el valor por defecto para los objetos allí creados ALTER TABLE PEDIDO NOLOGGING;
27
PDML y segmentos de rollback
UPDATE /*+PARALLEL(PEDIDO,4)*/ PEDIDO SET PENDIENTE = ’F’; PE1 PE2 PE4 PE3 RS1 RS2 RS3 Cada proceso esclavo es tratado como una transacción independiente La atomicidad de la transacción original se consigue con un mecanismo de commit en dos fases que valida los cambios realizados por los procesos esclavos Con PDML no se admite el uso de la sentencia SET TRANSACTION USE ROLLBACK SEGMENT, así que no se puede controlar qué segmento de rollback se asigna a cada proceso esclavo
28
Restricciones generales
Cada operación PDML deben ser validada después de su ejecución, con un COMMIT o un ROLLBACK El soporte de las restricciones es limitado: si alguna se viola, la sentencia se ejecuta en serial (no da error) no se permiten: claves ajenas reflexivas, integridad referencial ON DELETE CASCADE, ni integridad diferida No se permite: PDML con LOCK TABLE o SELECT FOR UPDATE en la misma transacción, porque PDML realiza bloqueos exclusivos PDML sobre índices bitmap, tablas con LOB o tipos de objeto, tablas clusterizadas o con triggers activados INSERT paralelo sobre índices globales (evita auto-deadlocks) UPDATE paralelo sobre índices globales únicos
29
Recuperación en PDML Recuperación de transacción
Tras un fallo de una transacción PDML, SMON recupera en modo serial; mientras tanto, los recursos quedan bloqueados Para acelerar este proceso, se puede volver a ejecutar la sentencia PDML y después hacer COMMIT o ROLLBACK Recuperación de proceso Tras un fallo en un proceso esclavo, PMON hace rollback del trabajo de ese proceso, y otro proceso esclavo hace rollback de la operación completa Si fallan varios procesos esclavos, PMON cancela la operación completa de forma serial Si el proceso maestro falla, el PMON lo recupera y todos los procesos esclavos hacen rollback El ROLLBACK normal se realiza en paralelo
30
Resumen El paralelismo acelera las grandes operaciones DML sobre grandes tablas e índices Es fácil de usar, definiendo la cláusula PARALLEL a nivel de objeto, o con los hits para cada sentencia La afinidad es gestionada por el servidor El servidor también controla las transacciones Hay que tener cuidado con las restricciones
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.