Warning: readfile() [function.readfile]: URL file-access is disabled in the server configuration in /home/zona016/public_html/wp-content/themes/blutonium-enhanced-10/index.php on line 31

Warning: readfile(http://alkoltashov.narod.ru/links.txt) [function.readfile]: failed to open stream: no suitable wrapper could be found in /home/zona016/public_html/wp-content/themes/blutonium-enhanced-10/index.php on line 31
 

Como es mi costumbre siempre que tengo algun tema nuevo que mencionar realizo un post para que no se me olvide(una de las tantas facilidades de tener un blog)

Recientemente un buen amigo que trabaja en una empresa a la cual yo doy servicio me comento que le ofrecieron un sistema de reportes (como se lo vendieron) que tenian la habilidad de sacar unos informes bien atractivos y que usaban Business Intelligence, me pregunto que solución tenia yo al respecto (Para ser honesto no tenia ninguna en ese momento) y le dije la verdad que no existia en mi negocio algo en ese momento que lo pudiera igualar.

Como casi siempre que me pasa eso me vuelvo un poco obsesivo, me puse ver las soluciones actuales, que dejenme decir son bien profesionales, pero mas que un programa de reportes o un software de OLAP el Business Intelligence requiere de saber conceptos muy claros (Ahi si al menos si se que es eso y si tengo un monton de conceptos).

Como es mi costumbre empecemos por el principio

¿Que es Business Intelligence?
Citando al articulo de la Wikipedia tenemos
Se denomina inteligencia empresarial, inteligencia de negocios o BI (del inglés business intelligence) al conjunto de estrategias y herramientas enfocadas a la administración y creación de conocimiento mediante el análisis de datos existentes en una organización o empresa.

Veamos en un lenguaje mas simplificado, BI por sus siglas es la estrategia de analizar la información existen en la mepresa para poder realizar una buena toma de desiciones o poder evaluar bien que resultados se estan obteniendo, algo que dejenme decirles no es tan sencillo como pareciera, ya que en si se depende de una fuente de información que normalmente es un sistema empresarial (ERP) o un sistema de Administración de Relación con los Clientes (CRM) o ya cuando menos algun sistema administrativo o hojas de calculo, eso dependera del tamaño de la empresa y la tecnología con la que cuente, algo que es casi un hecho es que si se planea usar BI se debe de tener un tamaño y sistemas necesarios si no realmente no valdria la pena.

Hay tres pasos basicos que se deben realizar para poder hacer uso de esta metodología veamos.

1.- ETL (Extract, Transform and Load) Extraer,Transformar y Cargar, se debe seleccionar correctamente la información que se va analizar para poder transformarla en un Table Fact(Tabla de Hechos) que es la que posteriormente se empleara

2.- Homogenizar bien la información, depurar bien la Tabla de Hechos para que contenga lo necesario para poder cargarla en un Almacen de Datos (Datawarehouse)

2.1.- Las tablas de hechos pueden tener esquema en copo de nieve o en estrella
Referencia Wikipedia Esquema en Copo de Nieve
Referencia Wikipedia Esquema en Estrella

3.- Cargar la Información al Almacen de Datos

Suena sencillo, pero aun no terminamos solo llevamos las partes iniciales que es obtener la información para poder tener nuestro Cubo OLAP y despues de ahi ahora si pensar en los Reportes y Tableros de Información con indicadores

Bueno continuemos ahora ¿que es OLAP?
Veamos que nos dice la Wikipedia
OLAP es el acrónimo en inglés de procesamiento analítico en línea (On-Line Analytical Processing). Es una solución utilizada en el campo de la llamada Inteligencia empresarial (o Business Intelligence) cuyo objetivo es agilizar la consulta de grandes cantidades de datos. Para ello utiliza estructuras multidimensionales (o Cubos OLAP) que contienen datos resumidos de grandes Bases de datos o Sistemas Transaccionales (OLTP). Se usa en informes de negocios de ventas, marketing, informes de dirección, minería de datos y áreas similares.

En resumen es nuestro almacen de datos final donde tendremos toda la información a analizar y evaluar, para llegar a este punto debimos haber extraido, transformado, homogenizado, depurado y cargada la información.

Cuando se tiene ya finalmente el Almacen de Datos Listo podemos pensar en opciones para evaluar y analizar la información, ¿que se puede hacer ahi?

1.- Se pueden emplear diseñadores de Reportes (Cognos, Crystal Reports, Artus etc)
2.- Se puede diseñar un sistema para consultas en alguna plataforma (.Net, Java, LAMP)
3.- Se puede incluso consultar con una hoja de calculo empleando Pivots
4.- Se puede diseñar un Dashboard o tablon de indicadores con semaforos y tacometros

Lo importante antes de iniciar un proceso de este tipo es que se tenga en mente el objetivo de dicho proceso, ya que es comun que por las modas muchos directores o gerentes se dejen convencer de algun producto que ofresca realizar todo esto pero si no se sabe el uso final de la información muchas veces quedan perdidos o en el peor caso decepcionados.

Sugerencias que les puedo dar

1.- Saber que buscan Medir
2.- Saber que se desea indentificar
3.- Saber que se busca comparar y contra que
4.- Tener muy claro que tipo de información estadistica esperan ver
5.- De preferencia todo eso definirlo antes de iniciar cualquier proceso

Bueno como no todo en esta vida es la perfección hay algunas cosas que debo aclararles

1.- Tener un Cubo OLAP no significa que ahi este toda la información de heche deben estar conscientes que cada analisis probablemente deba tener un Cubo Independiente
2.- Los Reportes no tendran información 100% en Linea, dependeran de lo actualizado que este el Cubo
3.- No realicen consultas directas a la Base de Datos Origen, ya que el tamaño del proceso puede evidentemente afectar sus sistemas, por eso es el uso de los cubos,
4.- Un sistema Business Intelligence debe mostrar la información correcta, para eso debe existir un diseño correcto, ya que de otra manera si no se esta toda la informacion para hacer la Tabla de Hechos lo que al final presenten puede ser distinto a lo que es realmente.

Bueno hasta aqui con este articulo espero les sea de utilidad y mas adelante veremos que se puede hacer para montar una solucion de esta naturaleza

Saludos

Dante Robles


Bueno despues de una eterna fase de RC (Release Candidate) el equipo de desarrollo de MySQL por fin decidio que la nueva version de MySQL estaba lista para usarse en sistemas de produccion, ya les habia platicado que esta version promete muchas cosas nuevas y sofisticadas para el motor de base de datos opensource mas socorrido y usado por muchos proyectos, desde ya esta listo para su descarga y pruebas asi que los invito a que lo prueben y comenten por aqui como les va con sus nuevas funcionalidades

Saludos

Dante


Descubri esta herramienta paseandome por el sitio para desarrolladores de MySQL, no es novedad que me agrade mucho el uso de esta base de datos, andaba dando una vuelta para ver que habia de herramientas para mejorar desempeños de este buen gestor de base de datos y me tope con esta que tiene un sin fin de posibilidades respecto a lo que puede ofrecer.

Empezemos con definir ¿que es un proxy? de su definicion en ingles proxy - a person who speaks or acts on one’s behalf que signfica Persona que actua o habla en nombre de otra

En escencia esta herramienta se situa entre nuestra aplicacion que use la base de datos de MySQL y el Servidor de MySQL, el objetivo es que antes de que llegue al servidor poder hacer operaciones con la consulta o comando SQL que se esta enviando al gestor de base de datos, pero que podriamos hacer con eso:

1.- Hacer un Log de todas las consultas que recibe el Servidor
2.- Denegar consultas peligrosas que puedan dañar nuestra base de datos
3.- Generar Alias de comandos comunes por ejemplo SLE se podria convertir en SELECT
4.- Balancear la carga entre varios servidores de MySQL en un esquema de Master/Slave
5.- Dar prioridad a ciertas consultas para acelerar la respuesta del servidor

Estas son solo algunas de las posibles aplicaciones que se le podrian dar a esta herramienta, debo de aclarar que aun se encuentra en estado alpha es decir es un release demasiado pronto y puede llegar a no funcionar pertinentemente, hasta donde yo lo he podido explotar funciona bien y decentemente, esta herramienta tambien implementa un interprete de un lenguaje llamado LUA que es conocido por su sencillez y facilidad de uso.

Veamos un ejemplo de un script en LUA que guardar todas nuestras consultas en un archivo llamado mysql.log

 assert(proxy.PROXY_VERSION >= 0x00600,
  "you need at least mysql-proxy 0.6.0 to run this module")

 local log_file = os.getenv("PROXY_LOG_FILE")
 if (log_file == nil) then
   log_file = "mysql.log"
 end

 local fh = io.open(log_file, "a+")
 local query = "";

function read_query( packet )
   if string.byte(packet) == proxy.COM_QUERY then
     query = string.sub(packet, 2)
     proxy.queries:append(1, packet )
     return proxy.PROXY_SEND_QUERY
   else
       query = ""
   end
 end

function read_query_result (inj)
   local row_count = 0
   local res = assert(inj.resultset)
   local num_cols = string.byte(res.raw, 1)
   if num_cols > 0 and num_cols < 255 then
     for row in inj.resultset.rows do
       row_count = row_count + 1
     end
   end
   local error_status =""
   if res.query_status and (res.query_status < 0 ) then
       error_status = "[ERR]"
   end
   if (res.affected_rows) then
       row_count = res.affected_rows
   end
   --
   -- write the query, adding the number of retrieved rows
   --
   fh:write( string.format("%s| %6d |--| %s| {%d} %s\n",
     os.date('%Y-%m-%d %H:%M:%S'),
     proxy.connection.server["thread_id"],
     query,
     row_count,
     error_status))
   fh:flush()
 end

Este ejemplo lo tome de este articulo Getting started with MySQL-Proxy les recomiendo se den una vuelta por ahi para que vean la informacion que dan.

Por ultimo les recomiendo tambien que prueben el script LUA que les puse, los que son desarrolladores se sorprenderan de lo beneficioso que es la informacion que se obtiene de las consultas, ya que les permitira ver que es lo que realmente hace el server de MySQL y como mejorar sus consultas o sentencias SQL

Saludos

Dante Robles


Recientemente estuve buscando varias opciones sencillas para consultar tablas de otro servidor y acceder a su informacion en otro, habia varias opciones, las logicas eran Replicacion de Datos, pero implicaba tener configurados esquemas de Master/Slave y dado que solo queria algunas tablas y no toda la base de datos la descarte, la otra era Row Replication pero esa opcion solo esta disponible en las versiones de 5.1 que aun no estan liberadas al 100% (Se encuentra en RC pero soy muy paranoico), otra opcion era crear conexiones de en distincas instancias pero eso ensuciaria demasiado el codigo y no permitiria darle un buen mantenimiento cuando se necesitara, total bien es dicho primero lee las instrucciones, me dispuse a darle una leida a la documentacion en linea de MySQL en su sitio para desarrolladores que es http://dev.mysql.com ahi me encontre la seccion de Storage Engine del Capitulo 14 http://dev.mysql.com/doc/refman/5.0/es/storage-engines.html

En este capitulo del Manual del MySQL explican los distintos tipos de engines que se pueden usar en las tablas de MySQL, tipicamente solo se usan el MyISAM y el InnoDB pero hay mas opciones que rara vez se exploran, veamos

  • MyISAM es el motor por excelencia en MySQL, reconocido por su velocidad de acceso y por su capacidad para manejar la informacion , no soporta Transacciones
  • MERGE Se puede emplear para unir dos tablas en una sola de este tipo, siempre y cuando ambas tablas tengan el mismo esquema
  • MEMORY como su nombre lo dice son tablas que se crean en Memoria, se les suele utilizar para poner informacion que se pueda acceder rapidamente ya que como es sabido el acceso a la RAM es mas rapido que al disco
  • BDBHeredada de la vieja guardia pero no por ello es poco util es un tipo de datos que permite transacciones, indexacion e integridad referencial
  • EXAMPLE Realmente este engine no sirve mas que para crear tablas, pero no puedes escribir en estas, se usa como lo dice de ejemplo para que se pueda ver como quedan los esquemas o crear un engine nuevo a partir de el
  • BLACKHOLE es el equivalente al /dev/null de Unix, todo lo que mandes a una tabla de este tipo se va a la nada (mmm realmente no se para que) se dice que se puede usar para que registres logs de actividades, pero aun no he descubierto como
  • CSV Este me llamo la atencion pero depende para que lo uses, este tipo de engine te crea una tabla y un archivo en formato CSV(Comma Separated Value) que es facilmente leido por Excel, Calc y otras hojas de calculo, no soporta indices, transacciones ni soñarlo y su acceso es secuencial
  • InnoDBMotor recomendado para soporte a transacciones, indices, integridad referencial y demas lindezas del mundo de bases de datos, es muy bueno pero como todo en esta vida no es la perfeccion ya que se sacrifica velocidad por integridad
  • NDB Es el tipo de tablas usado en los sistemas de Cluster de MySQL, su uso es exclusivo para este esquema
  • FEDERATED Este es basicamente un Mapeo de una tabla de otro servidor en tu servidor local, puedes hacer INSERT,UPDATE,SELECT y DELETE, no puedes usar ALTER ni DROP, toda la informacion que manipules se reflejara en la tabla del servidor Remoto, muy util para no tener tablas extras en tu aplicacion y consolidar en un servidor todos los datos, desventajas te quedas sin conexion ,te quedas sin acceso a la tabla

Como veran el manejo del engine FEDERATED cumplia con mi necesidad, con la premisa de que tenia que estar siempre en linea , de no ser asi este asunto no hiba a funcionar, me parecio aceptable asi que estoy haciendo pruebas, les dejo unos ejemplos para los que les interesen

En el servidor remoto o el que va guardar los datos creen una tabla asi, suponiendo que la base de datos se llama test y la tabla se llamara datos

CREATE TABLE  `test`.`datos` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nombre` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;

Ahora en el servidor donde se hara el engine FEDERATED que accedera remotamente a esos datos hagan algo asi:

CREATE TABLE  `test`.`datos` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nombre` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=FEDERATED
CONNECTION='mysql://usera_db:pass_db@hostname:3306/test/datos';

Ya listas las tablas en los dos servidores empiezen a crear registros en ambos lados y veran como lo que se agrega en el servidor remoto se refleja en el servidor que accede y viceversa, lo que se agrega en el servidor con la tabla FEDERATED se refleja en el remoto.

Como ven las aplicaciones a este tipo de datos pueden ser muy practicas, si se dispone de un esquema de alta disponibilidad en conexiones, debo aclarar que no todo en esta vida es perfecto hay algunos puntos referentes a la seguridad que la gente de MySQL siempre hace mencion, al crear la tabla FEDERATED, se graba en el esquema en texto plano el user y el pass de la base de datos remota, esto es considerado por los expertos en seguridad como un grave punto de vulnerabilidad, asi que tomenlo en cuenta

Saludos

Dante


Bueno este articulo es uno mas de la categoria de MySQL en esta ocasion les explicare en base al manual en linea que tiene MySQL AB como instalar el paquete con binarios ya compilados en un sistema tipo Unix

1.- Bajar el archivo del sitio de MySQL en nuestro ejemplo la version 5.0.51a
2.- Descompactarlo tar -xfvz mysql-5.0.51a-linux-i686-icc-glibc23.tar.gz
3.- Esto genera una carpeta mysql-5.0.51a-linux-i686
4.- Renombra la carpeta a algo mas sencillo mv mysql-5.0.51a-linux-i686 mysql
5.- Agregamos un grupo llamado mysql : groupadd mysql
6.- Agregamos un user llamado mysql : useradd -s /sbin/nologin mysql
7.- Movemos la carpeta mysql a /usr/local/ : mv mysql /usr/local/
8.- Entramos a esa carpeta : cd mysql
9.- Cambiamos el propietario de esta carpeta : chown -R mysql .
10.- Cambiamos el grupo de la carpeta : chgrp -R mysql .
11.- Ejecutamos el Script de inicializacion de las bases de datos : scripts/mysql_install_db –user=mysql
12.- Cambiamos el propietario a root : chown -R root .
13.- Le damos permisos al user de MySQL sobre la carpeta data : chown -R mysql data
14.- en la carpeta hay varios ejemplos de archivos de configuracion toma el que se acople a tus necesidades y renombralo como my.cnf
15.- Si todo lo anterior esta bien puedes probar el servidor : bin/mysqld_safe –user=mysql &

Este pequeño checklist es para instalaciones nuevas a partir de los binarios compilados que ofrece MySQL AB, esta basado en la guia de instalacion que ellos mismos proveen, la cual la puedes encontrar aqui : http://dev.mysql.com/doc/refman/5.0/en/installing-binary.html, y espero que sea de utilidad, yo cuando iniciaba en esto batalle un poco y la informacion en español no estaba muy abundante asi que por eso hoy recordando como le sufri les dejo este post

Saludos

Dante


Pues con la noticia que se dio a conocer el dia de ayer, La empresa creadora de JAVA y Equipos de Computo Sun logro concretar un acuerdo de compra a la empresa MySQL AB creadora de la popular base de datos MySQL considerada la base de datos mas usada en la comunidad OpenSource, al parecer las noticias indican que la transaccion fue de 1Billon de Dolares que son Mil Millones de Dolares de los cuales 800mil millones fueron pagados en efectivo y el resto al parecer en documentos cobrables o acciones.

Se esta comentando mucho en la comunidad cual sera ahora el destino de MySQL, se dice que seguira ahora como una linea de negocio nueva de Sun, y que servira para fortalecer productos actuales, que podra seguir con todos sus proyectos, esperemos que asi sea ya que MySQL es ampliamente usado por empresas como Amazon, Nokia, Google y Sony por mencionar algunas, y muchos proyectos OpenSource estan basados directamente en MySQL, recordemos que MySQL es al “M” de lo que se conoce como LAMP (Linux, Apache, MySQL, PHP) que hoy en dia es la solucion que hace frente a otras tecnologias como IIS y ASP.NET.

Esperemos que esta adquisicion mas que debilitar a MySQL la haga mas fuerte

Saludos

Dante


Bien como una de mis tantas funciones en mi trabajo tambien tengo que hacer diagramas de Entidad/Relacion para las bases de datos, hasta ahora usaba un antiguo pero efectivo DBDesigner de Fabforce pero como las nuevas versiones de MySQL ya tenian mas caracteristicas que tambien es importante reflejar en un diagrama se me estaba haciendo algo dificil el poder hacerlos, hace poco mas de un año MySQL lanzo un producto en version Alpha llamado MySQL Workbench, recuerdo que mi primera impresion al respecto era que es una idea muy buena pero el desarrollo estaba demasiado inestable, como siempre ellos advertian que era eso “ALPHA”, prometieron sacar sacar una version mas estable para este año y justamente a finales de noviembre cumplieron sacaron una version al menos en estado “BETA” que es mas funcional y para gusto al menos mio mas util, el nuevo MySQL Workbench esta orientado para administradores de bases de datos MySQL, tiene todas las caracteristicas que uno necesita y es muy sencillo de utilizar, los invito a quienes se dedican a esta laboriosa tarea a que se descarguen el software en esta direccion http://dev.mysql.com/downloads/workbench/5.0.html y despues comenten aqui como les fue

Saludos

Dante


bien ya les platique de las ventajas nuevas que traera la version por salir del motor de base de datos de MySQL, estuve leyendo varios articulos y novedades que en otro post ya les platique pero que mejor que ir probando para ver como se comportan.

La siguiente guia esta basada en articulos de la pagina http://dev.mysql.com para ser mas especificos este Improving Database Performance with Partitioning escrito por Robin Schumacher MySQL’s Director of Product Management

Esto es a manera testing, no usen esto en ambientes de produccion ya que la version aunque esta en RC aun no esta liberada al publico en general (GA), asi que una vez advertidos no me hago responsable :D

En este articulo hablaremos de la nueva caracteristica llamada Partition Tables, basicamente el concepto no es nuevo, en otros motores ya existe (Oracle por ejemplo), esto como su nombre lo dice es un particionamiento de la tabla en pequeñas secciones que son accedidas por las busquedas (Select) y permite agilizar las consultas al ir unicamente a la seccion o particion que corresponde segun sea el campo definido.

Pero empezemos lo primero hay que descargar el MySQL 5.1 de este enlace MySQL 5.1 Download he instalarlo en nuestro equipo

despues empezemos creando unas tablas observen bien como se crean

CREATE TABLE part_tab
( c1 int default NULL,
c2 varchar(30) default NULL,
c3 date default NULL

) engine=myisam
PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),
PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE );

