sql server - vista - ¿Cómo reconstruyo periódicamente una tabla de informes a la que se accede con frecuencia?
sql server caracteristicas (4)
En nuestro proyecto, utilizamos dos tablas y Crear / Modificar vista para cambiar.
Se tarda unos 5-10 minutos en actualizar una tabla de informes preparados. Queremos actualizar esta tabla constantemente (tal vez una vez cada 15 minutos o continuamente).
Consultamos esta tabla de informes con mucha frecuencia (muchas veces por minuto) y no puedo mantenerla inactiva durante un período de tiempo prolongado. Está bien si los datos tienen 15 minutos de antigüedad.
No puedo dejar caer la mesa y volver a crearla. No puedo eliminar los contenidos de la tabla y volver a crearla.
¿Hay alguna técnica que deba usar, como intercambiar dos tablas (leer de una mientras construimos la otra) o poner este proceso de 5-10 minutos en una transacción grande?
Sí, debe intercambiar tablas, y si aún no lo hizo, considere usar un servidor diferente u otra partición física para la tabla de informes.
El enfoque recomendado para la generación de informes casi en tiempo real es descargar las lecturas del sistema operativo y separar la actividad de escritura de la actividad de lectura en el sistema de informes.
Has hecho la primera parte, al menos lógicamente, al tener una mesa preparada. El intercambio entre una tabla de solo lectura para los usuarios y una tabla separada para las actualizaciones elimina los conflictos de escritura y lectura entre las transacciones. El costo es la latencia de caché para los usuarios, pero si es necesario, debería ser posible realizar los pasos necesarios para minimizar el tiempo de preparación y cambiar las tablas con mayor frecuencia.
Para obtener más información sobre opciones de diseño en informes en tiempo real, recomiendo un documento bien escrito de Wayne Eckerson, Mejores prácticas en BI operacional .
Tener dos tablas parece ser la solución más simple.
Use sinónimos? . En la creación esto apunta a la tabla A.
CREATE SYNONYM ReportingTable FOR dbo.tableA;
15 minutos después, crea tableB y redefine el sinónimo
DROP SYNONYM ReportingTable;
CREATE SYNONYM ReportingTable FOR dbo.tableB;
El sinónimo es simplemente un puntero a la tabla actual: de esta manera, el manejo de la tabla real cambia el nombre, etc. se simplifica y se abstrae y todos los códigos / clientes utilizarían ReportingTable
Editar, 24 de noviembre de 2011
Los sinónimos están disponibles en todas las ediciones: el cambio de partición es Enterprise / Developer solamente.
Editar, Feb 2012
Puede cambiar tablas completas en edición estándar (quizás Express, no probado)
ALTER TABLE .. SWITCH ..
Esto sería más elegante que los sinónimos si la tabla objetivo está vacía.
Editar, feb 2012 (2)
Además, puede rotar mediante esquemas como Almacenamiento en caché de tablas unidas en SQL Server