RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

Archive for the ‘ Base de Datos ’ Category

Este post es la continuacion del post  [ Tuning MySQL Server ], asi que recomiendo leer este antes de continuar con este post,  pero si eres de esos apuraditos no habra nada que te detenga.

Saber el funcionamiento interno de nuestro servidor, conocer los archivos a modificar, leer la documentacion sobre los parametros que debemos setear y sobre todo encontrar la forma de hacer un benchmarking, esto todo lo que esta atras de este post.

Hace algunas semanas me puse a "tunear" (yo tuneo, el tunea, vosotros tuneais) el servidor MySQL Enterprise Server que adquirio la empresa donde trabajo, pero luego me pregunte: "Como demuestro que mi tuning ha sido un exito y que he mejorado el performance de mi servidor de base de datos?"  (son dudas existenciales que no te dejan vivir), asi que me puse a buscar algo de informacion y al parecer muy pocas personas se habian hecho la misma pregunta que yo, no encontre ningun blog que hablara sobre como medir el rendimiento de MySQL, hasta que San Google me dio algunas herramientas que podia usar, asi que escogi la que me parecio la mejor opcion: mysql-bench.

Si ustedes han compilado las fuentes de MySQL pues ustedes ya cuentan con la carpeta sql-bench en donde estan los scripts a usar (la encontraran en algun lado pero depende de donde hayan hecho la instalacion del software), por otro lado si ustedes han instalado MySQL con rpm’s tendran que instalar tambien el rpm correspondiente, en Fedora el rpm se llama mysql-bench-5.0.45-6 (tambien hay un rpm para Suse, lo se porque tambien lo he probado).

Al instalar este rpm estan instalando unos scripts en perl que lo que hacen son consultas y medir el tiempo de respuesta de nuestro servidor MySQL (inserts, alters, select, etc etc), lo que les recomiendo es leer la documentacion que trae esta herramienta, la documentacion y los scripts se encuentran en /usr/share/sql-bench/.

Bueno iniciemos nuestras pruebas de performance, lo primero que debemos hacer es correr los scripts con el my.cnf que viene por defecto, el script que debemos correr es:

sql-bench]# perl run-all-tests –server=MySQL –user=’root’ –password=’password’

Nota: Lean todas las opciones que trae el scipt run-all-test (lo pueden hacer con run-all-test –help)

Cuando termine de correr el script arrojara un resumen del tiempo que demoro en ejecutar todos los scripts, el tiempo es medido en una unidad llamada wallclock (que mide tiempo de red, tiempo del procesador y de acceso al disco, tomemoslo como una medida nueva y propia de la herramienta) y desde luego hay que correr el script despues de haber modificado el archivo my.cnf con los nuevos parametros y de haber reiniciado MySQL.

En mi caso los resultados fueron:

RESULTADOS ANTES DE MODIFICAR MY.CNF

alter-table: Total time: 79 wallclock secs ( 0.01 usr  0.14 sys +  0.00 cusr  0.00 csys =  0.15 CPU)
ATIS: Total time: 26 wallclock secs ( 4.58 usr  2.67 sys +  0.00 cusr  0.00 csys =  7.25 CPU)
big-tables: Total time: 20 wallclock secs ( 0.79 usr  4.99 sys +  0.00 cusr  0.00 csys =  5.78 CPU)
connect: Total time: 262 wallclock secs ( 8.27 usr 81.05 sys +  0.00 cusr  0.00 csys = 89.32 CPU)
create: Total time: 289 wallclock secs ( 1.35 usr 11.48 sys +  0.00 cusr  0.00 csys = 12.83 CPU)
insert: Total time: 3032 wallclock secs (158.97 usr 456.75 sys +  0.00 cusr  0.00 csys = 615.72 CPU)
select: Total time: 478 wallclock secs (19.21 usr 43.93 sys +  0.00 cusr  0.00 csys = 63.14 CPU)
transactions: Test skipped because the database doesn’t support transactions
wisconsin: Total time: 23 wallclock secs ( 1.49 usr 11.02 sys +  0.00 cusr  0.00 csys = 12.51 CPU)

RESULTADOS DESPUES DE MODIFICAR MY.CNF

alter-table: Total time: 70 wallclock secs ( 0.01 usr  0.07 sys +  0.00 cusr  0.00 csys =  0.08 CPU)
ATIS: Total time: 11 wallclock secs ( 4.60 usr  1.82 sys +  0.00 cusr  0.00 csys =  6.42 CPU)
big-tables: Total time: 11 wallclock secs ( 0.86 usr  4.39 sys +  0.00 cusr  0.00 csys =  5.25 CPU)
connect: Total time: 224 wallclock secs ( 8.77 usr 41.84 sys +  0.00 cusr  0.00 csys = 50.61 CPU)
create: Failed (output/create-MySQL-Linux_2.6.23.14_i686)
insert: Total time: 2116 wallclock secs (159.04 usr 141.21 sys +  0.00 cusr  0.00 csys = 300.25 CPU)
select: Total time: 131 wallclock secs (15.36 usr 31.04 sys +  0.00 cusr  0.00 csys = 46.40 CPU)
transactions: Test skipped because the database doesn’t support transactions
wisconsin: Total time: 20 wallclock secs ( 1.46 usr  9.15 sys +  0.00 cusr  0.00 csys = 10.61 CPU)

