Se puede usar un registro de vista materializada (MV) para permitir que un MV realice una actualización rápida que solo modifica los datos que han cambiado. Sin embargo, varias condiciones impiden que el MV use el registro y, por lo tanto, requieren una actualización completa. Oracle implementó una actualización completa atómica como una eliminación e inserción de cada registro. Lo hace incluso si finalmente no hay cambios en los datos.
¿Hay alguna manera de hacer que esta replicación sea inteligente con respecto a la generación de rehacer ? Un MERGE seguido de DELETE requiere consultar la fuente dos veces. ¿Valdría la pena recopilar datos de forma masiva para hacer una BULK MERGE y DELETE? ¿Hay una mejor manera?
Actualizar:
Exploré el uso de una tabla temporal global como área de preparación. Aunque usan menos de la mitad del rehacer, todavía usan demasiado.
fuente
insert
ops generan mucho menos de deshacer quedelete
oupdate
ops (casi ninguno, de hecho). Tener múltiples gtts para evitar operaciones costosas podría ser un buen enfoqueinsert
s. Esto coincide estrechamente con los resultados que estoy viendo y es mejor, pero no tan bueno como me gustaría.append
sugerencia) no son condiciones ideales para reducir el rehacer: he realizado algunas pruebas para mostrar lo que quiero decir. Publicado como respuesta porque no cabe en un comentarioRespuestas:
Esto solo pretende demostrar el uso de rehacer varias
insert
operaciones en lugar de responder a la pregunta completa. Los resultados en mi instancia de 10g no son 100% deterministas, pero el panorama general se mantuvo igual cada vez que lo encontré.Para las tablas de montón, no sé por qué
insert /*+ append */
generaron más rehacer.banco de pruebas:
prueba:
resultado:
fuente
Buena pregunta. "Resolví" este problema para mi situación hace un tiempo haciendo que los MV's y cualquier índice sobre ellos NOLOGGARA. No tenía sentido mi situación: estaba haciendo una actualización completa de la vista de todos modos, ¿por qué necesitaría rehacer?
fuente