es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Evita que MicroStrategy ejecute inserciones individuales en una tabla temporal.

Soy un DBA de SQL Server encargado de mejorar el rendimiento de nuestro entorno de MicroStrategy. No tengo capacitación en MicroStrategy.

He ejecutado el SQL Server Profiler y capturado un rastreo que muestra un informe que ejecuta una consulta que MicroStrategy almacena en una tabla temporal para su uso en consultas posteriores. Por ejemplo:

--Obviamente esta no es la consulta real - no creo que la consulta exacta sea importante
--Esto se ejecuta en un par de segundos
select CUSTOM<em>GRP</em>ID, GRP_COLOR
from table1 t1
join table2 t2 on t2.id = t1.id

<p>--MicroStrategy utiliza el resultado de la consulta anterior para realizar inserciones individuales
--Cada una de las declaraciones de inserción individual se ejecuta en milisegundos, pero hay un retraso entre las inserciones
create table #TFMWZF78HOP000(
    CUSTOM<em>GRP</em>ID   INTEGER, 
    GRP<em>COLOR   VARCHAR(20));
insert into #TFMWZF78HOP000 values (101196, '#5BBDFF');
insert into #TFMWZF78HOP000 values (101278, '#F11BAA');
... Se repite miles de veces con valores diferentes
insert into #TFMWZF78HOP000 values (100532, '#808000');
insert into #TFMWZF78HOP000 values (101798, '#FBD0BE');
create index #TFMWZF78HOP000</em>i on #TFMWZF78HOP000 (CUSTOM<em>GRP</em>ID, GRP_COLOR) ;</p>

<p>--MicroStrategy luego usa la tabla temporal #TFMWZF78HOP000 en otras consultas
<code>
Algunos de los casos más problemáticos involucran una consulta inicial que devuelve 100K filas que luego se insertan individualmente en una tabla temporal. Este proceso de inserción individual lleva varios minutos en lugar de utilizar un método "SELECT INTO" (que toma un par de segundos) como este:
</code>
select CUSTOM<em>GRP</em>ID, GRP_COLOR
into #TFMWZF78HOP000  --Esto inserta en una tabla temporal como un conjunto en lugar de inserciones individuales
from table1 t1
join table2 t2 on t2.id = t1.id

Sé que MicroStrategy puede utilizar la sintaxis anterior porque la he visto en otras consultas. ¿Hay algo que mis desarrolladores puedan hacer para utilizar este método de inserción única ya que tiene un rendimiento mucho mejor? Dudan en usar SQL libre porque dicen que causará problemas de mantenimiento.

¡Gracias!

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en MicroStrategy, sugiero explorar las opciones disponibles dentro de MicroStrategy para lograr mejoras de rendimiento deseadas en lugar de confiar únicamente en el SQL Server Profiler. Una solución potencial podría ser aprovechar la función Advanced SQL Engine dentro de MicroStrategy para optimizar la generación de código SQL para consultas específicas de informes.

    Además, tus desarrolladores podrían considerar el uso del concepto de unión previa para crear una tabla derivada que contenga los elementos de datos necesarios, los cuales luego se pueden utilizar en consultas posteriores. Este enfoque puede mejorar significativamente el rendimiento de las consultas al minimizar la cantidad de manipulación de datos que necesita ocurrir durante cada consulta individual.

    En cuanto al uso de Freeform SQL, si bien puede ser tentador utilizarlo para abordar problemas de rendimiento, es importante evaluar el impacto potencial en el mantenimiento frente a las ganancias a corto plazo. Tus desarrolladores deben considerar cuidadosamente si utilizar Freeform SQL se alinea con la arquitectura global de datos y con la estrategia a largo plazo de la organización.

    En resumen, recomendaría explorar las diversas características de optimización de rendimiento disponibles dentro de MicroStrategy y alentar a tus desarrolladores a considerar las implicaciones más amplias en la arquitectura de datos de cualquier cambio que realicen en sus consultas.

Comments are closed.