Tengo una tabla en una base de datos de SQL Server 2005 que se usa mucho. Tiene nuestra información de disponibilidad del producto a mano. Recibimos actualizaciones cada hora desde nuestro almacén y durante los últimos años hemos estado ejecutando una rutina que trunca la tabla y actualiza la información. Esto solo lleva unos segundos y no ha sido un problema, hasta ahora. Tenemos mucha más gente que usa nuestros sistemas que consultan esta información ahora y, como resultado, estamos viendo muchos tiempos de espera debido a procesos de bloqueo.¿Cuál es la mejor manera de actualizar datos en una tabla mientras está en uso sin bloquear la tabla?
... así ...
investigamos nuestras opciones y han llegado con una idea para mitigar el problema.
- Tendríamos dos tablas. Tabla A (activa) y tabla B (inactiva).
- Creamos una vista que apunta a la tabla activa (tabla A).
- Todas las cosas que necesitan esta información de tablas (4 objetos) ahora tendrían que pasar por la vista.
- La rutina por hora truncaría la tabla inactiva, la actualizaría con la información más reciente y luego actualizaría la vista para apuntar a la tabla inactiva, convirtiéndola en la activa.
- Esta rutina determinará qué tabla está activa y básicamente cambiará la vista entre ellos.
¿Qué pasa con esto? ¿Cambiar la vista a mitad de la consulta causará problemas? ¿Puede esto funcionar?
Gracias por su experiencia.
Información adicional
la rutina es un paquete SSIS que peforms muchos pasos y, finalmente trunca/actualiza la tabla en cuestión
Los procesos de bloqueo son otros dos procedimientos almacenados que consultan este mesa.
si tiene las licencias, dos servidores con equilibrio de carga separada podría proporcionar una alternativa perfecta. Mantiene uno en vivo y actualiza el otro y luego cambia. –