Comando ANALYZE y OPTIMIZE en MySQL

Iniciado por Skeletron, 20 Marzo 2010, 15:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola gente..
No logro entender que hace el comando ANALYZE...
Alguien me explica mejor?



Aqui tengo la respuesta:


seba123neo

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

Cita de: seba123neo en 20 Marzo 2010, 15:48 PM
ANALYZE TABLE
Que humor que tenes..
Tambien lo leí en español.. y tambien de un libro..
Se que analiza algo de los indices.. pero no entendí aun que hace..

seba123neo

Cita de: Skeletron en 20 Marzo 2010, 16:01 PM
Que humor que tenes..

:¬¬




otro por si no lo leiste

ANALYZE TABLE

y la traduccion de otro:


Mantenimiento de Tablas: ANALYZE

Para InnoDB, esta es una operación rápida - aunque no exactamente las estadísticas más confiables provienen de ella. La razón, es que con InnoDB, cuando se ejecuta ANALYZE TABLE (con el fin de actualizar la distribución de los índices), habrá 10 inmersiones al azar en cada índice, obteniendo como resultado la estimación de la distribución. Por lo tanto, ejecutar ANALYZE TABLEs en cadena puede (y probablemente) producen resultados diferentes cada vez que se ejecuta. Tenga en cuenta sin embargo, que esto provoca un bloqueo de escritura sobre la tabla.

Con MyISAM, esta operación puede tardar más. Sólo se pone un bloqueo de lectura, al hacerlo, pero en el lado positivo, las estadísticas recogidas es de confianza y la información que recibe es la correcta.

Una de las razones para emitir ANALYZE TABLE es cuando tenemos un montón de modificación de una tabla (INSERT o DELETE, por ejemplo), con el tiempo el optimizador no puede hacer la mejor elección cuando se trata de decidir si debe utilizar un índice específico o no. Al ejecutar ANALYZE TABLE, podemos ayudar a hacer una elección más correcta.ANALYZE ayuda optimizador de consultas para hacer decisiones exactas por un análisis detallado de los datos, a diferencia de optimizador de consultas que hace un análisis rápido.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

MMMMmmmmmmmmmmmmmmmmmm
Y cada cuanto tiempo es recomendable ejecutar ese comando? depende de la cantidad de isert y deletes simplemente?

seba123neo

nunca he utilizado ese comando por lo tanto no te sabria decir...aca hay otro que encontre:

La Elección de Índice:

Para elegir el índice que se utilizará en la consulta, el Planificador de MySQL busca los índices.
Resulta evidente la importancia que adquieren las estadísticas de los índices que almacena MySQL.
Si no están actualizadas las estadisticas, el planificador puede elegir utilizar un índice que, según sus estadísticas, devolverá 10 resultados y encontrarse con que realmente devuelve 300.000.
Para evitar la degradación de rendimiento resulta vital analizar y optimizar las tablas
periódicamente, sobre todo si el número de registros varía frecuentemente. Para ello debemos utilizar los comandos ANALYZE TABLE y OPTIMIZE TABLE. Esto hará que el Planificador tenga estadísticas actualizadas al elegir el índice.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

MMmmmmmmmmmmmmmmmmmm.....
Perfecto.
Podria agregar a mi servidor, en el "adminsitrador de tareas" que tiene, que ejecute un archivo .php con el script que ejecute esas 2 sentencias :)

^Tifa^

Creo que podria detallar esta imagen lo que dire a continuacion, esta imagen es un modelo de la arquitectura interna de un motor MySQL:




Algunos motores de MySQL poseen lo que se llama estadisticas de indices, que es una mini DB (imaginate una cache no reseteable  :xD ) que guarda los ultimos cambios realizados en la informacion de distribucion de indices (cuando digo ultimos cambios, la ultima vez que se ejecuto ANALYZE). Ahora, ya sabes lo de la estadisticas de indices porque existen?  porque el Optimizador interno de MySQL junto al planificador (PARSER) utiliza una llamada API al motor de almacenamiento de una tabla en cuestion, para enterarse cuantos indices tiene dicha tabla, y de que manera pueden ser utilizados.

Ahora si dicha informacion no es la mas actualizada, el motor de almacenamiento podria retornar datos erroneos al optimizador de MySQL (informacion out of date ... como sea que se diga en espanol, se lo que es, pero me cuesta saber como se dira en espanol ) entonces el optimizador interno lo que hace es dar uso de la estadistica de indices generadas la ultima vez. Y si das uso de EXPLAIN como yo  :rolleyes:  podria este, estar retornandote mala referencia de como optimizar tu consulta porque esta basandose en registros con otra estructura o cambios en relacion a una tabla.

Si utilizas Linux imaginate que quieres actualizar el sistema operativo, lo actualizaste hace 20 dias atras pero tu quieres ver si de 20 dias atras a la fecha han liberado paquetes nuevos, entonces que haces??? actualizas primero la base de datos interna del repositorio con el comando 'update' o no??? Luego haces un 'upgrade' pero sino haces previamente 'update' tu base de datos de repositorios tendra paquetes acorde a hace 20 dias atras, el no sabra si se liberaron o no paquetes nuevos si tu no lo actualizas  ;)  eso mismo ocurre aqui.

Das uso de ANALYZE para actualizar esa informacion de estadisticas de indices al optimizador interno de MySQL. Cada cuanto tiempo hay que usarlo? pues cada vez que agregues 1 o mas indices a una o mas tablas, cada vez que elimines de forma masiva registros, o insertes de forma masiva, etc. Asi actualizas la info y el optimizador interno te ayudara de mejor manera a elegir consultas SQL perfectas para  mantener optimizadas tus consultas.

:P

Skeletron

Wwowww.....
Perfecto..

Y el Optimize?

^Tifa^

Pues el optimizer esta ahi para servirte de guia en una consulta y optimizarla (Lee sobre EXPLAIN en MySQL). Y ya optimizada dicha consulta, si la aplicas pues los resultados seran retornados de manera mas rapida  ;)  una consulta que tarde 2 minutos, puede ser considerablemente reducida a segundos si sabes como optimizarla bien... (No mencione el Query Cache aca porke no aplica y porque no en todos los aspectos es beneficioso usarle).