Crear indices para acelerar el build all GeneXus Ev2.

Desde hace 4 días, estoy haciendo la conversión de una KB que tiene mas de 9000 objetos especificables, desde GeneXus 9.0 a GeneXus X Evolution 2.

Realice una conversión de la KB, que tuvo algunos inconvenientes con el largo de los nombres de los atributos, y tuve que realizar un import/export.

Después de tener la KB en condiciones, trate de terminar un BUILD ALL. Los tiempos de  dicha operación, se hacían eternos, pues cada uno demoraba mas de 10 horas, algunos cancelaban por OutOfMemory, etc.

En un para de corridas del build all, decidi investigar un poco para ver si se podia acelerar algo el proceso.
La memoria del equipo estaba sobrada y tambien el procesador.

Hice un trace con el Profiler de SQLServer para ver bien que sentencias estaba ejecutando y luego use el Index Tuning Advisor para que me recomendara si se podian mejorar los indices para optimizar las consultas.

La salida fue el script de abajo.  Crea estadisticas e indices en la KB. Uselo bajo su propio riesgo.
En mi caso, me parece que quedo mas rapido, pero aun me falta hacer alguna prueba mas detallada.

Para aplicarlo, deberian abrir la base de datos de la KB (se puede llamar GX_KB_xxxxxx) y correrle las sentecias de abajo.