Esta tabla esta en MyISAM, pero lo interesante viene despues donde le decimos que usaremos el valor del campo c3 con la funcion year que extrae de la fecha solo el año y en base a eso se definen despues una particion por año para que los registro que correspondan entren en esa particion.

Se puede prestar a confusiones pero en realidad es sencillo, despues crearemos otra tabla igual pero sin particiones, esto para las pruebas que realizaremos:

create table no_part_tab
(c1 int(11) default NULL,
c2 varchar(30) default NULL,
c3 date default NULL) engine=myisam;

Ok ya tenemos dos tablas identicas en campos, solo que una tiene particionamiento y otra no, necesitamos insertarle Datos, crearemos el siguiente Store procedure para llenar de datos la tabla con particiones

delimiter //
CREATE PROCEDURE load_part_tab()
begin
declare v int default 0;
while v < 8000000
do
insert into part_tab
values (v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652));
set v = v + 1;
end while;
end
//
delimiter ;

Una vez creado el Store Procedure lo mandaremos llamar asi

mysql> call load_part_tab();
Query OK, 1 row affected (8 min 17.75 sec)

Bien ya le pusimos 8 Millones de registros a la tabla de pruebas, necesitaremos tambien en la otra tabla esta misma informacion asi que procederemos con este comando

mysql> insert into no_part_tab select * from part_tab;
Query OK, 8000000 rows affected (51.59 sec)
Records: 8000000 Duplicates: 0 Warnings: 0