Como veremos hay mucha diferencia entre los tiempos, ahora si lo ponemos en unas barritas con la ayuda de nuestro excel, se ve mas bonito:

benchmarking

Popularity: 2% [?]

Tuning MySQL Server

Noviembre 3, 2008 | 4 Comments | Linux, MySQL

sakila_switchboardInstalar MySQL Server y comenzarlo a usar es muy sencillo, puede ser tan sencillo como saber instalar un rpm, quizas usar yum o apt-get y funcionara sin ningun problema, pero acaso dejar las opciones por defecto es suficiente? se podrian sorprender de la cantidad de opciones que tiene este sistema gestor de base de datos.

Escuchar frases como: "MySQL es una base de dato para principiantes", "MySQL es solo para pruebas", "MySQL es solo para empresas medianas"; son frases que han quedado en el pasado (alla por el 2004 y estamos a puertas del 2010), hablar ahora de MySQL es hablar de un sistema gestor de base de datos serio, rapido, de uso en empresas grandes y en sistemas de produccion y sobre todo practico, que no tiene  nada que envidiar a otras bases de datos y que ademas no tiene porque ser gratis ya que cuenta con un soporte segun las necesidades de nuestra organizacion.

Bueno volvamos al tema, hacer un tuning de nuestro servidor MySQL no es muy complicado solo requiere tener los conocimientos de como funciona nuestro servidor MySQL, por cuestiones de tiempo no podre explicar todo asi que solo mostrare donde hacer los cambios basicos.

El archivo que debemos modificar es my.cnf (en Windows no recuerdo el nombre, pero usen Linux es mucho mejor jejejeje), por lo general el archivo esta en /etc/my.cnf y debemos modificarlo para mejorar el rendimiento de nuestro servidor, en Fedora el archivo no contiene casi nada y las variables inician con sus valores por defecto, en mi caso mi archivo my.cnf quedo de esta manera:

Noten que todas las varibles deben estar dentro de la etiqueta mysqld.

[mysqld]

port = 3306
socket = /var/lib/mysql/mysql.sock
skip-lockingkey_buffer = 16
M
max_allowed_packet = 1M
table_cache = 64net_buffer_length = 8Kmyisam_sort_buffer_size = 8M
bind-addres= 0.0.0.0

## Ubicacion del log de consultas que superen long-query-time###
log-slow-queries=/var/log/mysql-slow.log
## Maximo tiempo antes de que se almacene en mysql-slow.log ###
long_query_time=3
## Almacene consultas en mysql-slow.log que no tengan indices ##
log-queries-not-using-indexes
## Cache para para llaves, se recomienda que sea el 25% de la memoria fisica total###
key_buffer_size=1024M
## Mejora la cache para consultas que contengan ORDER BY ####
read_rnd_buffer_size=4M
## Mejora el rendimiento de consultas GROUP BY ###
sort_buffer_size=512K
## Aumenta el buffer de lectura ###

read_buffer_size=4M
## Aumenta el buffer para el insert ###

bulk_insert_buffer_size=16M
## Aumenta buffer para consultas JOIN ###

join_buffer_size=1M

## aumenta cache de los ilos por conexion ##
thread_cache_size=1M
query_cache_size=64M
##Maximo de 50 conexiones simultaneas####
max_connections=50
##Tiempo maximo de conexion sin enviar informacion (3600 segundos)###
wait_timeout=3600

Coloque una breve explicacion a algunas opciones pero no a todas, les recomiendo que lean el manual de MySQL para saber que funcion cumplen todas los parametros colocados.

Pero como saber que nuestro servidor MySQL ha mejorado su rendimiento? pues eso lo tratare en el siguiente post.

Seria interesante que comenten sobre el uso de MySQL, es decir si lo usan para servicios en produccion y que tipos de servicios. Saludos!

Popularity: 5% [?]

Tambien pueden descargar el video desde: [DESCARGAR]

Popularity: 13% [?]

Después de tres meses de inactividad (me refiero a la inactividad del blog, por si acaso), hoy 14 de Octubre del 2008 lo estoy retomando; es una mezcla de sentimientos debido a que encuentro mi blog desactualizado totalmente y alegre porque hay muchísimos comentarios pendientes por moderar, muchísima gente que me agrego al MSN para hacerme consultas, muchos correos recibidos (la mayoría no los he contestado) y hasta empresas que me han estado llamando a mi trabajo para hablar sobre algunos temas tratados en el blog.

