Download OPTIMIZACIÓN DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS
Document related concepts
no text concepts found
Transcript
OPTIMIZACIÓN DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS OPTIMIZATION’S OF THE DATA BASE OF XAVIA HIS SYSTEM Yosvany Arrastia Machin1, Gladilis de la Caridad Barrera Garrido2, Rosnel Venero Acosta3 1 Universidad de las Ciencias Informáticas, Cuba,yarrastia@uci.cu, Carretera a San Antonio de los Baños Km 2 ½ Torrens. Boyeros, Ciudad de La Habana. 2 Universidad de Sancti Spíritus “José Martí Pérez”, Cuba, gladilis@uniss.edu.cu 3 Universidad de las Ciencias Informáticas, Cuba, rvacosta@uci.cu RESUMEN: El Sistema de Información Hospitalaria (Xavia HIS) se encarga de la gestión médica de hospitales y centros de salud, el personal médico tiene a su alcance una plataforma que le permite la gestión clínica y administrativa. Este sistema puede manejar gran volumen de datos por lo que se puede ver afectado el rendimiento del mismo, la disponibilidad y gestión de los datos. En la presente investigación se propone optimizar el servidor de la base de datos postgresSQLdel sistema Xavia HIS y realizar el particionado de sus tablas más críticas. En la primera parte se hace un análisis de las posibles técnicas de particionado a utilizar, eligiéndose la horizontal y se ilustra mediante un ejemplo cómo quedan las tablas particionadas. Luego se ajustan los parámetros de configuración del servidor de la base de datos y se reduce la cantidad de índices existentes en las tablas. Finalmente se obtiene una base de datos optimizada con sus tablas más críticas, particionadas por grupos de selección, lo cual reduce considerablemente el tiempo de respuesta del servidor propiciando que el usuario pueda acceder de forma más rápida a cualquier servicio que brinda el sistema mejorando así el rendimiento del mismo. Palabras Clave: base de datos, optimización, particionado. ABSTRACT: The Hospital Information System (HIS Xavia) is responsible for the medical management of hospitals and health centers, medical personnel have at its disposal a platform that allows the clinical and administrative management. This system can handle large volumes of data that can be affected in its performance, availability, and data management. In this research it is proposed to optimize the PostgresSQL data base server of Xavia HIS system and perform partitioning of critical tables. In the first part of the paper the authors perform an analysis of the techniques of partitioning possible to use, it is chose the horizontal partitioning and illustrated by an example how are partitioned tables. Also is adjusted the configuration parameters of data base server and is reduced the amount of existing indexes on tables. Finally, an optimized database with partitioned tables by selection groups is obtained, which considerably reduces the response time of the server causing that the user can access more quickly to any service provided by the system and improving the performance. KeyWords: database, optimization, partitioned. 1. INTRODUCCIÓN El Sistema de Información Hospitalaria (Xavia HIS), es una solución integral en un único producto para “XI Congreso Internacional de Informática en Salud 2016” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN la gestión médica de hospitales y centros de salud. La misma permite la recolección, almacenamiento, procesamiento y comunicación de información relacionada con la atención al paciente, así como información administrativa del hospital. Tiene como propósito, poner a disposición del profesional médico una plataforma de herramientas de gestión clínica y administrativa para dar respuesta a sus necesidades reales. Sitúa al paciente como referencia y centro del sistema manejando su información de forma integrada y única mediante una Historia Clínica Electrónica para facilitar la realización del proceso de diagnóstico, tratamiento y otros programas de cuidados y seguimientos. Xavia HIS comprende una estructura modular que integra las funciones de las diferentes áreas dentro de una institución hospitalaria así como la convergencia de varias entidades de salud dentro de un mismo sistema para el intercambio de información sobre pacientes y servicios. En sistemas de estas características, la gestión y disponibilidad de los datos es de vital importancia para el correcto funcionamiento e integración con otros sistemas o módulos. En la actualidad la gestión de reportes en las diferentes áreas que abarca el sistema es un tema crítico. La obtención de los reportes necesarios se dificulta si presentan gran volumen de datos debido a que el tiempo de respuesta es lento, evidenciando problemas de configuración en el servidor de Base de Datos (BD) lo que provoca problemas de rendimiento y latencia en el servicio. La gestión de pacientes, órdenes de análisis de laboratorio, entre otros aspectos necesarios en una institución hospitalaria presentan problemas debido a la lentitud de respuesta por parte del servidor. Esto se debe al exceso de información en tablas únicas de la BD, que a su vez son tablas críticas para la centralización e integración de los datos en el sistema. A nivel de BD la mala utilización y el exceso de índices atenta contra el rendimiento alargando los tiempos de respuesta en las transacciones realizadas. Atendiendo a la situación planteada con anterioridad, el objetivo de la presente investigación es mejorar el rendimiento del sistema Xavia HIS y la disponibilidad de los datos mediante la optimización del servidor de la base de datos postgres SQL y el particionado de sus tablas críticas. 2. MATERIALES Y MÉTODOS 2.1 Particionado de tablas DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” Las técnicas de particionado de una tabla, intentan disminuir los accesos a disco, ordenando físicamente los datos por un factor en común. El particionado genera una pequeña sobrecarga de procesamiento proporcional, en comparación con la tabla sin esta técnica. Existen dos tipos de particionados: el horizontal y el vertical. Ambos tipos son distintos y se logran de diferentes formas, el horizontal es por rango de datos atendiendo a un campo que sea criterio de selección y el vertical divide una tabla por columnas. [1] 2.2.1 Particionado Horizontal En el particionado horizontal, el acceso a disco disminuye si la consulta que se realiza, no busca en todo el set de datos, sino que busca solamente unos pocos elementos del conjunto de rangos por selección. El particionado debe ser pensado de acuerdo a las consultas que se van a realizar y teniendo en cuenta cual es el criterio de selección por el que se van a agrupar los datos. Este tipo de particionado se manifiesta como herencia de tablas[1]. 2.2.2 Particionado Vertical El particionado vertical busca disminuir los accesos a disco a través de la selección de columnas. Puede ser considerado desde el diseño (dos o más tablas, unidas por una llave con cardinalidad 1:1). Evidenciándose en el diseño de BD mediante la normalización de las tablas. El modo de simular esto es crear ambas tablas y una vista global de las mismas, que incluyan todas las columnas. [1]. En la presente investigación se escoge como técnica de particionado el horizontal, partiendo de que la necesidad existente es la selección de datos en grupos de más pequeños, teniendo como campo de selección la fecha, campo presente en cada una de las tablas críticas [1]. 2.2 Plpsql PL/pgSQL (Procedural Language/PostgreSQLStructuredQueryLanguage) es un lenguaje imperativo soportado por el gestor de base de datos PostgreSQL. Para poder utilizarlo primero se debe instalar en la base de datos. Permite ejecutar comandos SQL mediante un lenguaje de sentencias imperativas y uso de funciones. Con este lenguaje se pueden realizar cálculos complejos y crear nuevos tipos de datos de usuario.Dispone de estructuras de control repetitivas y condicionales, además de la posibilidad de creación de funciones que pueden ser llamadas en sentencias SQL normales o “XI Congreso Internacional de Informática en Salud” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN ejecutadas en eventos de tipo disparador (trigger). [2] DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” PHPy muchos otros. [3] [4] 2.3 Postgresql 8.4 PostgreSQL es un Sistema de gestión de bases de datos relacional orientado a objetos y libre, publicado bajo la licencia PosgreSQL 1 Entre algunas de sus características se encuentra que permite la alta concurrencia, mientras que un proceso escribe en una tabla se puede perfectamente acceder a la misma sin necesidad de bloqueos. Además provee soporte para una amplia variedad de tipos por ejemplo números de precisión arbitraria, texto de tamaño ilimitado, figuras geométricas, entre otros. Permite crear una amplia funcionalidad a través de su sistema de activación de disparadores (triggers).Garantiza la integridad referencial y la herencia de tablas. Tiene múltiples métodos de autentificación. Contiene funciones o procedimientos almacenados en algunos lenguajes de programación como PL/pgSQL, PL/Perl, PL/Python. Soporta el almacenamiento de objetos binarios grandes, por ejemplo gráficos, videos, sonido. Cuenta con las APIs para programar en C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, 1PostgreSQL Figura 1: Función de creación de particiones Global Development Group “XI Congreso Internacional de Informática en Salud” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” 3. RESULTADOS Y DISCUSIONES 3.1 PARTICIONADO DE TABLA. Atendiendo a la necesidad de mejorar el rendimiento de la BD del Xavia HIS, se hace necesario realizar el particionado de tablas, que por el volumen de datos que tienen y su frecuencia de uso en el sistema, se consideran críticas. La solución que se desarrolla, comprende el particionado de las tablas hc_local.persona, hc_local.recipe y publico.solicitud_analisis_lab. Para lograr el particionado de las tablas, se crean funciones correspondientes a cada una de ellas, encargadas de buscar y crear los intervalos de años entre los cuales se van a distribuir los datos existentes en dichas tablas. Con la ejecución de estas funciones se logra crear de forma automática la estructura final de la BD, así como los trigger y funciones trigger correspondientes a cada una de las tablas padres. A continuación en la figura se muestra un fragmento de código en lenguaje plpgsql de la función encargada de hacer el particionado de la tabla hc_local.persona. Se generan intervalos de 20 años a partir del primer año encontrado en la tabla persona. Con estos rangos de selección se crea el trigger y su función correspondiente en la tabla. “XI Congreso Internacional de Informática en Salud” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN Ejecutando estas funciones en la BD, se generan nuevas tablas, creándose un particionado horizontal. DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” tabla hc_local.persona. En la siguiente figura se muestra la estructura que adquiere la BD después de particionada la tabla persona. Es importante señalar que en el caso de esta tabla específica, el criterio de selección de los datos, es el campo fecha_nacimiento. Para lograr un correcto funcionamiento, se decide agrupar las personas en tablas, en un intervalo de 20 años. Figura 3: Consulta realizada antes de optimizar el servidor. Figura 2: Ejemplo de particionado horizontal de tabla. En la figura 4 se muestra de forma visual la consulta realizada a la BD en la tabla hc_local.persona.En la cual se evidencia que la operación realizada es un escaneo secuencial sobre todos sus datos. En el caso de las otras tablas a particionar el criterio de selección es el campo fecha y teniendo en cuenta el volumen de datos generados por cada paciente, se decidió que el rango de selección fuera anual. De esta forma queda creada una tabla hija por cada año, para el almacenamiento de los datos en el año correspondiente. 3.2 Configuración del servidor PostgreSQL Para utilizar el servidor de BD PostgreSQL, solo es necesario su instalación, pero si se necesita utilizarlo en sistemas que gestionen gran volumen de datos es imprescindible hacer una configuración personalizada para lograr un rendimiento óptimo. En cualquier servidor, no solo en PostgreSQL, las BD generan un considerable número de transacciones y volumen de datos, el cual va creciendo en el tiempo. Esto significa que una configuración que funcione bien con ciertos valores, puede que no funcione de forma óptima después de un tiempo de uso determinado y se debe ajustar nuevamente para que funcione óptimamente. Debido a esto, es que se hace necesario realizar ajustes en los parámetros de configuración para lograr una optimización del servidor de BD. El fichero principal de configuración de PostgreSQL es el postgresql.conf, en el cual se encuentran los parámetros que se ajustan para laoptimización de acuerdo a los requerimientos e infraestructura de despliegue. Con la configuración inicial del servidor, las consultas en la BD, devolvían los datos en un tiempo prolongado. En la figura 3 se muestran los resultados para la ejecución de una consulta a la Figura 4: Visualización de operación realizada por el servidor en consulta, antes de optimizar el servidor 3.2.1 Parámetros de configuración Los parámetros de configuración de PostgreSQL se configuran en el archivo postgresql.conf. Los cambios para la mayoría de estas configuraciones requieren reiniciar el clúster de BD de PostgreSQL. [5] [6] shared_buffers: este valor, de tipo entero, indica el número de bloques de memoria o buffers de 8KB (8192 bytes) que postgresql reservará como zona de trabajo, en el momento del arranque para procesar las consultas.El valor por defecto es 32MB, sin embargo, como esta es la memoria utilizada para trabajo del servidor, el parámetro de configuración se ajustó teniendo en cuenta la disponibilidad de memoria, quedando asignado “XI Congreso Internacional de Informática en Salud” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN 2510 MB para la memoria de trabajo del servidor PostgreSQL. Se modificó la memoria compartida del sistema operativo, que se encuentra en el fichero de configuración /etc/sysctl.conf. • SHMMAX: tamaño máximo de un segmento de memoria compartida (bytes). Quedando asignado el valor de 2147483648 bytes, 2 GB según la memoria del servidor. • SHMMIN: tamaño mínimo de un segmento de memoria compartida (bytes). El valor asignado es de 4096 bytes. • SHMALL: cantidad máxima de memoria compartida disponible (bytes): Se decidió asignarle 262144 como valor atendiendo a cantidad de memoria del servidor. work_mem: parámetro usado en operaciones que contengan ORDER BY, DISTINCT, JOINS,indica la cantidad de memoria que puede utilizar PostgreSQL antes de crear archivos temporales para el procesamiento de los resultados intermedios. Se decidió asignar 64 MB para la ejecución de estas operaciones en el servidor de BD. effective_cache_size:es utilizado por el planeador del motor de BD para optimizar la lectura de datos. En un servidor dedicado se puede empezar con un 50% del total de la memoria. Atendiendo a la disponibilidad de memoria del servidor, se decidió asignarle el valor de 4730 MB. geqo o GenericQueryOptimization: con este parámetro se activa o desactiva el algoritmo que utiliza PostgreSQL para optimizar las consultas al sistema. El valor por defecto es activado (on), se decidió dejar el valor establecido por defecto del servidor en activado. maintenance_work_mem: parámetro usado en operaciones del tipo: VACUUM, ANALYZE, CREATE INDEX, REINDEX, ALTER TABLE, entre otras. Esta es la cantidad de memoria que utilizará PostgreSQL para este tipo de tareas de mantenimiento. Su valor dependerá mucho del tamaño de las bases de datos aunque, se decidió utilizar 350 MB en el ajuste de la configuración atendiendo a la memoria dedicada en el servidor. checkpoint_segments:este parámetro es importante en BD con numerosas operaciones de escritura (insert, update, delete). No obstante, un aumento excesivo del mismo implica una recuperación más lenta ante un fallo en cualquiera de las transacciones, por esta razón, para sistemas de escritura masiva, valores desde 32 (punto de chequeo cada 512 MB) a 256 (cada 128 GB) son los más populares. Se decidió asignar 64 MB. random_page_cost: determina la forma en que el planeador considera los accesos no secuenciales a disco. Un valor bajo favorecerá el uso de índices; DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” un valor alto, las lecturas secuenciales. Se decide asignarle 4.0 como valor de configuración. cpu_operator_cost: este parámetro fija la estimación del planificador del costo de procesar cada operador o función ejecutada durante una consulta. Se le asigna 0.5 como valor, que ofrece un mejor plan para el sistema. constraint_exclusion: permite al planeador considerar las restricciones de chequeo en la tabla al determinar el plan de ejecución, permite optimizar las búsquedas en las tablas heredadas. Se asigna el valor activado, para favorecer el particionado de las tablas hc_local.persona, hc_local.recipe y publico.solicitud_analisis_lab. Después de la optimización del servidor de BD y el particionado de las tablas críticas, se procede a la ejecución de consultas con el objetivo de evaluar el impacto en cuanto a los tiempos de ejecución de las consultas y respuestas de la BD. Figura 5: Consulta realizada después de optimizar el servidor de BD y realizar el particionado En la siguiente imagen se evidencia que el tiempo de respuesta luego de optimizar el servidor y realizar el particionado, en comparación con el tiempo antes de realizarlo, disminuyó en 122 ms, lo cual se considera adecuado para la respuesta del servidor. Figura 6: Visualización de operación realizada por el servidor en consultas, después de optimizar el servidor y realizar el particionado “XI Congreso Internacional de Informática en Salud” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN Como se muestra en la imagen anterior, con el particionado de tablas, se mejora el rendimiento del sistema pues se logra reducir el tiempo de ejecución debido a que la consulta solo se ejecuta en un rango de datos y no en su totalidad. Partiendo de las restricciones de chequeo que existen para los rangos de datos, el sistema busca directamente en la tabla que contiene los datos requeridos. De igual forma se logra una reducción de tiempo significativa en la demás tablas críticas del sistema. Además con el particionado de tablas se mejora la gestión de la información pues cuando se realizan transacciones como buscar, insertar y actualizar datos se hace de manera más rápida ya que aumenta la velocidad en tiempo de respuesta. En fin la optimización del servidor de BD postgresSQL junto al particionado de las tablas más críticas, es una solución inmediata que resuelve los problemas existentes en las instituciones médicas que utilizan el Xavia HIS. Por consiguiente el paciente podrá disfrutar de todos los beneficiosque brinda el sistema, los cuales se listan a continuación: Dispone de un sistema que tiene como centro de referencia al paciente, dando respuesta a sus necesidades de salud pública y de asistencia médica, facilitando su acceso a los recursos de salud. Atención al paciente como un cliente único de la red de salud. Existencia de un Expediente Clínico Electrónico único por paciente, que puede ser consultado desde cualquier institución de salud autorizada. Calidad en los informes médicos que se le entregan a los pacientes. Seguridad y confidencialidad información de salud del paciente. en la Calidad en la atención médica y disminución de los tiempos de espera para acceder a un servicio. Para los profesionales de la salud, el correcto funcionamiento del sistema también aporta grandes beneficios, entre los cuales se encuentran: Se pone a disposición del profesional médico herramientas de gestión clínica que dan respuesta a sus necesidades reales. Se dispone y accede a información única e integrada del paciente para DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” facilitar los procesos de diagnóstico, tratamiento y otros programas de cuidados y seguimiento. Se brindan herramientas que facilitan acceder y compartir conocimiento científico. Permite la revisión de diagnóstico de pacientes atendidos con anterioridad. Control del suministro de medicamentos a los pacientes y la generación automática de la solicitud de los mismos de acuerdo a las necesidades. 4. CONCLUSIONES La velocidad en tiempos de respuesta en los sistemas que manejan gran volumen de datos es un elemento decisivo, es por ello que se busca la rapidez en las transacciones que se realicen. Estos sistemas necesitan estar lo más óptimo posible para la correcta gestión y disponibilidad de los datos y una de las formas de lograrlo es precisamente optimizando el servidor de la BD. Luego de analizar los problemas existentes en el sistema Xavia HIS en cuanto al rendimiento se llega a la conclusión de que es necesario realizar una optimización del servidor de la BD y a su vez realizar las particiones correspondientes a las tablas más críticas, utilizando la técnica de particionado horizontal. Para la optimización del servidor de la BD se ajustaron los principales parámetros de configuración, además se redujo la cantidad de índices existentes en las tablas, eliminando todos aquellos que son innecesarios para el correcto funcionamiento del sistema. Una vez realizada la optimización del servidor y el particionado de las tablas se evidencian beneficios muy favorables en cuanto al acceso al sistema tanto para el paciente como para el personal médico autorizado a la gestión de datos. Con esto se logra reducir el tiempo de espera del servidor lo que trae consigo que el usuario pueda acceder a cualquier servicio del sistema de forma más rápida, a su vez haciéndose más atractivo y funcional para su frecuente uso Además la obtención de reportes y la gestión de información dígase buscar, actualizar e insertar datos se realiza de forma más ágil, haciendo más sencillo el proceso. “XI Congreso Internacional de Informática en Salud” Arrastia, Y.;Barrera, G.;Venero, R.| “OPTIMIZACIÓN DE LA BASE DE DATOS DEL SISTEMA XAVIA HIS” 5. REFERENCIAS BIBLIOGRÁFICAS 1. postgres, comunidad de. 5.9. Partitioning. [En línea] http://www.postgresql.org/docs/8.4/static/ddlpartitioning.html. 2. —. Chapter 40. PL/pgSQL - SQL Procedural Language. [En línea] http://www.postgresql.org/docs/current/static/plpgsql .html. 3. —. E.23. Release 8.4. [En línea] 2009. http://www.postgresql.org/docs/8.4/static/release-84.html. 4. —. [En línea] http://www.postgresql.org/about/featurematrix. 5. —. Chapter 17. Server Configuration. [En línea] http://www.postgresql.org/docs/8.4/interactive/config -setting.html. 6. —. 18.4. Resource Consumption, Memory. [En línea] 6. SÍNTESIS CURRICULARES DE LOS AUTORES Yosvany Arrastia Machin, nacido el 20 de septiembre de 1986 en Pinar del Río. Ingeniero en Ciencias Informáticas en la Universidad de las Ciencias Informáticas, en julio del 2010, La Habana, Cuba. En el periodo comprendido entre el 2010 y 2012 se destacó como especialista de Inteligencia de Negocios en proyectos con Oficina Nacional de Estadísticas e Información (ONEI) de Cuba. Además como especialista de integración de datos, durante el proceso de desarrollo del Sistema Informático para las Elecciones en Cuba y participó en el proceso electoral como miembro del equipo de gestión y análisis de la información. Entre 2013 y 2014, tuvo el rol de especialista de Integración en PDVSA, Venezuela, en el Sistema de Contratación y Administración de Contratos (SICAC). En la actualidad se desempeña como especialista de base de datos y consultor en el Centro de Tecnologías de Gestión de Datos (DATEC) en la Universidad de las Ciencias Informáticas. Se encuentra investigando sobre temas genéticos y enfermedades genéticas, mediante la confección y análisis de árboles genealógicos. Se encuentra desarrollando un sistema para la representación gráfica de los árboles genealógicos y posterior análisis de la información con R. “XI Congreso Internacional de Informática en Salud”