Comprimir una KB GeneXus.

Guscarr proponía utilizar la tarea CheckKnowledgeBase, para desfragmentar los índices y corregir errores internos de la KB.

Viendo la dll de la tarea msbuild, encontré una opción para comprimir la KB en la tarea OpenKnowledgeBase, que no está documentada y creo que puede ser útil para KB que tengan varios años de funcionamiento. 

NOTA: El OpenKnowledgeBase tiene otra opcion EventSuspend que tampoco esta documentada y no se bien para que sirva. Si logro descubrirlo, actualizo este post. 

Para lograrlo hice un archivo "CheckKnowledgeBase.msbuild" cuyo contenido es:

<Project DefaultTargets="UpdateFromServerAndBuildAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Import Project="$(GXDir)\Genexus.Tasks.targets" />
 <Target Name="OpenKnowledgeBase">
   <OpenKnowledgeBase Directory="$(KBDir)" CompressData="True"  EventsSuspended="True" />
 </Target>
 <Target Name="CheckKnowledgeBase" DependsOnTargets="OpenKnowledgeBase">
   <CheckKnowledgeBase Fix="true" />
 </Target>
</Project>

 hice un archivo de comandos "CompressKB.CMD" que tiene

Los valores marcados con amarillo, hay que cambiarlos para que tengan los correspodientes a sus instalaciones


@echo off

echo ------------------------------------------
echo ---     %~n0%~x0          ----------
echo ---     Parameters        ----------------
set dirFramework="C:\Windows\Microsoft.NET\Framework\v3.5"
set GXDir="C:\Program Files (x86)\Artech\GeneXus\GeneXusXEv2U6"
echo ---     Ask KB Directory  ----------------
set /p KBDir=Enter Knowledge Base Directory :  
echo ---     Check/Compress KB ----------------

call %dirFramework%\MSBuild /nologo CheckKnowledgeBase.msbuild /p:KBDir=%KBDir%;GXDir=%GxDir% /t:CheckKnowledgeBase

echo ---     End               ----------------
echo ------------------------------------------
pause

Al ejecutarlo, los pasos que hará seran:
  • Abrir la KB
  • Comprimir sus datos
  • Si hay indices fragmentados, defragmentarlos
  • Corregir errores internos de la KB 
La salida sera similar a esta:

------------------------------------------
---     CompressKB.cmd          ----------
---     Parameters        ----------------
---     Ask KB Directory  ----------------
Enter Knowledge Base Directory :  C:\Models\Ev2\KBUnificada
---     Check/Compress KB ----------------
Build started 2015-03-14 23:04:26.
Project "C:\Models\Tools\location\CheckKnowledgeBase.msbuild" on node 0 (CheckK
nowledgeBase target(s)).
  ========== Open Knowledge Base Task started ==========
  Compressing Knowledge Base Data (this may take several minutes!)...
  success.
  > Open Knowledge Base Task Success
  ========== Open Knowledge Base Task finished ==========
CheckKnowledgeBase:
  ========== Check Knowledge Base started ==========
C:\Models\Tools\location\CheckKnowledgeBase.msbuild : warning : "Fix" parameter
 specified. Running checks and fixing issues.

  Step 1: Check KnowledgeBase's database integrity
  Index 'PK__ATTRIBUT__365FF6B17F3DEA93' in table 'ATTRIBUTE' is slightly fragm
  ented. Reorganizing this index may improve fragmentation.
  Index 'ATT_SUBTYPE' in table 'ATTRIBUTE' is highly fragmented and should be r
  ebuilt. Rebuilding this index may take some time but reduces fragmentation an
  d improves index performance.
  Index 'PK__CK__E706FD3D5408F3B7' in table 'CK' is highly fragmented and shoul
  d be rebuilt. Rebuilding this index may take some time but reduces fragmentat
  ion and improves index performance.
  Index 'PK__CK_ATRI__FC12A9AA816CD0FC' in table 'CK_ATRI' is highly fragmented
   and should be rebuilt. Rebuilding this index may take some time but reduces
  fragmentation and improves index performance.
  Index 'CKA_ATTRI' in table 'CK_ATRI' is highly fragmented and should be rebui
  lt. Rebuilding this index may take some time but reduces fragmentation and im
  proves index performance.
......
  Composition versioning fixed.
  Step 1 finished. 00:00:03.0693747 elapsed.
  28 issue(s) found, 28 fixed.

  Step 2: Check Entity Version Composition
  Step 2 finished. 00:00:00.2336572 elapsed.
  0 issue(s) found, 0 fixed.

  Step 3: Check Entity Redundant Information
  Step 3 finished. 00:00:00.6322822 elapsed.
  0 issue(s) found, 0 fixed.

  Step 4: Check Subtype Inheritance
  Step 4 finished. 00:00:01.9499611 elapsed.
  0 issue(s) found, 0 fixed.

  Step 5: Check ModelEntityProperty Redundant Information
  Checking properties redundancies issues in version KBUnificada
  Fixing properties redundancies in all objects in version KBUnificada
  Step 5 finished. 00:00:54.9963817 elapsed.
  0 issue(s) found, 0 fixed.

  Step 6: Check LastObjectId and LastVersionId enumerators
  Step 6 finished. 00:00:00.1020560 elapsed.
  0 issue(s) found, 0 fixed.
  > CheckKnowledgeBase Success
  ========== CheckKnowledgeBase finished ==========
Done Building Project "C:\Models\Tools\location\CheckKnowledgeBase.msbuild" (Ch
eckKnowledgeBase target(s)).


Build succeeded.

"C:\Models\Tools\location\CheckKnowledgeBase.msbuild" (CheckKnowledgeBase targe
t) (1) ->
(CheckKnowledgeBase target) ->
  C:\Models\Tools\location\CheckKnowledgeBase.msbuild : warning : "Fix" paramet
er specified. Running checks and fixing issues.

    1 Warning(s)
    0 Error(s)

Time Elapsed 00:01:45.66
---     End               ----------------
------------------------------------------
Press any key to continue . . .

Luego de ejecutarla la KB estará en mejor estado para hacer los build all en menos tiempo y posiblemente con menos problemas. 


UPDATE: Guscarr me hace notar que hay documentación sobre la opcion CompressData en el siguiente SAC.




Comentarios

Entradas más populares de este blog

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

Aplicación monolítica o distribuida?

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