martes 29 de enero de 2008

7. Procesamiento Paralelo en Oracle (II). Operaciones que soportan Paralelismo

Existe un alto grado de afinidad entre el paralelismo y el particionamiento en Oracle, pues se usa el mapeo partición-dispositivo. Este es un nuevo beneficio de las tablas particionadas.

Consulta paralela: soporta paralelismo dentro de una partición, pero se puede usar también en tablas no particionadas.

Nuevas opciones, paralelizadas por partición (no hay paralelismo dentro de cada partición):
  1. INSERT... SELECT... con carga directa sobre tablas particionadas.
  2. DELETE sobre tablas particionadas.
  3. UPDATE sobre tablas particionadas.
  4. INSERT... SELECT... con carga directa sobre tablas no particionadas.
Las operaciones paralelas siempre tienen un proceso maestro que coordina los procesos esclavos. El tipo de operación determina cuándo y cómo se paraleliza la operación. Existen tres métodos de paralelización:
  • Por rangos de rowid (sólo consultas paralelas): Se aplica a consultas de tablas particionadasy no particionadas. Proporciona paralelismo dentro de una partición: variosprocesos esclavos pueden estar accediendo a una partición
  • Por procesos esclavos (INSERT en tablas no particionadas): Se aplica sólo enROWID, las filas se distribuyen entre los procesos paralelos que insertan en sendos segmentos temporales. Posteriormente, se asigna a cada fila de los segmentos temporales un rowid, y se mueven a la tabla destino tras la HWM. Ejemplo:
    INSERT...SELECT... sobre tablas no particionadas. Como las nuevas filas no tienen
INSERT /*+PARALLEL(TABLA1,3)*/ INTO TABLA2 SELECT * FROM TABLA1;
  • Por partición (sólo 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. Ejemplo, suponiendo que la tabla “pedido” está particionada:
UPDATE /*+PARALLEL(PEDIDO,3)*/ PEDIDO SET PENDIENTE = ʼFʼ;

Por defecto, el paralelismo está desactivado, pudiéndose hacer sólo consultas paralelas.

  • La sentencia ALTER SESSION ENABLE PARALLEL DML, 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 continúa en serial.
  • El nuevo atributo de V$SESSION, PMDL_ENABLED, permite consultar si una sesión tiene habilitada el PDML. V$PQ_SESSTAT da información de las sentencias PDML.