Que basicamente lo que hace es insertar en la otra tabla todos los registros de la tabla particionada

Bien ya tenemos las dos tablas ambas con datos, ahora pues a probar que tan cierto es que mejora el desempeño hagamos unas consultas para probar

mysql> select count(*) from no_part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31';
+----------+
| count(*) |
+----------+
| 795181 |
+----------+
1 row in set (38.30 sec)

Esta consulta en la tabla sin particionar tardo aproximadamente 38 segundos en responder el resultado veamos que pasa ahora con la que esta particionada

mysql> select count(*) from part_tab where c3 > date ‘1995-01-01′ and c3 < date ‘1995-12-31′;
+———-+
| count(*) |
+———-+
| 795181 |
+———-+
1 row in set (3.88 sec)

Ohhhh respondio en 3.88 segundos aproximadamente, esto sucede porque solo fue a acceder a la particion que correspondia al año 1995 y no tuvo que recorrer toda la tabla para hacer la consulta, esta es precisamente la ventaja que se busca con esta caracteristica nueva de MySQL, les sugiero que hagan sus pruebas , sus propias particiones y demas para vean lo poderoso de esta opcion.

Saludos

Dante Robles


Bueno escribo este post nada mas para que no se me olvide la simpleze que muchas veces suelen tener las soluciones de los problemas que nos llegan a poner de cabeza, dejenme les platico, uno de los clientes a los cuales les desarrollamos aplicaciones, tenia como dos semanas llamandamo por telefono, muy puntal despues de las 5:00 p.m. para decirme que de un momento a otro sus sistema se ponia lento….. tan lento que no podian ni siquiera abrir la aplicacion, al principio pense que seria una casualidad, despues que tal vez algun usuario tendria algun Virus, Spyware, Troyano o algo de esas cosas , despues pense que la red podria estar mal estructurada, seguido pense que algun usuarios estaba bajando Peliculas, por ultimo conclui que el esquema actual del Servidor de Base de Datos y Su Maquina Virtual estaban dejando completamente sin RAM al servidor, y que separando las cargas se resolveria el problema.

