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

Truncate table o Delete

Estas en el tema de Truncate table o Delete en el foro de Oracle en Foros del Web. Buenas, quisiera preguntar un tema que tengo una curiosidad: Tengo 2 esquemas de base de datos A y B A tiene la tabla 1 y ...
  #1 (permalink)  
Antiguo 21/11/2011, 15:50
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Truncate table o Delete

Buenas,

quisiera preguntar un tema que tengo una curiosidad:

Tengo 2 esquemas de base de datos A y B
A tiene la tabla 1
y B tambien tiene la tabla 1

la tabla1 de B se carga de la siguiente forma
a) se trunca la tabla
b) se insertan todos los registros de la tabla 1 de A en tabla 1 de B

es decir se replica se forma completa...

la pregunta es, que pasa con los indices?
porque es mas lento acceder a B si son los mismos datos?

obviamente se hace un rebuild y se mejoran, pero es posible que en vez de truncate usara DELETE no seria necesario hacer el rebuild?

Agradezco a los q me asesoren...

Saludos.
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #2 (permalink)  
Antiguo 22/11/2011, 07:32
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Truncate table o Delete

Al hacer un truncate no es necesario hacer un rebuild de los indices, con un delete es posible que si.

Si haces un insert masivo es muy recomendable hacerlo con el hint append : /*+ append */ ,así los datos te los va a meter en bloques contigüos y los accesos van a ser mas rápidos ( creo que hay que poner el tablespace o la tabla en NOLOGGIN para que sea eficaz el APPEND.
Otra cosa que deberías hacer es una vez que has cargado la tabla es tirar las estadisticas completas a la tabla y a los indices ( COMPUTE STATISTICS )
Y tambien revisa los tablespaces de datos y de indices, es posible que el tablespace correspondiente esté muy fragmentado, no recuerdo si se desfragmentan con el SHRINK o COALESCE
  #3 (permalink)  
Antiguo 22/11/2011, 07:38
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Respuesta: Truncate table o Delete

Gracias te agradezco el dato,
pero mis preguntas son:

-el estar truncando la tabla e insertando todos los datos puede hacer que los indices no tomen?
-se recomienda ejecutar estadisticas una vez realizado el truncate-insert?
-Por lo que lei los tiempos de las estadisticas pueden demorar de acuerdo a la cantidad de datos.
-y la pregunta principal, cual es la diferencia entre estadisticas y el rebuild

De antemano... gracias..
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #4 (permalink)  
Antiguo 22/11/2011, 09:35
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Truncate table o Delete

Por partes :

el estar truncando la tabla e insertando todos los datos puede hacer que los indices no tomen?

No debería.

se recomienda ejecutar estadisticas una vez realizado el truncate-insert?

Se recomienda tirarlas de manera regular, sobre todo en las BBDD de producción.

Por lo que lei los tiempos de las estadisticas pueden demorar de acuerdo a la cantidad de datos.

Obvio. No es lo mismo tirar estadísticas en una tabla de 100.000 registros que en una de 10.000.000

la pregunta principal, cual es la diferencia entre estadisticas y el rebuild

Aquí te contesto yo con otra pregunta ¿tienes claro lo que son las estadísticas y lo que es el rebuild de un índice?
  #5 (permalink)  
Antiguo 22/11/2011, 09:39
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Respuesta: Truncate table o Delete

Buena pregunta, la verdad que pensé solo en el rebuild como para regenerar los indices, por ende, no tengo claro que son.
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #6 (permalink)  
Antiguo 22/11/2011, 18:43
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Truncate table o Delete

Además de los posts correctos de jc3000, se puede agregar:

1. Truncate vs. Delete

El truncate es más rápido, libera el espacio de la tabla y los índices, pero solo sirve para borrar todas las filas, es decir, no tiene condición where, no se puede usar cuando la tabla está referenciada por una FK y al ser una sentencia DDL, no se puede hacer un rollback para deshacer la operación.

El delete es más lento, no libera el espacio de la tabla y por cada fila que se borra se ejecuta una tarea de mantenimiento sobre los índices, es más útil para eliminar datos parciales, además valida la integridad referencial y permite hacer rollback para deshacer la operación.

2. Rebuild de indices

Reconstruye el índice, sirve para desfragmentar el espacio utilizado (problema que se da cuando la tabla tiene muchas operaciones de insert/delete) o para mover el índice a otro tablespace, el mito de que un rebuild favorece el rendimiento de las consultas ya fue descartado.

3. Estadísticas

Es la información sobre el contenido y espacio de tablas e índices (cantidad de filas, valores nulos, etc), se almacenan en el diccionario del sistema y las utiliza el optimizador en cada consulta SQL para generar el plan de ejecución. Se deben actualizar en función de los datos, no del tiempo, es decir, cuanto mayor sea el volumen de datos modificados (como tu ejemplo de replicar) o la cantidad de operaciones insert/delete/update, mayor frecuencia de actualización. Para más info, puedes buscar por el paquete dbms_stats.

En tu caso particular, es más viable el truncate, además puedes optimizar el proceso y evitar los rebuild innecesarios con los pasos:

1. truncate table B.tabla1
2. drop de todos los índices de la tabla B.tabla1 (la carga de datos es más rápida cuando no hay índices)
3. insert into B.tabla1 select * from A.tabla1 (si el servidor tiene varios procesadores, te puedes beneficiar con el hint parallel)
3. create de todos los índices de la tabla B.tabla1 (esta operación tarda lo mismo que un rebuild)
4. dbms_stats.gather_table_stats('B','TABLA1') (comando para actualizar las estadísticas de la tabla y sus índices)

Saludos
  #7 (permalink)  
Antiguo 23/11/2011, 07:34
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Truncate table o Delete

Buen complemento, matanga

:)
  #8 (permalink)  
Antiguo 24/08/2012, 14:40
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Respuesta: Truncate table o Delete

No habia visto la respuesta, me parecio muy interesante, les agradezco la ayuda...
saludos.
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!

Etiquetas: delete, tabla, table
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:34.