Stress: Mysql vs Oracle
Tiempo total: 0 días con 22:58:30 hrs
En un ambiente de producción los servidores reciben múltiples peticiones que generan tráfico haciendo que las aplicaciones en los servidores se vuelvan lentas, provocando que los clientes potenciales pierdan interés en nuestras empresas y busquen una solución más rápida. Para evitar esto, es necesario conocer las capacidades de cada base de datos en cada sistema operativo a fin de decidir que software será más eficiente una vez estén en producción.
Para conocer que servidor de base de datos es más eficiente en cada ambiente es necesario realizar pruebas de estrés, obteniendo los resultados y generando comparativas que nos llevaran a la solución del problema seleccionando la mejor base de datos que será más rápida y eficiente en un determinado sistema operativo.
Esta publicación contiene información de pruebas de estrés realizadas con JMeter con las bases de datos Oracle y Mysql, en los sistemas operativos Windows y Linux.
Objetivos
Generales
- Realizar una simulación para obtener resultados que serán de utilidad en un mundo real sin poner en riesgo aplicaciones empresariales.
Específicos
- Instalación de distintos tipos de base de datos en distintos entornos o sistemas operativos y establecer un ambiente típico de una base de datos en producción.
- Conocer la herramienta de pruebas de estrés de bases de datos.
- Utilización de conectores para la consulta de aplicaciones externas a las bases de datos.
- Analizar los resultados de las pruebas estrés realizado.
- Seleccionar a partir de la simulación la mejor base de datos y entorno para su aplicación.
Especificaciones
Entorno Linux
Sistema operativo | Ubuntu 13.04 | |
Arquitectura | 64 bits | |
Memoria RAM | 4GB | |
Procesador | Intel CORE i3 2.4 Ghz | |
Disco | 68GB | |
SWAP | 4GB |
Entorno Windows
Sistema operativo | Windows 7 Professional | |
Arquitectura | 64 bits | |
Memoria RAM | 4GB | |
Procesador | Intel CORE i3 2.4 Ghz | |
Disco | 385GB |
Bases de datos
Base de datos 1 | Mysql | |
Versión | Mysql 5.6.15 |
Base de datos 2 | Oracle | |
Versión | XE 11 Release 2 |
Monitoreo
Linux | Conky |
http://conky.sourceforge.net/ |
Windows | Desktop info – Conky for windows |
http://forum.notebookreview.com/windows-os-software/585646-desktop-info-conky-windows.html |
Stress
Jmeter | http://jmeter.apache.org/ | |
Mysql | mysql-connector-java-5.1.27-bin.jar | |
Oracle | ojdbc5.jar |
Scripts Base de datos
Mysql
CREATE TABLE pais (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
pais VARCHAR(100) NOT NULL,
descripcion VARCHAR(100)
);
CREATE TABLE departamento (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
pais INT,
departamento VARCHAR(100) NOT NULL,
descripcion VARCHAR(100),
foreign key (pais) references pais(id) on update cascade on delete cascade
);
Oracle
CREATE SEQUENCE auto_increment_1 START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE auto_increment_2 START WITH 1 INCREMENT BY 1;
CREATE TABLE pais (
id INT,
pais VARCHAR(100) NOT NULL,
descripcion VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE departamento (
id INT,
pais INT,
departamento VARCHAR(100) NOT NULL,
descripcion VARCHAR(100),
PRIMARY KEY (id)
);
alter table departamento add constraint departamento_const1 foreign key (pais) references pais (id);
Documentación en ambiente LINUX
En GNU/Linux, la instalación de las bases de datos es algo que sigue siendo un completo manual de pasos a seguir. Para Oracle XE se pueden encontrar las instrucciones con un par de enlaces externos finalizando sin problemas con su instalación, pero no es así el caso de Mysql. Al instalar lo que se descarga de su sitio oficial, lo único que sucede es que se extraen los archivos a una carpeta de instalación, y el cliente del software es el que tiene que configurar una correcta instalación.
Todo bien siguiendo las instrucciones pero llega un momento en que al correr el servidor, muestra un problema. Al encontrar la solución, aparece otro problema. Al resolver este otro problema, aparece o reaparece otro. Finalmente después de instalar Mysql, JMeter. Este producto para realizar pruebas de estrés, tiene las funcionalidades de conectarse a las bases de datos pero aun asi el cliente es el que tiene que encontrar los plugins necesarios para realizar la conexión. Otro problema que encontré, es la falta de instrucciones para indicar que archivo ejecutar. Existen dos formas de hacerlo, una incorrecta y otra incorrecta.
JMeter, correr el programa de forma incorrecta:
Cd [Direccion]/Jmeter_folder/bin/
jmeter
Forma correcta:
cd [Direccion]/Jmeter_folder/bin/
Sudo chmod 777 jmeter.sh
jmeter.sh
Son instrucciones simples, pero al no iniciar el archivo .sh no mostrara ninguna conexión a ninguna base de datos. Dejando a un lado las criticas, inicio a continuación con los pasos realizados en GNU/Linux.
1. Inicio de software de monitorización
2. Inicio de Mysql
3. Inicio de Oracle Database
4. Inicio de Jmeter
5. Prueba Mysql: 100 Hilos, 3000 peticiones c/u = 300,000 peticiones.
6. String de conexión: jdbc:mysql://localhost:3306/modela
7. Query: SELECT * FROM país p, departamento d WHERE p.id = d.pais;
8. Finalización de prueba Mysql.
9. Prueba ORACLE: 100 Hilos, 3000 peticiones c/u = 300,000 peticiones
10. String de conexión: jdbc:oracle:thin:@//localhost:1521/XE
11. Query: SELECT * FROM pais p, departamento d WHERE p.id = d.pais
12. Finalizacion de prueba ORACLE
Documentación en ambiente WINDOWS
El entorno de Windows es exactamente el mismo, la única diferencia consiste en que no es tan complicada la instalación de Mysql y de Oracle. En Mysql se descargo el zip de la página oficial, se configuraron dos archivos para correr en la consola, uno para iniciar el servidor y el segundo para iniciar sesión. Respecto a JMeter, aquí se pueden utilizar exactamente los mismos archivos que se utilizaron en Ubuntu.
1. Inicio de software de monitorización
2. Inicio de Mysql
3. Inicio de Oracle Database
4. Inicio de Jmeter
5. Prueba Mysql: 100 Hilos, 3000 peticiones c/u = 300,000 peticiones.
6. String de conexión: jdbc:mysql://localhost:3306/modela
7. Query: SELECT * FROM país p, departamento d WHERE p.id = d.pais;
8. Finalización de prueba Mysql.
9. Prueba ORACLE: 100 Hilos, 3000 peticiones c/u = 300,000 peticiones
10. String de conexión: jdbc:oracle:thin:@//localhost:1521/XE
11. Query: SELECT * FROM pais p, departamento d WHERE p.id = d.pais
12. Finalización de prueba ORACLE
Resultados
Entorno Linux
MYSQL | 3036.3 envíos por segundo | |
Desviación | 1.99 | |
RAM | 1.30GB / 3.67GB 35% | |
Swap | 0GB / 3.91 GB 0% | |
CPU | 60% |
ORACLE | 1839.9 envíos por segundo | |
Desviación | 28.30 | |
RAM | 1.52GB / 3.67 41% | |
Swap | 0GB / 3.91 GB 0% | |
CPU | 48% |
Entorno WINDOWS
MYSQL | 907.5 envíos por segundo | |
Desviación | 78.32 | |
RAM | 2.21GB / 3.67 58% | |
Virtual | 0.08GB / 1.99GB 4% | |
CPU | 100% |
ORACLE | 1349.7 envíos por segundo | |
Desviación | 78.67 | |
RAM | 2.34GB / 3.67 61% | |
Virtual | 0.07GB / 1.99 GB 3% | |
CPU | 93% |
Graficas
Resumen
DB | % RAM | % CPU | Envíos/s | Desviación | |
GNU/Linux | Mysql | 35 | 60 | 3036.3 | 1.99 |
Oracle | 41 | 48 | 1839.9 | 28.30 | |
Windows | Mysql | 58 | 100 | 907.5 | 78.32 |
Oracle | 61 | 93 | 1349.7 | 78.67 |
RAM y CPU
Envíos por segundo
Desviación
Conclusión
A partir de los resultados se puede observar como el mejor entorno para la base de datos es el sistema operativo GNU/Linux, Mysql tiente tanto ventajas y desventajas como Oracle. Con Mysql se puede mencionar que puede recibir un mayor envió de peticiones externas que Oracle, también se puede observar que el tiempo en atender cada solicitud es inferior que Oracle.
Por último se puede mencionar que tiene un mejor uso de RAM pero no del CPU en frente de Oracle. Oracle ofrece una gestión de la base de datos en si mas solida.
A partir de esto, la base de datos seleccionada es Mysql en el sistema operativo GNU/Linux tomando en cuenta los entornos en los cuales las pruebas fueron realizadas.
Referencias
[http://jmeter.apache.org/usermanual/functions.html]
[https://gist.github.com/beaudierman/5444977]
[http://dev.mysql.com/downloads/mysql/]
[http://meandmyubuntulinux.blogspot.com/2012/05/installing-oracle-11g-r2-express.html]
[http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html]
[http://www.adslzone.net/postp2070814.html]
[http://conky.sourceforge.net/]
[http://forum.notebookreview.com/windows-os-software/585646-desktop-info-conky-windows.html]