Antecedentes:
tengo una tabla de hechos en la fase UAT. Objetivo cargar 5 años de datos en Prod (tamaño esperado 400 Mn registros). Actualmente solo tiene 2 años de datos en Test.
Características de la mesa:
- No de dimensiones ~ 45
- Medidas ~ 30
- Medidas no aditivas y otras columnas ~ 25
- Tamaño de datos actual ~ 200 millones (datos de 2 años)
- Vista de tiempo: 3 vistas de mes diferentes: Fiscal / Calendario / Ajustado (es decir, la misma fila puede caer en diferentes meses según la vista que se está buscando)
- Solo un usuario requerirá una vista a la vez. (es decir, solo se utilizará una columna de un mes en la consulta, nos impide realizar particiones en la vista de tiempo)
- Índices: 1 índice agrupado en las teclas naturales (8 columnas). Creó 3 que cubren los índices no agrupados, uno en la columna de cada mes, incluyendo pocos Dimension SK (FK) y todas las medidas).
- Los índices son enormes (un total de 190 GB) debido a esto.
- El espacio no es restricción (1 TB asignado)
- 64 GB de RAM disponibles en el servidor.
- Tabla de compresión también realizada.
Requisito: las
consultas en esta tabla de hechos deben dar resultado en 30 segundos (las consultas generales seleccionan la suma (medida) uniendo pocos grupos de Dims por valores de atenuación). Los informes se realizan directamente sobre esta tabla de hechos.
Problema:
cualquier consulta que incluya columnas disponibles en el Índice funciona bien, pero si incluimos cualquier otra columna que no esté incluida en el índice ... Es una mierda. Tarda más de 5-10 minutos. ¿Puede alguien sugerir alguna solución donde funcione bien para cualquier dimensión / columna que seleccionemos? ¿Index puede ver ayuda en esta situación?
fuente