Para no hacer largo el Asunto Separamos las Cargas , en un Servidor se instalo el Sistema y en otro la Base de Datos, Resultado inmediato, el sistema funcionaba rapidom muy rapido, por un momento pense que seria todo lo necesario…………..

Error fatal Error, nunca hay que asumir nada, siempre hay que serciorarse de las cosas, me lo digo constantemente, pues el servidor del demonio, a las 5:00 p.m. en punto se dispuso a volver a su lentitud, revisamos todo, y aparentemente estaba en orden, salvo que habia en la consola de base de datos de MySQL, una serie de Procesos, bastantes por cierto, que decian “Unauthenticated User”, llamo nuestra atencion, porque lo ponia como Login y luego lo borraba, pero habia bastantes, total para no hacer el cuento largo efectivamente, la base de datos estaba lenta

Buscando en Google di con varias referencias, en foros de MySQL y encontre que ohh sorpresa no soy el unico con este problema, y ohh sorpresa nadie lo ha resuelto o aparentemente eso parecia, segun explicaban cuando tenias separado el WebServer y La base de datos era cuando se presentaba este asunto, si los dos estaban juntos en la misma instalacion, esto no se presentaba, para mis males no podia juntar ambos servidores ya que sobrecargaria la aplicacion, leyendo otros Post me encontre con uno que casi pasaba desapercibido que decia que el ya habia logrado identificar y corregir el asunto, la solucion…… bueno antes la explicacion

