Ventajas de programación basada en modelos : Cambios al migrar a GeneXus X ev2.

Estaba revisando un tema de performance en la base de datos, de una aplicación generada con GeneXus 9.0.

La misma no tenia problemas de performance grande, pero los administradores de la base de datos pedían que se utilizara BINDING para mejorar el ratio del cache de sentencias en la base de datos.

Para hacer pruebas cree una KB en 9.0 con dos tablas (Clientes y Facturas) y un webpanel con una grilla de 10 renglones, que traia algunos datos de las tablas con un join, con condiciones con un when y ordenados

 

La misma generaba la sentencia:

SELECT T1.[FactImporte], T1.[FactId], T1.[FacFecha], T2.[CliNom], T1.[CliId] 
FROM ([FACTURA] T1 WITH (FASTFIRSTROW NOLOCK) INNER JOIN [CLIENTE] T2 WITH (NOLOCK) ON T2.[CliId] = T1.[CliId])
WHERE  (T1.[FactImporte] >  100) 
ORDER BY T1.[FactImporte] DESC
 

Para hacer pruebas, también la migre a la GeneXus X Evolution 2 y generó la sentencia.


 

SELECT * FROM 
(
  SELECT  T1.[FactImporte], T1.[FactId], T1.[FacFecha], T2.[CliNom], T1.[CliId], ROW_NUMBER() 
  OVER ( ORDER BY T1.[FactImporte] DESC ) AS GX_ROW_NUMBER 
  FROM ([FACTURA] T1 WITH (NOLOCK) INNER JOIN [CLIENTE] T2 WITH (NOLOCK) ON T2.[CliId] = T1.[CliId]) 
  WHERE  (T1.[FactImporte] > @AV6FactImporte)
) AS GX_CTE 
WHERE GX_ROW_NUMBER BETWEEN @GXPagingFrom2 AND @GXPagingTo2 OR @GXPagingTo2 < @GXPagingFrom2 AND GX_ROW_NUMBER >= @GXPagingFrom2 
OPTION (FAST 11)

Sin hacer ningún cambio en el objeto, la sentencia tiene muchas diferencias. En primer lugar, la primer sentencia trae todos los registros que cumplen la condición y la segunda solamente trae los registros que tiene que mostrar, mejorando mucho el trafico entre el servidor web y la base de datos. También baja mucho el uso de la CPU en el servidor WEB. 


Otra diferencia, en la sentencia de GX 9.0 se generaba el SQL dinámico y se ponía el valor de las variables en la sentencia, lo que hacia que no se pudiera reutilizar los planes de ejecución en la base de datos y también tenia que recompilar la sentencia para cada valor diferente ingresado por el usuario. En el caso de la X Ev2, las variables figuran en la sentencia, dejando con esto contentos a los DBA y mejorando la performance si la consulta se realiza muchas veces.


Esta es una de las ventajas de migrar de la 9.0 a la X, que mejorar la escalabilidad de las aplicaciones y posiblemente la performance (en algunos casos). Si pensamos que esta mejora se tiene para todas las grillas de la aplicación, sin mayor costo que el migrarse, se puede ver las ventajas de tener un modelo de nuestra aplicación y tener un generador que mejora con el tiempo.

Comentarios

Entradas más populares de este blog

El Sordo

StackOverflow Documentation

Codigo simple