retomarLa inactividad de mi blog se debió a muchos factores, que enumeraré:

1.- La universidad: Vaya que me quito tiempo pero ya es cosa del pasado, ya egrese. Así como lo escuchan soy egresado de Ing. de Sistemas.
2.- El trabajo: Junto con la universidad hicieron que mi tiempo libre fuera casi nulo.
3.- Mi certificación: Me estoy certificando en CCNA.
4.- Problemas personales: No estoy para contar esas cosas, disculpen.

Pero bueno….. he decidido retomar el Blog con algunos cambios sobre la "política" de este modesto blog (ya se enterarán).

Sin duda uno de los temas mas solicitados en el Blog durante mi ausencia fue Pentaho, a que pensando en ellos me tome la tarde de mi domingo (si señores me tome la tarde de MI DOMINGO, mientras ustedes dormían y otros veían las eliminatorias mundialistas este pechito estaba grabando un video tutorial con Camtasia) y realice un video de la Instalación de Pentaho, el video muestra como instalar la suite de Pentaho 1.7, siendo sincero antes de comenzar a grabar pensaba en un video pequeño de 20 minutos como máximo pero terminó siendo del doble de tiempo a pesar de que notaran (los que vean el video) que deseaba explicar mas cosas como el archivo /etc/profile pero cuando lo iba a explicar me detenía el pensar que el video se extendería mucho y me desanimaba de explicarlo en pleno video jajaja.

Bueno aquí esta el enlace para el video tutorial [DESCARGAR VIDEO TUTORIAL DE PENTAHO]

Popularity: 1% [?]

"He visto que en tu primer video tutorial usaste phpMyAdmin con un graficador Entidad Relacion, como lo hiciste? ", aunque no lo crean son como 10 personas que me han escrito una frase similar a esta a mi correo de hotmail pero no las he contestado por varias razones:

- No puedo estar contestando a todos los que me escriben al correo por falta de tiempo (imaginense que me ponga a responder todos los correos desde mi trabajo pues no avanzaria nada con mi trabajo)
- Y lo mas importante!! si contesto a uno lo mas seguro es que luego otra persona despues de un tiempo me pregunte lo mismo, formando asi un bucle infinito de respuestas.

Debido a esos dos motivos lo que suelo decirles es que dejen su comentario en el blog de manera que cuando otra persona entre al blog se vea beneficada con la respuesta, en fin…. resolvamos de una vez la inquietud.

DIAGRAMA E/R EN phpMyAdmin

Lo primero que debemos tener en cuenta es que esto no funciona con cualquier version de phpMyAdmin, funciona con versiones mayores o iguales a 2.10, yo recomiendo que descargen la ultima version disponible desde la pagina oficial de phpMyAdmin [Pagina oficial]

Despues de haberlo descargado, debemos descomprimirlo en nuestra carpeta raiz de nuestro servidor Apache (o quizas algun virtual host, eso ya depende de ustedes).

Dentro de la carpeta creada despues de haberlo descomprimido existe una carpeta llamada scripts y dentro de esta existen dos scripts llamados create_tables.sql y create_tables_mysql_4_1_2+.sql, debemos ejecutar el script segun la version de nuestro servidor MySQL, para versiones de MySQL menores a 4.1.2 ejecutar create_tables.sql y para versiones superiores ejecutar create_tables_mysql_4_1_2+.sql estos scripts crearan una base de datos llamada "phpmyadmin", esta base de datos cuenta con la infraestructura de linked-tables.

Despues de eso debemos editar el archivo de configuracion de phpMyAdmin: config.inc.php; en este archivo dedemos descomentar las siguientes directivas, para luego quedar de la siguiente manera:

$cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin’;
$cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark’;
$cfg['Servers'][$i]['relation'] = ‘pma_relation’;
$cfg['Servers'][$i]['table_info'] = ‘pma_table_info’;
$cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords’;
$cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages’;
$cfg['Servers'][$i]['column_info'] = ‘pma_column_info’;
$cfg['Servers'][$i]['history'] = ‘pma_history’;
$cfg['Servers'][$i]['designer_coords'] = ‘pma_designer_coords’;

La informacion exacta sobre cada parametro la pueden encontrar en la documentacion de phpMyAdmin en la siguiente URL: [Doc. phpMyAdmin].

Despues de eso debemos ingresar a phpMyAdmin mediante nuestro browser, ingresar a una base de datos que tenemos creada y observaremos una pestaña adicional que dice "Diseñador", damos click sobre la pestaña y con eso ya tenemos instalada la opcion de E/R de phpMyAdmin.

No deben olvidar que las tablas deben estar relacionadas y deben estar creadas bajo el motor INNODB, aqui les dejo una imagen del diseñador. Ojala y comenten todos los que me han preguntado por el correo.

phpmyadmin_designer

Popularity: 23% [?]