Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Actualizar mas de 1 millon de registros

Estas en el tema de Actualizar mas de 1 millon de registros en el foro de Oracle en Foros del Web. Hola buen dia!! Soy nueva en el tema de Oracle y resulta que tengo una tabla que se tiene que actualizar en unos campos, solo ...
  #1 (permalink)  
Antiguo 03/04/2014, 19:27
 
Fecha de Ingreso: abril-2014
Mensajes: 1
Antigüedad: 10 años
Puntos: 0
Actualizar mas de 1 millon de registros

Hola buen dia!!

Soy nueva en el tema de Oracle y resulta que tengo una tabla que se tiene que actualizar en unos campos, solo como tiene mas de millon y medio de registros... lo he probado con un simple update y tarda todo el dia si no es que tarda mas para uno solo y en conjunto serian 8 updates, estuve leyendo algo acerca de BULK COLLECT pero no le entiendo mucho... Por lo cual les pido un poquito de ayuda para entender esta sentencia y ver si mejora el tiempo en el cual actualiza todos los registros.


Esta es un ejemplo de las sentencias

Código SQL:
Ver original
  1. UPDATE tabla_P
  2.         SET CTfecha = (SELECT DIM_TIME.PK_TimeKey FROM DIM_TIME WHERE
  3. CAST(tabla_P.FECHA AS TIMESTAMP)>=DIM_TIME.FullDateAlternateKey AND CAST(tabla_p.FECHA AS TIMESTAMP) <
  4. (DIM_TIME.FullDateAlternateKey + 30/(24*60)) )
  5.  
  6. WHERE id = id

Entiendo que primero hace como algun barrido uno por uno para actualizarlo o desconozco como funcione.

Agradezco su ayuda

Última edición por gnzsoloyo; 03/04/2014 a las 20:04
  #2 (permalink)  
Antiguo 04/04/2014, 07:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Actualizar mas de 1 millon de registros

Buen día chely11

Haciendo uso de bulk colect o forall efectivamente mejora mucho el performance de la operación.
Pero mirando tu sentencia, tiene mucho que ver la consulta que utilizas al interior del UPDATE.

Código SQL:
Ver original
  1. SELECT DIM_TIME.PK_TimeKey FROM DIM_TIME WHERE
  2. CAST(tabla_P.FECHA AS TIMESTAMP)>=DIM_TIME.FullDateAlternateKey AND CAST(tabla_p.FECHA AS TIMESTAMP) <
  3. (DIM_TIME.FullDateAlternateKey + 30/(24*60))

Yo empezaría analizando el plan de ejecución de esta consulta y mirando cuanto tarda normalmente su ejecución. Hipoteticamente si la consulta tarda tan solo 2 segundos, si mutiplicas esto por 1500000, vas a tener un proceso que podría tardar 3000000 de segundos equivalente a algo mas de 34 días.

Bajo este escenario, ni utilizando bulk collect ni forall vas a tener mejorias muy relevantes.

Si gustas, puedes publicar aca el plan de ejecución de la consulta y adicional el plan de ejecución del UPDATE completo

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: registro, registros, select, tabla, tarda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:45.