Patch al MySQL 5.1 para guardar el timestamp cuando aumenta el max_used_connections
En MySQL existe el contador Max_used_connections que se va incrementando a medida que el número de threads concurrentes crece: Funciona como una high-water mark, marca el número máximo de threads que ha llegado durante la vida del proceso mysqld, pero no sabemos cuando ha sido la última vez que se ha llegado a dicho nivel.
mysql> show status like 'Max_used%'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Max_used_connections | 219 | +----------------------+-------+ 1 row in set (0.01 sec)
Muchas veces resulta interesante saber cuando se ha llegado por última vez a dicho nivel para diagnosticar problemas, para ello he hecho el siguiente patch para MySQL 5.1 que añade un timestamp cuando se aumenta el contador max_used_connections:
diff -Naur mysql-5.1.53 mysql-5.1.53_max_used_ts/
diff -Naur mysql-5.1.53/sql/mysqld.cc mysql-5.1.53_max_used_ts/sql/mysqld.cc
--- mysql-5.1.53/sql/mysqld.cc 2010-11-03 14:39:53.000000000 +0100
+++ mysql-5.1.53_max_used_ts/sql/mysqld.cc 2011-01-26 11:21:58.000000000 +0100
@@ -418,6 +418,7 @@
static uint kill_cached_threads, wake_thread;
static ulong killed_threads, thread_created;
static ulong max_used_connections;
+static ulong max_used_connections_ts;
static ulong my_bind_addr; /**< the address we bind to */
static volatile ulong cached_thread_count= 0;
static const char *sql_mode_str= "OFF";
@@ -5020,6 +5021,10 @@
if (connection_count > max_used_connections)
max_used_connections= connection_count;
+ if (connection_count >= max_used_connections)
+ max_used_connections_ts= (ulong)my_time(0);;
+
+
pthread_mutex_unlock(&LOCK_connection_count);
/* Start a new thread to handle connection. */
@@ -7655,6 +7660,7 @@
{"Key_writes", (char*) offsetof(KEY_CACHE, global_cache_write), SHOW_KEY_CACHE_LONGLONG},
{"Last_query_cost", (char*) offsetof(STATUS_VAR, last_query_cost), SHOW_DOUBLE_STATUS},
{"Max_used_connections", (char*) &max_used_connections, SHOW_LONG},
+ {"Max_used_connections_ts", (char*) &max_used_connections_ts, SHOW_LONG},
{"Not_flushed_delayed_rows", (char*) &delayed_rows_in_use, SHOW_LONG_NOFLUSH},
{"Open_files", (char*) &my_file_opened, SHOW_LONG_NOFLUSH},
{"Open_streams", (char*) &my_stream_opened, SHOW_LONG_NOFLUSH},
Gracias a esto obtenemos del SHOW STATUS no solo el máximo de threads concurrentes que ha tenido dicho MySQL, sino también la última vez que ha llegado a dicho nivel con la variable Max_used_connections_ts:
mysql> show status like 'Max_used%'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | Max_used_connections | 27 | | Max_used_connections_ts | 1296037707 | +-------------------------+------------+ 2 rows in set (0.00 sec)
Para aplicar dicho parche deberemos seguir las siguientes instrucciones (para MySQL 5.1. Primero descargamos el parche:
cd /usr/local/src/ svn export http://nagios-systemadmin.googlecode.com/svn/trunk/patchs/patch.mysql.51.max_used_connections_ts.patch
A continuación entramos en el directorio del MySQL y aplicamos el parche, por ejemplo para un mysql-5.1.53:
cd mysql-5.1.53 patch -p1 < ../patch.mysql.51.max_used_connections_ts.patch
A continuación compilamos e instalamos el MySQL normalmente y ya lo tendremos disponible una vez reiniciado el daemon. Ya he solicitado que se añada la característica y he mandado el parche, a ver si hay suerte y la añaden.
Relacionados
Imprimir
Deja un comentario: