Original post: http://anothermysqldba.blogspot.com/2013/05/mysql-server-tuning-question.html
Me encontré con esta oferta de trabajo el otro día
en elance.com o odesk.com.
La persona / empresa estaba buscando un "experto en optimización
del servidor MySQL". No es una preocupación importante, pero
al ver a MySQL MySQL escanda, que gi ve una …
Original Post: http://anothermysqldba.blogspot.com/2013/05/how-to-identify-mysql-slow-queries-and.html
Esta entrada de blog es parte de la serie de blog
Al arrancar un servidor MySQL nos podmeos encontrar en los logs un error similar al siguiente:
110510 9:29:06 [Warning] 'user' entry 'root@systemadmin.es' ignored in --skip-name-resolve mode.
Esto se debe a la contradicción que existe entre usar nombres DNS y decirle en la configuración que no los resuelva:
# grep resol /etc/my.cnf skip-name-resolve
Las entradas que deban resolver nombres simplemente se ignoraran en los permisos, por lo que podemos pasar a usar IPs o rangos de IPs en lugar de nombres. O bien, eliminar la opción skip-name-resolve del arranque del MySQL.
Tags: MySQL
Relacionados
Tal como vimos en la instalación de MySQL Cluster, el nodo de gestión (ndb_mgmd) se encarga de arbitrar el cluster. Vamos a ver cómo redundar dicho servicio.
Para añadir más de un nodo de gestión, deberemos modificar su fichero config.ini, añadiendo en la definición otro nodo, por ejemplo:
[ndb_mgmd] hostname=10.10.88.15 PortNumber=1186 datadir=/var/mysql/mgm nodeid=1 [ndb_mgmd] hostname=10.10.88.14 PortNumber=1186 datadir=/var/mysql/mgm nodeid=4
Deberemos recargar la configuración, si tenemos un nodo ya activo, con la opción –reload:
/opt/mysql-cluster/bin/ndb_mgmd --skip-daemon \ -f /usr/local/etc/mysql/config.ini --reload \ --configdir=/usr/local/etc/mysql/
En el otro nodo deberemos arrancar el nuevo daemon ndb_mgmd con la …
[Lea más]Hace un tiempo descubrí una característica (tal vez sea un bug) sobre los campos timestamp de MySQL. Es probable que este documentado en alguna parte que todavía no he leído:
Cuando se añade un campo timestamp a una tabla, MySQL agrega mágicamente algunas características al nuevo campo creado como un «trigger» y la fecha actual como valor por defecto.
Aquí esta el script donde se produce el caso:
-- CREANDO UNA TABLA CUALQUIERA E INSERTANDO DATOS mysql> create table t( -> id int not null primary key auto_increment, -> val varchar(50) -> ); Query OK, 0 rows affected (0.15 sec) mysql> insert into t (val) values ("foo") ,("var"); Query OK, 2 rows affected (0.08 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t; +----+------+ | id | val | +----+------+ | 1 | foo | | 2 | var | +----+------+ 2 rows in set (0.00 sec) -- AGREGANDO UN CAMPO TIMESTAMP Y MAS DATOS mysql> alter …[Lea más]
Algunos datos que pueden ser interesantes mostrar en un gráfico son las queries en la cache y la memoria libre de la query cache:
mysql> show status like 'Qca%'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | Qcache_free_blocks | 2 | | Qcache_free_memory | 400954376 | | Qcache_hits | 1014709429 | | Qcache_inserts | 149894868 | | Qcache_lowmem_prunes | 1785432 | | Qcache_not_cached | 57337894 | | Qcache_queries_in_cache | 26915 | | Qcache_total_blocks | 53982 | +-------------------------+------------+ 8 rows in set (0.00 sec)
Si mostramos las queries en cache en gráfico podemos obtener algo similar a:
Queries en cache
Para el caso …
[Lea más]En un post anterior comenté que no es suficiente mirar el Seconds_Behind_Master para saber si se esta replicando correctamente un MySQL, por lo que las herramientas de monitorización se deben adaptar a esto.
El siguiente script comprueba no sólo Seconds_Behind_Master, sino también Last_Errno para dar por buena la sincronización entre master y slave. Los dos únicos parámetros que debemos definir en el script son:
- SBMLIMIT: Número de segundos de retraso máximo que permitimos, no nos interesa que por una pequeña desincronización puntual nos este avisando
- AUTOSTARTSLAVE: Si debe intentar arrancar el slave en caso que se lo encuentre parado
Por otro lado, espera que el password de …
[Lea más]Cansado de tener que averiguar manualmente cuanto espacio ocupan mis bases de datos, acabo de crear un procedimiento almacenado para tener una vista global de las bases de datos que tenemos en nuestro servidor MySQL.
En MySQL no hay disponible un comando que nos permita tener una resumen global de las bases de datos, algo que se parezca a SHOW TABLE STATUS pero para todas las bases de datos. El comando SHOW DATABASES sólo lista las bases actuales pero no nos dice cuanto espacio ocupan o cuantas tablas hay, etc.
El procedimiento que escribí esta basado en la base de datos INFORMATION_SCHEMA, que contiene mucha información de todas las bases de datos existentes.
Ya antes en un post anterior mencioné que podemos tener todas estas «herramientas» en una base de datos llamada tools, es por eso que …
[Lea más]El MySQL a veces tiene comportamientos sorprendentes o acabas descubriendo porque stopped no es lo mismo que not running. Por ejemplo, comparando una cadena con un int puedes obtener resultados.
Vamos a suponer la siguiente tabla de ejemplo con datos:
mysql> create table test(id int, txt text); Query OK, 0 rows affected (0.03 sec) mysql> insert into test values(1,"uno"); Query OK, 1 row affected (0.00 sec) mysql> insert into test values(2,"dos"); Query OK, 1 row affected (0.00 sec) mysql> insert into test values(3,"tres"); Query OK, 1 row affected (0.00 sec)
Cualquier podría suponer que si comparamos el id con un string no obtendremos ningún resultado:
mysql> select * from test where id="asfsafsa"; Empty set, 1 warning (0.00 sec) mysql> show warnings; …[Lea más]
En los cambios de MySQL 5.5 a MySQL 5.6 podemos encontrar el siguiente comentario que puede sonar raro:
Important Change: Replication: Formerly, the value of the Seconds_Behind_Master column in the output of SHOW SLAVE STATUS was always set to NULL whenever the SQL thread or the I/O thread was stopped. Now, this column is set to NULL only if the SQL thread is not running, or if the I/O thread is not running following a check to determine whether or not the SQL thread has processed all of the relay log. (If the SQL thread has finished processing and the I/O thread is running, Seconds_Behind_Master is 0.) (Bug #12946333)
Suena raro que se diferencie entre “stopped” y “not running”, pero tiene su explicación.
Podemos encontrarnos que los Seconds_Behind_Master vayan …
[Lea más]