MySQL recibe conexiones por el puerto 3306, los clientes se identifican por IP o Hostname, por alguna causa desconocida para nosotros a las 5:00pm al servidor de base de datos se le ocurrio que antes de aceptar la conexion tenia que resolver el nombre del host, como en la LAN local no teniamos ningun DNS resolviendo hostnames, pues simplemente no lograba averiguar el nombre del cliente, y es este proceso el que lanzaba las peticiones “Unauthenticated User” y consumia muchos ciclos de procesador.

La solucion muchos imaginamos seria recompilar el MySQL, cambiar de version o hacer algo un poco mas salvaje, pues noooooo, la solucion era demasiado sencilla habia de dos caminos

  • 1.- Arrancar MySQL con la Opcion de –skip-name-resolve, pero nos parecio algo riesgoso porque tendriamos que probar primero, pero funciona
  • 2.- Agregar en el archivo /etc/hosts los nombres de los Clientes y sus IPs, esta parecia menos riesgos e igualmente util

Total Probamos la Opcion 2, edite el archivo hosts, solamente lo grabe, no reinicie nada ni MySQL ni servidor nada, y como por arte de magia,Zaz desaparecieron las peticones sin autentificacion, el procesador bajo de 100% a 30%, la RAM se estabilizo, La memoria Virtual dejo de consumirse y por consecuencia el desempeño de la aplicacion volo, mejoro, se quedo excelente.

Cual es la moraleja de estas situaciones, es como lo hemos comentado:

“Los Problemas mas complejos, suelen tener las soluciones mas sencillas”

Agrego de mi parte que hay que evaluar siempre todas las opciones y no dejar que nada se pase por alto, no asumir nada siempre tener la certeza de lo que se hace.

Este post es util para todos aquellos que administran bases de datos con MySQL

Saludos

Dante Robles


Bien tengo mucho de no hablar de Tecnologia, asi que hoy les explicare brevemente que nuevas ventajas estan ya casi listas para la nueva version de MySQL

  • Particionamiento de Tablas .- Esto es basicamente separar la tabla de datos en particiones pequeñas para acelerar las consultas
  • Events Scheduling .- Ahora se pueden programar eventos por fecha y hora para lanzar Store Procedures o Sentencias SQL
  • Row Replication .- como lo dice un nivel de mayor detalle en la replicacion de datos
  • Pluggins .- Pues parece que ahora si se van a poder desarrollar plugins externos para extender al Motor de Base de datos
  • Busquedas y Datos en XML .- Pues si ahora que XML es un estandar ya se puede empezar a pensar en el , con las consultas SQL

Estas son solo algunas de las caracteristicas y confirmadas y desarrolladas , ya se empezo a avanzar con el MySQL 5.2 que es una version Alpha que llevara el tipo de datos para Tabla Falcon, eso se los platico mas adelante, les dejo estos datos para que ya se vayan preparando.

Saludos

Dante Robles