CREATE NONCLUSTERED INDEX [_dta_index_ModelEntityHistory_30_597577167__K6_K8_1_2_3_4_5_7_9] ON [dbo].[ModelEntityHistory] 
(
 [HistoryTimestamp] ASC,
 [HistoryOperationSource] ASC
)
INCLUDE ( [ModelId],
[EntityTypeId],
[EntityId],
[HistoryEntryId],
[HistoryOperation],
[HistoryEntityVersionId],
[HistoryUserId]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_597577167_6_3_7_2] ON [dbo].[ModelEntityHistory]([HistoryTimestamp], [EntityId], [HistoryEntityVersionId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_597577167_2_3_7_1] ON [dbo].[ModelEntityHistory]([EntityTypeId], [EntityId], [HistoryEntityVersionId], [ModelId])
go

CREATE STATISTICS [_dta_stat_597577167_6_2_3_1_4] ON [dbo].[ModelEntityHistory]([HistoryTimestamp], [EntityTypeId], [EntityId], [ModelId], [HistoryEntryId])
go

CREATE STATISTICS [_dta_stat_597577167_2_3_1_4_7_6] ON [dbo].[ModelEntityHistory]([EntityTypeId], [EntityId], [ModelId], [HistoryEntryId], [HistoryEntityVersionId], [HistoryTimestamp])
go

CREATE NONCLUSTERED INDEX [_dta_index_ModelEntityProperty_30_661577395__K1_K2_K3_K4] ON [dbo].[ModelEntityProperty] 
(
 [ModelId] ASC,
 [EntityTypeId] ASC,
 [EntityId] ASC,
 [ModelEntityPropertyId] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_661577395_4_2] ON [dbo].[ModelEntityProperty]([ModelEntityPropertyId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_661577395_2_3_4] ON [dbo].[ModelEntityProperty]([EntityTypeId], [EntityId], [ModelEntityPropertyId])
go

CREATE STATISTICS [_dta_stat_661577395_1_4_2] ON [dbo].[ModelEntityProperty]([ModelId], [ModelEntityPropertyId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_661577395_4_1_3] ON [dbo].[ModelEntityProperty]([ModelEntityPropertyId], [ModelId], [EntityId])
go

CREATE STATISTICS [_dta_stat_661577395_4_6_2_3_1] ON [dbo].[ModelEntityProperty]([ModelEntityPropertyId], [ModelEntityPropertyValueShort], [EntityTypeId], [EntityId], [ModelId])
go

CREATE NONCLUSTERED INDEX [_dta_index_ModelEntityVersion_30_725577623__K1_K2_K3_K4_K9_K8] ON [dbo].[ModelEntityVersion] 
(
 [ModelId] ASC,
 [EntityTypeId] ASC,
 [EntityId] ASC,
 [EntityVersionId] ASC,
 [ModelParentEntityId] ASC,
 [ModelParentEntityTypeId] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_725577623_3_1] ON [dbo].[ModelEntityVersion]([EntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_725577623_6_2] ON [dbo].[ModelEntityVersion]([ModelEntityVersionName], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_725577623_4_2] ON [dbo].[ModelEntityVersion]([EntityVersionId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_725577623_6_3_1] ON [dbo].[ModelEntityVersion]([ModelEntityVersionName], [EntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_725577623_9_2_3] ON [dbo].[ModelEntityVersion]([ModelParentEntityId], [EntityTypeId], [EntityId])
go

CREATE STATISTICS [_dta_stat_725577623_8_2_3_4] ON [dbo].[ModelEntityVersion]([ModelParentEntityTypeId], [EntityTypeId], [EntityId], [EntityVersionId])
go

CREATE STATISTICS [_dta_stat_725577623_1_2_3_6] ON [dbo].[ModelEntityVersion]([ModelId], [EntityTypeId], [EntityId], [ModelEntityVersionName])
go

CREATE STATISTICS [_dta_stat_725577623_1_5_2_3] ON [dbo].[ModelEntityVersion]([ModelId], [ModelEntityVersionTimestamp], [EntityTypeId], [EntityId])
go

CREATE STATISTICS [_dta_stat_725577623_1_4_8_2_9] ON [dbo].[ModelEntityVersion]([ModelId], [EntityVersionId], [ModelParentEntityTypeId], [EntityTypeId], [ModelParentEntityId])
go

CREATE STATISTICS [_dta_stat_725577623_2_3_8_9_1] ON [dbo].[ModelEntityVersion]([EntityTypeId], [EntityId], [ModelParentEntityTypeId], [ModelParentEntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_725577623_5_2_3_6_8_9_1] ON [dbo].[ModelEntityVersion]([ModelEntityVersionTimestamp], [EntityTypeId], [EntityId], [ModelEntityVersionName], [ModelParentEntityTypeId], [ModelParentEntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_725577623_3_2_4_9_8_1_5_6] ON [dbo].[ModelEntityVersion]([EntityId], [EntityTypeId], [EntityVersionId], [ModelParentEntityId], [ModelParentEntityTypeId], [ModelId], [ModelEntityVersionTimestamp], [ModelEntityVersionName])
go

CREATE STATISTICS [_dta_stat_1365579903_4_2] ON [dbo].[ModelEntityOutput]([OutputEntityVersionId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_1365579903_5_2_3] ON [dbo].[ModelEntityOutput]([OutputTypeId], [EntityTypeId], [EntityId])
go

CREATE STATISTICS [_dta_stat_1365579903_6_2_3_4] ON [dbo].[ModelEntityOutput]([OutputTypeVersion], [EntityTypeId], [EntityId], [OutputEntityVersionId])
go

CREATE STATISTICS [_dta_stat_1365579903_2_3_4_5] ON [dbo].[ModelEntityOutput]([EntityTypeId], [EntityId], [OutputEntityVersionId], [OutputTypeId])
go

CREATE STATISTICS [_dta_stat_1365579903_5_1_2_3] ON [dbo].[ModelEntityOutput]([OutputTypeId], [ModelId], [EntityTypeId], [EntityId])
go

CREATE STATISTICS [_dta_stat_1365579903_6_1_2_3_4] ON [dbo].[ModelEntityOutput]([OutputTypeVersion], [ModelId], [EntityTypeId], [EntityId], [OutputEntityVersionId])
go

CREATE STATISTICS [_dta_stat_1365579903_1_5_4_3_6] ON [dbo].[ModelEntityOutput]([ModelId], [OutputTypeId], [OutputEntityVersionId], [EntityId], [OutputTypeVersion])
go

CREATE STATISTICS [_dta_stat_533576939_5_1] ON [dbo].[ModelCrossReference]([FromEntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_533576939_4_2] ON [dbo].[ModelCrossReference]([FromEntityTypeId], [ToEntityTypeId])
go

CREATE STATISTICS [_dta_stat_533576939_3_1] ON [dbo].[ModelCrossReference]([ToEntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_533576939_9_1_4] ON [dbo].[ModelCrossReference]([ReferenceType], [ModelId], [FromEntityTypeId])
go

CREATE STATISTICS [_dta_stat_533576939_6_1_4] ON [dbo].[ModelCrossReference]([LinkType], [ModelId], [FromEntityTypeId])
go

CREATE STATISTICS [_dta_stat_533576939_2_1_4] ON [dbo].[ModelCrossReference]([ToEntityTypeId], [ModelId], [FromEntityTypeId])
go

CREATE STATISTICS [_dta_stat_533576939_5_2_3] ON [dbo].[ModelCrossReference]([FromEntityId], [ToEntityTypeId], [ToEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_4_5_6] ON [dbo].[ModelCrossReference]([FromEntityTypeId], [FromEntityId], [LinkType])
go

CREATE STATISTICS [_dta_stat_533576939_6_2_3_4] ON [dbo].[ModelCrossReference]([LinkType], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId])
go

CREATE STATISTICS [_dta_stat_533576939_3_2_4_5] ON [dbo].[ModelCrossReference]([ToEntityId], [ToEntityTypeId], [FromEntityTypeId], [FromEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_4_5_1_9] ON [dbo].[ModelCrossReference]([FromEntityTypeId], [FromEntityId], [ModelId], [ReferenceType])
go

CREATE STATISTICS [_dta_stat_533576939_1_4_5_6] ON [dbo].[ModelCrossReference]([ModelId], [FromEntityTypeId], [FromEntityId], [LinkType])
go

CREATE STATISTICS [_dta_stat_533576939_1_9_2_4_3] ON [dbo].[ModelCrossReference]([ModelId], [ReferenceType], [ToEntityTypeId], [FromEntityTypeId], [ToEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_7_2_3_4_5] ON [dbo].[ModelCrossReference]([LinkTypeDetailId], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_9_2_3_4_5_1] ON [dbo].[ModelCrossReference]([ReferenceType], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_533576939_9_2_3_4_5_6] ON [dbo].[ModelCrossReference]([ReferenceType], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId], [LinkType])
go

CREATE STATISTICS [_dta_stat_533576939_1_6_2_4_7_5] ON [dbo].[ModelCrossReference]([ModelId], [LinkType], [ToEntityTypeId], [FromEntityTypeId], [LinkTypeDetailId], [FromEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_8_2_3_4_5_6_7] ON [dbo].[ModelCrossReference]([LinkTypeInfo], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId], [LinkType], [LinkTypeDetailId])
go

CREATE STATISTICS [_dta_stat_533576939_4_5_2_3_6_7_1_9] ON [dbo].[ModelCrossReference]([FromEntityTypeId], [FromEntityId], [ToEntityTypeId], [ToEntityId], [LinkType], [LinkTypeDetailId], [ModelId], [ReferenceType])
go

CREATE STATISTICS [_dta_stat_533576939_1_6_2_4_9_7_5_8] ON [dbo].[ModelCrossReference]([ModelId], [LinkType], [ToEntityTypeId], [FromEntityTypeId], [ReferenceType], [LinkTypeDetailId], [FromEntityId], [LinkTypeInfo])
go

CREATE STATISTICS [_dta_stat_149575571_3_1] ON [dbo].[Entity]([EntityGuid], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_149575571_2_3_1] ON [dbo].[Entity]([EntityId], [EntityGuid], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_277576027_2_3] ON [dbo].[EntityVersion]([EntityId], [EntityVersionId])
go

CREATE STATISTICS [_dta_stat_277576027_3_1] ON [dbo].[EntityVersion]([EntityVersionId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_277576027_2_4_1] ON [dbo].[EntityVersion]([EntityId], [EntityVersionName], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_277576027_4_1_3_2] ON [dbo].[EntityVersion]([EntityVersionName], [EntityTypeId], [EntityVersionId], [EntityId])
go

go

CREATE NONCLUSTERED INDEX [_dta_index_ModelCrossReference_44_533576939__K1_K2_K3_K4_K5_K6_K7_K9_K8] ON [dbo].[ModelCrossReference] 
(
 [ModelId] ASC,
 [ToEntityTypeId] ASC,
 [ToEntityId] ASC,
 [FromEntityTypeId] ASC,
 [FromEntityId] ASC,
 [LinkType] ASC,
 [LinkTypeDetailId] ASC,
 [ReferenceType] ASC,
 [LinkTypeInfo] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_533576939_2_3] ON [dbo].[ModelCrossReference]([ToEntityTypeId], [ToEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_5_2_3] ON [dbo].[ModelCrossReference]([FromEntityId], [ToEntityTypeId], [ToEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_6_2_3_4] ON [dbo].[ModelCrossReference]([LinkType], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId])
go

CREATE STATISTICS [_dta_stat_533576939_1_9_2_4_3] ON [dbo].[ModelCrossReference]([ModelId], [ReferenceType], [ToEntityTypeId], [FromEntityTypeId], [ToEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_7_2_3_4_5] ON [dbo].[ModelCrossReference]([LinkTypeDetailId], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_4_2_3_5_1_9] ON [dbo].[ModelCrossReference]([FromEntityTypeId], [ToEntityTypeId], [ToEntityId], [FromEntityId], [ModelId], [ReferenceType])
go

CREATE STATISTICS [_dta_stat_533576939_1_6_2_4_7_5] ON [dbo].[ModelCrossReference]([ModelId], [LinkType], [ToEntityTypeId], [FromEntityTypeId], [LinkTypeDetailId], [FromEntityId])
go

CREATE STATISTICS [_dta_stat_533576939_9_2_3_4_5_6] ON [dbo].[ModelCrossReference]([ReferenceType], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId], [LinkType])
go

CREATE STATISTICS [_dta_stat_533576939_8_2_3_4_5_6_7] ON [dbo].[ModelCrossReference]([LinkTypeInfo], [ToEntityTypeId], [ToEntityId], [FromEntityTypeId], [FromEntityId], [LinkType], [LinkTypeDetailId])
go

CREATE STATISTICS [_dta_stat_533576939_4_5_2_3_6_7_1_9] ON [dbo].[ModelCrossReference]([FromEntityTypeId], [FromEntityId], [ToEntityTypeId], [ToEntityId], [LinkType], [LinkTypeDetailId], [ModelId], [ReferenceType])
go

CREATE STATISTICS [_dta_stat_533576939_1_6_2_9_4_7_5_8] ON [dbo].[ModelCrossReference]([ModelId], [LinkType], [ToEntityTypeId], [ReferenceType], [FromEntityTypeId], [LinkTypeDetailId], [FromEntityId], [LinkTypeInfo])
go

CREATE NONCLUSTERED INDEX [_dta_index_ModelEntityProperty_44_661577395__K1_K2_K3_K4_5] ON [dbo].[ModelEntityProperty] 
(
 [ModelId] ASC,
 [EntityTypeId] ASC,
 [EntityId] ASC,
 [ModelEntityPropertyId] ASC
)
INCLUDE ( [ModelEntityPropertyValue]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_661577395_4_2] ON [dbo].[ModelEntityProperty]([ModelEntityPropertyId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_661577395_3_2] ON [dbo].[ModelEntityProperty]([EntityId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_661577395_1_4_2] ON [dbo].[ModelEntityProperty]([ModelId], [ModelEntityPropertyId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_661577395_4_6_2_3] ON [dbo].[ModelEntityProperty]([ModelEntityPropertyId], [ModelEntityPropertyValueShort], [EntityTypeId], [EntityId])
go

CREATE STATISTICS [_dta_stat_661577395_2_3_4_1_6] ON [dbo].[ModelEntityProperty]([EntityTypeId], [EntityId], [ModelEntityPropertyId], [ModelId], [ModelEntityPropertyValueShort])
go

CREATE NONCLUSTERED INDEX [_dta_index_ModelEntityHistory_44_597577167__K6_K8_1_2_3_4_5_7_9] ON [dbo].[ModelEntityHistory] 
(
 [HistoryTimestamp] ASC,
 [HistoryOperationSource] ASC
)
INCLUDE ( [ModelId],
[EntityTypeId],
[EntityId],
[HistoryEntryId],
[HistoryOperation],
[HistoryEntityVersionId],
[HistoryUserId]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_597577167_8_6] ON [dbo].[ModelEntityHistory]([HistoryOperationSource], [HistoryTimestamp])
go

CREATE STATISTICS [_dta_stat_597577167_6_3_7] ON [dbo].[ModelEntityHistory]([HistoryTimestamp], [EntityId], [HistoryEntityVersionId])
go

CREATE STATISTICS [_dta_stat_597577167_3_2_7_6] ON [dbo].[ModelEntityHistory]([EntityId], [EntityTypeId], [HistoryEntityVersionId], [HistoryTimestamp])
go

CREATE STATISTICS [_dta_stat_597577167_2_3_7_1] ON [dbo].[ModelEntityHistory]([EntityTypeId], [EntityId], [HistoryEntityVersionId], [ModelId])
go

CREATE STATISTICS [_dta_stat_597577167_6_2_3_1_4] ON [dbo].[ModelEntityHistory]([HistoryTimestamp], [EntityTypeId], [EntityId], [ModelId], [HistoryEntryId])
go

CREATE STATISTICS [_dta_stat_597577167_2_3_1_4_7_6] ON [dbo].[ModelEntityHistory]([EntityTypeId], [EntityId], [ModelId], [HistoryEntryId], [HistoryEntityVersionId], [HistoryTimestamp])
go

CREATE NONCLUSTERED INDEX [_dta_index_ModelEntityVersion_44_725577623__K1_K2_K3_K4_K9_K8] ON [dbo].[ModelEntityVersion] 
(
 [ModelId] ASC,
 [EntityTypeId] ASC,
 [EntityId] ASC,
 [EntityVersionId] ASC,
 [ModelParentEntityId] ASC,
 [ModelParentEntityTypeId] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go

CREATE STATISTICS [_dta_stat_725577623_3_1] ON [dbo].[ModelEntityVersion]([EntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_725577623_1_3] ON [dbo].[ModelEntityVersion]([ModelId], [EntityId])
go

CREATE STATISTICS [_dta_stat_725577623_9_2_3] ON [dbo].[ModelEntityVersion]([ModelParentEntityId], [EntityTypeId], [EntityId])
go

CREATE STATISTICS [_dta_stat_725577623_4_2_3_9] ON [dbo].[ModelEntityVersion]([EntityVersionId], [EntityTypeId], [EntityId], [ModelParentEntityId])
go

CREATE STATISTICS [_dta_stat_725577623_6_2_3_1] ON [dbo].[ModelEntityVersion]([ModelEntityVersionName], [EntityTypeId], [EntityId], [ModelId])
go

CREATE STATISTICS [_dta_stat_725577623_1_8_3_9_4] ON [dbo].[ModelEntityVersion]([ModelId], [ModelParentEntityTypeId], [EntityId], [ModelParentEntityId], [EntityVersionId])
go

CREATE STATISTICS [_dta_stat_725577623_8_2_3_4_9_1_6] ON [dbo].[ModelEntityVersion]([ModelParentEntityTypeId], [EntityTypeId], [EntityId], [EntityVersionId], [ModelParentEntityId], [ModelId], [ModelEntityVersionName])
go

CREATE STATISTICS [_dta_stat_1365579903_4_2] ON [dbo].[ModelEntityOutput]([OutputEntityVersionId], [EntityTypeId])
go

CREATE STATISTICS [_dta_stat_1365579903_3_2_4] ON [dbo].[ModelEntityOutput]([EntityId], [EntityTypeId], [OutputEntityVersionId])
go

CREATE STATISTICS [_dta_stat_1365579903_6_2_3_4] ON [dbo].[ModelEntityOutput]([OutputTypeVersion], [EntityTypeId], [EntityId], [OutputEntityVersionId])
go

CREATE STATISTICS [_dta_stat_1365579903_5_2_3_4] ON [dbo].[ModelEntityOutput]([OutputTypeId], [EntityTypeId], [EntityId], [OutputEntityVersionId])
go

CREATE STATISTICS [_dta_stat_1365579903_1_5_3_6_2] ON [dbo].[ModelEntityOutput]([ModelId], [OutputTypeId], [EntityId], [OutputTypeVersion], [EntityTypeId])
go





Si alguien mas lo prueba, me gustaria que contara su experiencia en los comentarios

Comentarios

  1. Hola Enrique. Siempre leo con mucho interés tus blogs, especialmente porque sé que trabajas con KBs grandes.

    Personalmente me ha tocado enfrentar este problema motivado por haber participado en Bantotal que también es un producto que conserva un "core" pero tiene muchas personalizaciones para cada clientes.

    Inclusive en versiones anteriores de GX, se nos habían acabado la cantidad de atributos.

    Hace tiempo no me enfrento a estos casos, sin embargo siento la preocupación... Se hace todo "tan pesado" y eterno...

    No tengo que aportar sobre optimizaciones en el motor SQL... es más... me da miedo tener que perder el foco de la aplicación y lidiar con el motor a tan bajo nivel (quizás para alguien no GX no sea tan raro enfrentarse a estas cosas, pero nuestro microclima GX nos ha "bien"acostumbrado a focalizar en las aplicaciones y no tanto en el "bit y byte").

    Esto me hace llevar mi hilo de razonamiento hacia otro lado... ¿Es necesario tener KBs tan grandes? ¿No es mejor idea manejar varias KB (obviamente con toda la definición de tablas), pero segmentadas por módulos operativos?

    Claro, esto haría que dejaran de ser KBs "consolidadas".

    No he tenido ocasión de participar en las charlas de KBs grandes. ¿Te animas a contarnos un poco de las mismas en alguno de tus blogs? Imagino que yo no inventé la pólvora y tu habrás considerado el fraccionamiento. Por algo no lo hiciste. ¿Podrías compartirlo?

    Un abrazo,

    Daniel

    ResponderBorrar
  2. Daniel, como te va?
    En particular esta KB que estoy migrando, es una consolidada de 10 modulos (que son KB mas chicas).

    Para trabajar con modulos o KB chicas que se consolidan, hay que tener otras metodologias, que tambien agregan complicacion.

    En Concepto, tenemos proyectos donde se utiliza módulos (KB chicas que se consolidan) y otros que se trabaja sobre una sola KB que tiene todo. Depende del proyecto, del grupo de trabajo y de las características en si.

    Soy partidario de tener modularizadas las KB, pero debería ser algo que Genexus brinde en forma nativa. En la version Tilo, los modulos son un objeto mas dentro de la KB, y tengo esperanzas que solucionen gran parte de este problema. Con una buena modularizacion, el desarrollo deberia ser mas rapido, tambien seria mas facil de instalar y de entender la aplicacion o parte de ella.
    Tambien creo que podria minimizarse los riesgos de romper algo, cuando algo un cambio, pues seria facil controlar cuando algo afecta a objetos fuera de mi modulo.

    En fin, a mi me parece que las KB grandes, son consecuencia de grandes sistemas. GeneXus ya demostró que puede manejarlas. Ahora tendria que pasar a la etapa de ayudar a menejarlas con mayor control por parte del desarrollador.
    Creo que los modulos si son bien implementados son un gran paso en ese sentido.

    Concluyendo, prefiero KB chicas, pero no siempre son posibles.
    Si tengo KB grandes, tengo que hacer lo posible, para ser lo mas productivo que se pueda.

    Gracias por el comentario.

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.