systemadmin.es > DBA > Patch al MySQL 5.1 para guardar el timestamp cuando aumenta el max_used_connections

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

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>