Optimizar, condicionar indices


([N3] GSI) #1

Estoy a vueltas con la optimización máxima de nuestro ERP, estamos valorando condicionar los indices de los ficheros de documentos, albaranes, facturas, etc., para que campos como por ejemplo, tarifa de precios, que no se utiliza en todos los clientes, este condicionada y solo se genere el indice cuando exista tarifa, y no cuando sea cero o vacía.

Nuestra duda es, realmente esto mejorara el rendimiento ???

Alguien tiene experiencia en este aspecto, merece la pena revisar todos los ficheros condicionando uno a uno los indices que sea posible. ???

Gracias de antemano


([N1] wikan) #2

Creo, entendí, supongo, que Velneo si el campo está vacío no lo indexa. Por lo que no deberías preocuparte por los índices cuyo campo no tenga contenido.

Si podrías revisar alguno que no uses, o no se necesario.
Lo mejor es que pongas la app en cloud y la uses para ver que puntes de lentitud tienes y si hay posibilidad de optimizarlos.


([N3] GSI) #3

He probado con los indices complejos, si no hay condiciones genera registros aunque el campo este vacío, sin lo condicionas no genera, con lo cual el fichero se reduce considerablemente, la cuestión es si ocurre, supongo que si, lo mismo en los ficheros normales.


([N1] wikan) #4

Si es así, no debería. Si el campo está vacío, ¿qué va a indexar?
No me he fijado la verdad, podrías condicionar, si #CAMPOS.isEmpty() = 0 o mejor, si #CAMPO y que solo indexe cuando haya contenido.

Pero si notas lenta la aplicación en algún punto, yo iría a por parte gráfica y ver si haces cargas del lado del cliente y esas típicas cosas para optimizar para cloud.


([N3] GSI) #5

Wikan, la optimización por parte del cliente, etc, esta más que conseguida, mi pregunta es por dar una vuelta de tuerca más a la optimización y llevarla al extremo, he observado que los indices complejos generan registros en función de las condiciones, es decir, si tienes algún cliente, como es mi casó con un millón de lineas de albaranes, hay indices, como tarifa, que por diversas razones esta en un indice complejo, que cuando pones como condición que no se indexe si no hay tarifa, genera muchísimos menos registros.

Entiendo que algo que se ve claro en los indices complejos debe ser igual en los normales, pero no lo se, y tampoco se valorar la mejora de rendimiento que esto puede conllevar. Mi pregunta es si alguien ha podido constatar esta mejora, si es que realmente es apreciable y existe, y merece la pena este trabajo.

Nuestra aplicación esta actualmente funcionando en un servidor dedicado, con una media de conexiones simultaneas de 100 / 120 usuarios las 24 horas, funciona muy bien, pero como todos los que nos dedicamos a esto siempre quiero más, velocidad, funcionalidades, etc.

Gracias


([N1] miguel perez oliver) #6

Hola

Como sabes o imagino sabes, yo soy comercial de Velneo y mi fase de programador la deje un poco atrás, pero en mi día a día evidentemente me encuentro temas de estos y hoy sábado que andaba un tanto aburrido, vi tu post.

Te comento algún detalle que espero te pueda servir y que en alguna instalación con muchos datos y mucha obsesión por el rendimiento aplican con asiduidad.

Todo lo que este indexado es mucho mas rápido a la hora de consultar que todo lo que exija procesamiento.

Por tanto , los indices complejos que ahora tienes en Velneo son fundamentales para conseguir esa optimización, auqnue el tamaño de estos tipos de indice sea muy muy grande, eso no afecta o es despreciable en los tiempos de respuesta.

Te pongo un ejemplo

Hasta ahora si deseabas saber las facturas con vencimientos pendientes, lo habitual era leer los vencimientos pendientes y a partir de ellos navegar a las facturas correspondientes para obtener la lista de facturas con algún vencimiento pendiente.

Pues bién, es mucho mas rápido indexar con un indice complejo las facturas, utilizando y condicionando con los campos de los vencimientos, la tabla de facturas y por tanto pudiendo después hacer una búsqueda directa de las facturas que tengan vencimientos pendientes. Mucho , mucho mas rápido. Aunque los beneficios de esto lo notarás cuando trabajes con ingentes cantidades de datos.

Cómo todo, todo depende en que punto de tu progrma lo apliques y si te compensa aumentar esa complejidad de los indices a cambio de mayor rendimiento

Para este tipo de trabajos, nada mejor que contratar con Velneo una Consultoría especifica de 9 o 10 horas y que un experto repase contigo toda tu aplicación o bien te apoyes puntualmente en Soporte, pero de momento espero este comentario te pueda aportar algo


([N3] pacosatu) #7

Hola GSI.

Lo cierto es que es muy dificil saber qué grado de optimización conseguimos en nuestras aplicaciones, pues mientras no tengamos “Herramientas de supervisión y optimización del rendimiento” que cuantifiquen la actividad del servidor, lo único que tenemos son opiniones subjetivas de determinados casos de éxito.

En cuanto a tu pregunta de condicionar o no los Índices y si mejora el rendimiento, pues como siempre, depende.

  • Establecer condiciones en un índice penalizará las modificaciones de las tablas. La transacción dura más tiempo porque tiene que calcular la fórmula de la condición y decidir si indexar el registro o no.
  • Establecer condiciones en un índice nos permite hacer búsquedas directas sin tener que cruzar varias búsquedas, por lo que las consultas se optimizan bastante.
  • Establecer condiciones en un índice reduce el tamaño del fichero físico .idx y por lo tanto el servidor podrá gestionarlo de forma mas desahogada sin saturar la memoria.

Así que como en cualquier sistema transaccional de uso intensivo hay que conseguir un equilibrio entre la duración de la transacción y la velocidad que queremos conseguir en las consultas. Si nuestra aplicación es muy exigente con las transacciones tendremos mucho cuidado en reducir al máximo admisible los índices y si lo que queremos es consultar de forma óptima no nos importará condicionar los índices y crear tantos índices complejos como sea necesario.

Repito que sin “Herramientas de supervisión y optimización del rendimiento” siempre será difícil detectar qué procesos de nuestra aplicación están produciendo cuellos de botella en el servidor. Esperemos que conforme vaya madurando Velneo vServer y habiendo aplicaciones de gran envergadura esas herramientas surgirán por necesidad.

Saludos
Paco Satué