
Consultas ejecutivas sobre en una DB de mision critica
Publicado por HK (8 intervenciones) el 04/09/2016 15:43:19
Tengo una DB que pesa casi 70 Gb, tiene un alto nivel transaccional y un numero considerable de usuarios concurrentes todos los días; por lo que su consumo de memoria es considerable también. El servidor dispone de 32 Gb RAM sin restricción para SQL server.
Sobre esta DB se requieren aplicar procesos de business intelligence para obtener consultas ejecutivas para la toma de decisiones; hemos logrado varias de estas consultas mediante el siguiente esquema: tabla en producción -> vistas (para no trabajar con datos de producción) -> procedimientos almacenados -> funciones -> regreso a vistas, los procedimientos almacenados son llamados por un front-end desarrollado específicamente para mostrar esta informacion.
El tipo de consultas es p.ej:
Ventas por día: tabla ventas - tabla ventas detalle - grupo de artículos (agrupado por fecha)
Ventas por tipo de artículos: tabla ventas - tabla ventas detalle - grupo de artículos (agrupado por catalogo de artículos)
Ventas por mes: tabla ventas - tabla ventas detalle - grupo de artículos (agrupados por días del mes)
Ventas por sector, ventas por tienda, etc. Todas las consultas cruzan datos con "join"
La tabla ventas detalle cuenta con mas de 5 millones de registros; al filtrar en las vistas se procesan 250 mil registros en promedio según la consulta (procedimiento almacenado) que sea ejecutada, el front-end recibe un máximo de 90 registros para mostrar.
Cuando este esquema opera, el consumo de memoria se dispara de inmediato y consume casi el total disponible en minutos. Este es el motivo de la consulta, estamos abiertos a escuchar sugerencias sobre el esquema (que no sabemos si es el idóneo), sabemos que una sentencia "select" mal escrita o pobremente escrita es desastrosa en el uso de recursos.
Gracias desde ya por sus opiniones y comentarios.
Sobre esta DB se requieren aplicar procesos de business intelligence para obtener consultas ejecutivas para la toma de decisiones; hemos logrado varias de estas consultas mediante el siguiente esquema: tabla en producción -> vistas (para no trabajar con datos de producción) -> procedimientos almacenados -> funciones -> regreso a vistas, los procedimientos almacenados son llamados por un front-end desarrollado específicamente para mostrar esta informacion.
El tipo de consultas es p.ej:
Ventas por día: tabla ventas - tabla ventas detalle - grupo de artículos (agrupado por fecha)
Ventas por tipo de artículos: tabla ventas - tabla ventas detalle - grupo de artículos (agrupado por catalogo de artículos)
Ventas por mes: tabla ventas - tabla ventas detalle - grupo de artículos (agrupados por días del mes)
Ventas por sector, ventas por tienda, etc. Todas las consultas cruzan datos con "join"
La tabla ventas detalle cuenta con mas de 5 millones de registros; al filtrar en las vistas se procesan 250 mil registros en promedio según la consulta (procedimiento almacenado) que sea ejecutada, el front-end recibe un máximo de 90 registros para mostrar.
Cuando este esquema opera, el consumo de memoria se dispara de inmediato y consume casi el total disponible en minutos. Este es el motivo de la consulta, estamos abiertos a escuchar sugerencias sobre el esquema (que no sabemos si es el idóneo), sabemos que una sentencia "select" mal escrita o pobremente escrita es desastrosa en el uso de recursos.
Gracias desde ya por sus opiniones y comentarios.
Valora esta pregunta


0