Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/10/2011, 11:15
rogly
 
Fecha de Ingreso: octubre-2011
Mensajes: 3
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Ejecutar store procedure en paralelo

Hola Matanga,

El caso es el siguiente:

Tabla 1: distinct de campos de la tabla 2
Tabla 2: Tabla con transacciones donde se repiten varios registros con distintas transacciones a cualquier hora, un usuario que realiza varias llamadas en el dia por ejemplo.
Tabla 3: Saldos de dónde consume el cliente.
Tabla 4: Resultado de consumos identificando de dónde consume.

La tabla 1 tiene todos los usuarios que han realizado transacciones en la tabla 2 esto para no volver a leer un registro leido anteriormente. (Es un distinct de tabla 2, en la tabla 1 son registros únicos)

Proceso:

Tabla 1 entra a un while donde selecciona uno a uno los registros, registro 1 busca todas las transacciones en la tabla 2, almacena estos registros en una tabla temporal, realiza algunos cálculos dependiendo de los saldos de la TABLA 3, luego inserta en una nueva tabla TABLA 4 los resultados.

Despues regresa a buscar el registro 2 de la tabla 1 realiza lo mismo y regresa hasta terminar todos los registros de la tabla1.

Por eso el proceso es muy lento, y es la única forma de identificación, el store procedure funciona pero cuando son todos los registros se vuelve muy lento el tiempo de respuesta.


La tabla a la que "particioné" (Flag) es la tabla 1 y tiene la siguiente estructura:

Campo1,campo2,campo3,partition
aaa,bbbb,cccc,0
ddd,eee,ffffffff,0
ggg,hhh,iiiii,1
jjjj,kkkk,lllllll,1
.
.
xxx,yyy,zzz, 9


Envié como parámetro el campo partition para que busque uno a uno sólo los de su partición y ejecutar 10 veces el mismo procedure.

Leyendo lo que me aconsejas, encontré la siguiente sintaxis:

ALTER TABLE table_name PARALLEL (DEGREE 8);

en mi caso aplicaría el PARALLEL a la tabla 1


ALTER TABLE tabla1 PARALLEL (DEGREE 9);

dime DEGREE son las particiones de la tabla ???

De esta forma la tabla 1 estaría particionada?

en tu ejemplo:

fetch c1 bulk collect into t limit 100;
exit when t.count = 0;

aquí sólo lee de 100 en 100, cómo envío el parámetro al estore procedure aplicando PARALLEL o ya no es necesario ya que con la sentencia ya está particionado en 9 y leerá en grupos de 100??


Gracias por tu ayuda