Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{scrollbar}

Al ejecutar una consulta con el driver jdbc de MySQL el comportamiento normal es que devuelve la información luego de terminada la consulta a la BD.

En el caso de extraer una gran cantidad de información se podrá llegar al límite de la memoria virtual asignada al proceso y devolvernos un Java Heap Memory.

La solución a este inconveniente es solicitarle al driver que no cargue los datos en memoria y los devuelva.

Al día de la fecha de este documento hay dos soluciones

ROW BY ROW

Esta solución presentada en la propia documentación del driver de mysql, está en devolvernos los datos de a uno (row by row) y aplicable para la versión de O3 BI 5.4.022 (warning), para versiones posteriores ver más adelante.

...

Procedimiento para versión 5.4.022

  • Se debe copiar el _o3p-HD-4582.jar a la carpeta classes de la instalación.

  • Adicionalmente se debe activar la property o3.jdbc.mysql.rowbyrow=true en el archivo O3Builder.properties u O3Designer.properties, segun corresponda.

 


title
Note

Notificación

Se debe visualizar el siguiente mensaje en el log del componente actuante

MySQL Statement created to read row-by-row

...

Procedimiento para versiones superiores a la 5.4.022

  • No requiere instalar el parche

  • Se debe activar la property o3.jdbc.mysql.rowbyrow=true en el archivo O3Builder.properties u O3Designer.properties

...

2. CONFIGURACION DEL FETCH SIZE EN LA CONEXION

Ante análisis y búsquedas en internet, un usuario de Genexus nos presenta una solución de aplicar tres parámetros a la conexión con el jdbc.

Esta solución es aplicable a todas las version de O3BI, ya que se debe ingresar al final de la URL tres 2 parámetros indicando a nuestra conveniencia la cantidad de registros para indicar el Fetch Size.

?defaultFetchSize=150&"ValorDeFetchSize"

useCursorFetch=true&jdbcCompliantTruncation=falseNuestra experiencia nos

Si bien en teoría cuanto mayor es el valor de FetchSize mas rápido se resuelve la consulta y mayor es el consumo de memoria, nuestra experiencia indica que se puede indicar setear un valor de 5000 de Fetch Size sin inconvenientes de consumo de memoria y mejores tiempos.

Por lo tanto la definición de una conexión en el O3Designer en la url quedará como:

Code Block
//SERVIDOR:PUERTO/BASE?defaultFetchSize=5000&useCursorFetch=true&jdbcCompliantTruncation=false