MySQL 5 Descripción MySQL es un sistema de gestión de base de datos relacional, multi-hilo y multiusuario con más de seis millones de instalaciones. MySQL AB —desde enero de 2008 una subsidiaria de Sun Microsystems y ésta a su vez de Oracle Corporation desde abril de 2009— desarrolla MySQL como software libre en un esquema de licenciamiento dual. Por un lado se ofrece bajo la GNU GPL para cualquier uso compatible con esta licencia, pero para aquellas empresas que quieran incorporarlo en productos privativos deben comprar a la empresa una licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C. Versiones de MySQL - Enterprise Es una plataforma probada y confiable que combina el software de Base de Datos de MySQL, servicios de monitoreo y asesoramiento para asegurar que el negocio logre los niveles de confiabilidad, seguridad y disponibilidad deseados. Incluye: - MySQL Enterprise Server: la versión más confiable, segura y actualizada del SGBD de código abierto más popular. - MySQL Enterprise Monitor: provee monitoreo y asesoramiento automático para ayudar al DBA a eliminar vulnerabilidades de seguridad, mejorar la replicación, optimizar la performance, entre otras cosas. - MySQL Query Analizer: optimiza la performance de las aplicaciones - MySQL Technical Support: permite obtener respuestas rápidas - MySQL Consultative Support: está disponible con MySQL Enterprise Platinum y brinda asesoramiento a medida directamente del equipo de soporte de MySQL sobre como diseñar y configurar los servidores MySQL, schemas, consultas y replicación. - Comunity MySQL community server es el SGBD de código abierto manejado por la comunidad open-source, disponible completamente bajo licencia GPL. No cuenta con las aplicaciones complementarias disponibles en la versión Enterprise. ¿Por qué MySQL? La Base de Datos MySQL se ha convertido en la base de datos de código abierto más popular en el mundo debido a su alta performance, alta confiabilidad y facilidad de uso. Es utilizada en todo el mundo ya sea por programadores web individuales como por las más grandes organizaciones y las de mayor crecimiento para reducir la inversión de tiempo y dinero para permitir el funcionamiento de sus sitios web de alto volumen de contenido, los sistemas críticos para sus negocios, incluyendo a líderes de la industrias como Yahoo!, Alcatel-Lucent, Google, Nokia, YouTube, and Zappos.com. No sólo es MySQL la base de datos de código abierto más popular, sino que se ha convertido en la base de datos elegida para la nueva generación de aplicaciones LAMP (Linux, Apache, MySQL, PHP / Perl / Python). MySQL corre sobre más de 20 plataformas incluyendo Linux, Windows, Mac OS, Solaris, HP-UX, IBM AIX, brindando la flexibilidad que pone a quién la utiliza en pleno control. Sin importar si uno es nuevo a la tecnología de bases de datos o si uno es un desarrollador experimentado o administrador de bases de datos, MySQL ofrece un extenso rango de aplicaciones, soporte, entrenamiento y consultas certificados para hacer exitosos sus negocios. Top 10 de Razones para usar MySQL 1. Escalabilidad y Flexibilidad El servidor de base de datos MySQL provee una alta escalabilidad, luciendo la capacidad de manejar aplicaciones profundamente embebidas con un tamaño de solo 1MB hasta correr almacenes de datos masivos soportando terabytes de información. Flexibilidad de plataforma es una característica robusta de MySQL con todas las variantes de Linux, Unix, y Windows siendo apoyadas. La naturaleza de código abierto de MySQL permite personalización completa para aquellos que quieren agregar requerimientos únicos al servidor de base de datos. 2. Alto Rendimiento Una arquitectura única de motor de almacenamiento permite a profesionales de bases de datos configurar el servidor de bases de datos MySQL específicamente para aplicaciones particulares, con un resultado final de asombroso rendimiento. Sea la aplicación destinada un sistema de transacciones de alta velocidad o un sitio de red de alto volumen que provee servicios a millones de consultas por día, MySQL puede satisfacer las expectativas de rendimiento más demandantes de cualquier sistema. Con utilidades de carga de alta velocidad, cachés de memoria distintivos, índices de texto completo, y otros mecanismos extensores de rendimiento, MySQL ofrece toda la munición necesaria para sistemas críticos de negocios de la actualidad. 3. Alta Disponibilidad Confiabilidad sólida y disponibilidad constante son sellos de MySQL, con clientes confiados en MySQL para garantizar tiempo productivo en cada momento. MySQL ofrece una variedad de opciones de alta disponibilidad de desde configuraciones de replicación master/slave de alta velocidad, hasta clusters de servidores especializados ofreciendo conmutación por error instantánea, hasta vendedores de terceros ofreciendo soluciones únicas de alta disponibilidad para el servidor de bases de datos MySQL. 4. Soporte Robusto de Transacciones MySQL ofrece uno de los motores de bases de datos transaccionales más poderosos del mercado. Las características incluyen soporte completo de transacciones ACID (atomicidad-consistenciaaislamiento “isolate”-durabilidad), cierre ilimitado de niveles de filas, capacidad distribuida de transacción, soporte para transacciones de múltiples versiones donde lectores nunca bloquean a escritores y viceversa. La integridad completa de datos también es asegurada a través de integridad referencial impuesta por servidor, niveles especializados de aislamiento de transacciones, y detección instantánea de puntos muertos. 5. Fortalezas de Red y Almacén de datos MySQL es el estándar para sitios de red de alto tráfico por su motor de consultas de alto rendimiento, capacidad de rápida inserción de datos, y fuerte soporte para funciones de red especializadas como búsquedas rápidas de texto completo. Estas mismas fortalezas también se aplican a entornos de almacenamiento de datos donde MySQL escala hacia el rango de terabytes, tanto para servidores simples como para arquitecturas de mejoramiento. Otras características como tablas de memoria principal, árboles B e índices hash, y tablas comprimidas de archivo que reducen requerimientos de almacenamiento en hasta un 80%, hacen a MySQL un fuerte destacado tanto para red como aplicaciones de inteligencia de negocios. 6. Fuerte Protección de Datos Porque proteger datos de activos de corporaciones es el trabajo número uno de los profesionales de bases de datos, MySQL ofrece características de seguridad excepcionales que aseguran la protección absoluta de los datos. En términos de autenticación de bases de datos, MySQL provee mecanismos poderosos para asegurar que solo usuarios autorizados tengan acceso al servidor de bases de datos, con la habilidad de bloquear usuarios al nivel de máquina de cliente, cuando sea posible. Soporta a SSH y SSL también es provisto para mantener conexiones seguras. Está presente un marco (Framework) de manera que los usuarios solo vean datos que deberían, y funciones poderosas de cifrado y descifrado aseguran que datos sensibles sean protegidos de ser vistos sin autorización. Finalmente, utilidades de respaldo y recuperación proveídas por MySQL y vendedores de terceros de software, permiten respaldo físico y lógico completo así como recuperación completa y puntual. 7. Desarrollo Comprensivo de Aplicaciones Una de las razones por las cuales MySQL es la base de datos de código abierto más popular del mundo es que provee soporte comprensivo para las necesidades de desarrollo de toda aplicación. Dentro de la base de datos, soporte puede ser encontrado para procedimientos almacenados, disparadores (triggers), funciones, vistas, cursores, ANSI-estándar SQL, y más. Para aplicaciones embebidas, existen librerías conectables (plug-in) disponibles para embeber el soporte de la base de datos de MySQL dentro de casi cualquier aplicación. MySQL también provee conectores y unidades (ODBC, JDBC, etc.) que permiten todas las formas de aplicaciones para hacer uso de MySQL como un servidor de gestión de datos preferido. No importa si es PHP, Perl, Java, Visual Basic o .NET, MySQL ofrece a desarrolladores de aplicaciones todo lo que necesitan para ser exitosos en la construcción de sistemas de información manejados con bases de datos. 8. Facilidad de Manejo MySQL ofrece capacidades excepcionales de inicio rápido con un promedio de tiempo desde la descarga del software hasta la conclusión de la instalación de menos de 15 minutos. Esta regla se mantiene verdadera sin importar si la plataforma es Microsoft Windows, Linux, Macintosh o Unix. Una vez instalado, la características de auto-gestión como expansión automática de espacio, auto-reinicio, y configuración dinámica, cambios alivian mucha carga de administradores de bases de datos. MySQL también provee una suite completa de gestión gráfica y herramientas de migración, que permiten al administrador de bases de datos a manejar, solucionar fallas, y controlar la operación de muchos servidores MySQL desde un solo puesto de trabajo. Muchas herramientas de vendedores de terceros de software están disponibles para MySQL que manejan tareas en un rango desde diseño de datos y ETL, hasta administración completa de bases de datos, administración de trabajo, y monitoreo de rendimiento. 9. Libertad de Código Abierto y Soporte 24x7 Muchas corporaciones son vacilantes en apostar completamente en software de código abierto porque creen que no pueden obtener el tipo de soporte o servicio de seguridad profesional en el que confían actualmente con software propietario para asegurar el éxito total de sus aplicaciones clave. La pregunta de indemnización también es planteada usualmente. MySQL no es un típico proyecto de código abierto dado que todo el software es poseído y apoyado por Oracle, y por eso, un único costo y modelo de soporte están disponibles que proveen una combinación única de libertad de código abierto y software confiable con soporte. 10. Precio Total Más Bajo de Propiedad Al migrar aplicaciones de unidades de bases de datos a MySQL, o usar MySQL para nuevos proyectos de desarrollo, las corporaciones se están dando cuenta de los ahorros de costo que muchas veces se estiran en 7 cifras. Realizado el uso del servidor de bases de datos MySQL y arquitecturas mejoradas que utilizan hardware de mercancía de bajo costo, las corporaciones están encontrando que pueden lograr niveles sorprendentes de escalabilidad y rendimiento, todo a un costo que es mucho menor que aquel ofrecido por vendedores de software propietario. Además, la confiabilidad y facilidad de mantener de MySQL significan que administradores de bases de datos no pierden tiempo en la localización y depuración de fallas de rendimiento o problemas de tiempo de inactividad, pero en cambio pueden concentrarse en hacer un impacto positivo en tareas de mayor nivel que involucran el lado de negocios de los datos. Características Técnicas: -Query Cache MySQL 5.0 Server proporciona una query cache. Cuando se usa, la query cache almacena el texto de una consulta SELECT junto con el resultado que se le envió al cliente. Si se recibe una consulta idéntica posteriormente, el servidor devuelve el resultado de la caché de consultas en lugar de parsear y ejecutar la consulta de nuevo. La caché de consultas es muy útil en un entorno donde tiene tablas que no cambian frecuentemente y donde el servidor recibe muchas consultas idénticas. Esta es la típica situación de muchos servidores Web que generan muchas páginas dinámicas basadas en contenido de base de datos. Nota 1: La caché de consultas no devuelve datos antiguos. Cuando las tablas se modifican, cualquier entrada relevante en la caché de consultas se elimina. Nota 2: La caché de consultas no funciona en un entorno donde tiene muchos servidores MySQL actualizando las mismas tablas MyISAM. Nota 3: La caché de consultas no se usa para comandos preparados en la parte del servidor. Si está usando este tipo de comandos preparados, considere que no se beneficiarán de la caché de consultas. A continuación algunos datos de rendimiento de la caché de consultas. Estos resultados se generaron con el MySQL benchmark suite en un Linux Alpha 2 x 500MHz con 2GB RAM y 64MB de caché de consultas. Si todas las consultas que está ejecutando son simples (tales como seleccionar un registro de una tabla con un registro), pero diferente de forma que las consultas no pueden cachearse, la pérdida de rendimiento por tener activa la caché de consultas es del 13%. Este puede considerarse el peor escenario posible. En el mundo real, las consultas suelen ser mucho más complicadas, así que la pérdida de rendimiento es considerablemente menor. Las búsquedas para un registro en una tabla de un registro son un 238% más rápidas con la caché de consultas que sin ella. Esto puede considerarse como la mínima mejora esperada para una consulta que se cachea. Para desactivar la caché de consultas al arrancar el servidor, ponga la variable de sistema query_cache_size a 0. Al desactivar el código de caché de consultas, no hay una pérdida de rendimiento evidente. Las capacidades de la caché de consultas pueden quitarse totalmente del servidor usando la opción --without-query-cache con configure al compilar MySQL. - Tecnologías de Almacenamiento Soportadas Elegir el tipo correcto de tabla para una situación particular es el primer paso hacia la construcción de aplicaciones de alta performance. Dentro de MySQL hay un número distinto de tablas, tales como MyISAM, InnoDB, Archive, Merge, Memory y más, cada una con un propósito determinado. Por ejemplo, si tenemos conjuntos de datos con pocos accesos, Archive puede ser la mejor elección. Afortunadamente MyISAM e InnoDB son los dos únicos tipos realmente necesarios para construir una base de datos robusta; nos concentraremos sobre esos dos. ¿Qué son MyISAM e InnoDB y cuando debemos usar cada uno? - MyISAM MyISAM deriva del motor original MySQL ISAM y es usado frecuentemente como el tipo de tabla por defecto cuando se crean nuevas tablas en MySQL. En un sentido amplio, MyISAM está orientado hacia la velocidad y el indexado. MyISAM permite indexar columnas BLOB y TEXT, esencialmente permitiendo la construcción de búsquedas de texto completas en una aplicación. Desgraciadamente, toda esa velocidad va en desmedro de la integridad de los datos. - InnoDB InnoDB por otro lado, provee la otra cara de la moneda y ofrece la integridad completa de los datos y soporte transaccional que MyISAM no tiene. InnoDB es el tipo de tabla de transacción segura de MySQL y resulta muy eficaz en la garantía de la integridad de los datos, almacenamiento de grandes cantidades de datos y por supuesto, soporte sobre las transacciones. Sin embargo, tanto como MyISAM, tiene sus desventajas. Toda la integridad provista por InnoDB significa un costo alto tanto en velocidad como en recursos (InnoDB requiere más espacio en disco que MyISAM). Si bien no puede decirse definitivamente cuando utilizar una u otra opción, puede decirse que cuando la integridad de los datos y las transacciones son críticas, como en aplicaciones de ecommerce, se recomienda utilizar InnoDB. InnoDB provee el soporte y la estructura necesarios para manejar grandes cantidades de datos y realizar múltiples operaciones de datos. Sin embargo, InnoDB sería una mala elección en situaciones donde se necesita acceso rápido, como en el caso de tablas de consulta (‘look-up’) o tablas estáticas que contienen una pequeña cantidad de datos. En estos últimos casos es mejor optar por la velocidad de MyISAM. - Utilización de la Memoria A continuación se presenta un listado de algunas de las formas en las cuales el servidor (mysqld) utiliza la memoria. Donde corresponde se explicita el nombre de la variable del sistema referida a un uso particular de la memoria. El key buffer (variable key_buffer_size) es compartido por todos los hilos; otros buffers usados por el servidor son creados y utilizados solo si es necesario. Las conexiones utilizan un determinado espacio específico de cada hilo: o Una pila (default 64KB, variable thread_stack) o Un buffer de conexión (variable net_buffer_length) o Un buffer de resultados (variable net_buffer_length) El buffer de conexión y el buffer de resultados son agrandados dinámicamente hasta el valor establecido en max_allowed_packet cuando fuera necesario. Mientras una consulta esta ejecutándose una copia del ‘query string’ también es almacenada. Todos los hilos comparten la misma memoria base. Solo las tablas MyISAM comprimidas son mapeadas en memoria. Esto sucede ya que el espacio de memoria de 32-bits de 4GB no es lo suficientemente grande para la mayoría de las tablas grandes. Cuando los sistemas que cuentan con direcciones de 64-bits se hagan más utilizados hay idea de agregar soporte general para mapeo de tablas en memoria. Cada pedido que realiza un escaneo secuencial de una tabla utiliza un buffer de lectura (variable read_buffer_size). Cuando se leen filas en una secuencia arbitraria (por ejemplo, cuando se sigue un sort determinado) se utiliza un ‘random-read buffer’ (variable read_rnd_buffer_size) puede ser utilizado para evitar búsquedas en la memoria. La mayoría de los pedidos que realizan algún tipo de sort utilizan un ‘sort buffer’ y entre 0 y 2 archivos temporales, dependiendo en el tamaño del ‘result-set’ PS y otros programas de monitoreo del sistema pueden reportar que mysqld utiliza demasiada memoria. Esto puede ser por pilas (stacks) de diferentes hilos en diferentes direcciones de memoria. En ocasiones se toma el espacio libre entre dichos stacks como espacio ocupado. Si bien aparece como ocupada, si está disponible y es usable para las demás aplicaciones. Referencias de Rendimiento - TM1 Benchmark La siguiente referencia fue realizada sobre MySQL 4.1 y 5.0 en un sistema con Intel P4, 2.8 GHz, 1Gb RAM utilizando la tecnología de almacenamiento InnoDB, 10 clientes y 500K de suscriptores, utilizando una conexión a través de ODBC. El resultado final de MQth (Maximum Qualified Throughput) fue: - DBT2 Benchmark MySQL 5.0 incluye programas que se denominan "stored procedures"(procedimientos almacenados), los cuales están físicamente almacenados en la base de datos, en vez de una localidad separada. La ventaja de un procedimiento almacenado es que, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, realizando ciertas operaciones con mayor rapidez. La prueba demostró que los procedimientos almacenados proveen un impulso en el rendimiento sobre el uso de SQL. Los resultados fueron: - C’t Magazine Database Performance Contest En el año 2006 se realizó una competencia entre varios equipos de desarrolladores de software, que consistía en reproducir la aplicación del Dell DVD online store utilizando cualquier combinación de sistema operativo, base de datos y lenguaje de programación que se creyera de mejor rendimiento. El ganador utilizaba MySQL 5.0. Los resultados fueron: - Scaleable Insert Benchmark Esta referencia compara las diferentes tecnologías de almacenamiento de MySQL 5.0 para las operaciones intensivas en inserciones. Las tecnologías probadas son MyISAM, InnoDB y Archive. La prueba se realizó con una herramienta llamada Quest Benchmark Factory. Los resultados fueron: Diego Ardizzone y Wolfgang Becker Alumnos de 3º año de Licenciatura en Sistemas / Ingeniería Informática - Trabajo Práctico Grupal con exposición oral Materia: Introducción a Bases de Datos - Profesor: Lic. Adrián H. Tozzi