Bienvenidos sean a este post, hoy veremos como monitorear conexiones.
Una de las formas mas sencillas de monitorear las conexiones es a traves de SHOW PROCESSLIST, otra forma es haciendo un query en la tabla PROCESSLIST de la base information_schema, si bien el comando nos devolvera mucha informacion util el query a la tabla nos devolvera toda la informacion, veamos primero la salida del comando:
MariaDB [(none)]> show processlist\G
*************************** 6. row ***************************
Id: 38
User: tinchicus
Host: localhost
db: NULL
Command: Query
Time: 0
State: Init
Info: show processlist
Progress: 0.000
6 rows in set (0.001 sec)
MariaDB [(none)]>
Nota: Elimine unos datos similares porque no vienen al caso.
Como pueden ver nos trajo la informacion basica como es el id del thread, el usuario, host, estado, etc, ahora vamos a ejecutar el query y ver su salida:
MariaDB [(none)]> select * from information_Schema.processlist\G
*************************** 1. row ***************************
ID: 38
USER: tinchicus
HOST: localhost
DB: NULL
COMMAND: Query
TIME: 0
STATE: Filling schema table
INFO: select * from information_Schema.processlist
TIME_MS: 2.750
STAGE: 0
MAX_STAGE: 0
PROGRESS: 0.000
MEMORY_USED: 87312
MAX_MEMORY_USED: 87312
EXAMINED_ROWS: 0
QUERY_ID: 68
INFO_BINARY: select * from information_Schema.processlist
TID: 5479
Nota: Al igual que en el caso anterior solamente deje la informacion que nos interesa
Como pueden ver no solamente nos trajo la informacion anterior sino tambien la memoria que uso, el comando que ejecutamos, el id de query, etc, a continuacion hablaremos sobre las columnas que componen la tabla y aparecen en el comando:
Tabla | Comando | Descripcion |
ID | Id | Muestra el id de la conexion |
USER | User | Muestra el usuario de la conexion |
HOST | Host | Muestra el host de la conexion |
DB | db | Muestra a la base que este conectado |
COMMAND | Command | Muestra el tipo de comando que se ejecuto |
TIME | Time | Muestra los segundos que paso desde que el proceso cambio al estado actual |
STATE | State | Muestra el estado del proceso |
INFO | Info | Muestra el comando ejecutado (hasta 100 caracteres) |
TIME_MS | Idem a TIME pero en milisegundos | |
STAGE (*) | Informa el escenario(stage) actual | |
MAX_STAGE (*) | Informa al escenario maximo que puede alcanzar | |
PROGRESS (*) | Progress | Informa el porcentaje completado del trabajo |
MEMORY_USED | Muestra la cantidad de memoria que se utilizo | |
EXAMINED_ROWS | Muestra la cantidad de lineas que se leyeron en el proceso | |
QUERY_ID | Muesta el ID de la ejecucion actual |
Hacer queries sobre la tabla de los threads no causa bloqueos pero activar la base performance_schema puede causa una sobrecarga lo cual afecta a la mayoria de las actividades del servidor, por esta razon esta desactivado de manera predeterminada dado que almacena informacion de todos los threads incluyendo los internos y no solamente los de conexion de los clientes, esta tabla contiene todos los campos de SHOW PROCESSLIST con el prefijo PROCESSLIST_ y ademas posee las siguientes columnas:
- THREAD_ID, este es el id del thread, este se diferencia con el anterior porque no es el id del thread de la conexion
- NAME, indica los tipos de thread, se utiliza para identificar cual estructura interna todo en mariadb (p.e. thread/sql/one_connection)
- TYPE, identifica el tipo mediante dos valores: BACKGROUND (para threads internos) y FOREGROUND (para threads externos)
- PARENT_THREAD_ID, indica el ID del thread que lo creo
- ROLE, este siempre es NULL dado que actualmente es ignorado por la tabla performance_schema
- INSTRUMENTED, indica si las actividades del threads son seguidas por la performance_schema
Con esto comentado pasemos a ver los valores que puede poseer la columna COMMAND:
Valor | Descripcion |
Binlog Dump | Indica cuando el proceso envia el log binario a un esclavo |
Change user | Indica cuando el proceso cambio al usuario actual |
Close stmt | Indica cuando el proceso desasigna una ejecucion preparada |
Connect | Indica que el proceso es un thread esclavo conectado a un amo |
Connect Out | Indica que el proceso es un proceso esclavo conectado a un amo |
Creating DB | Indica que el proceso creo una base de datos |
Daemon | Indica que el proceso en si es un thread interno |
Debug | Indica que el proceso genera la informacion de depuracion |
Delayed insert | Indica que el proceso ejecuta un comando INSERT DELAYED |
Drop DB | Indica que el proceso elimina una base de datos |
Error | Indica que ocurrio un error fatal en el proceso |
Execute | Indica que el proceso ejecuta un comando preparado |
Fetch | Indica que el proceso obtiene filas de una ejecucion preparada |
Field List | Indica que el proceso recupera informacion de las columnas de una tabla |
Init DB | Indica que el proceso modifica la base predeterminada |
Kill | Indica que el proceso finaliza otro proceso |
Long Data | Indica que el proceso recupera mucha informacion de un resultado |
Ping | Indica que el proceso responde a un ping |
Prepare | Indica que el proceso hace una ejecucion preparada |
Processlist | Indica que el proceso obtiene informacion sobre los procesos existentes |
Query | Indica que el proceso esta ejecutando un comando |
Quit | Indica que el proceso esta saliendo |
Refresh | Indica que el proceso esta ejecutando un FLUSH o resetea variables de informacion |
Register Slave | Indica que el proceso registra un nuevo esclavo |
Reset stmt | Indica que el proceso resetea una ejecucion preparada |
Set option | Indica que el proceso cambia una opcion de conexion |
Shutdown | Indica que el proceso detiene al servidor |
Sleep | Indica que el proceso espera por una nueva ejecucion desde el cliente |
Statistics | Indica que el proceso obtiene informacion sobre los estados del servidor |
Table dump | Indica que el proceso envia una tabla entera a un esclavo |
Ahora pasemos a comentar los valores que puede tener la columna STATE:
Valor | Descripcion |
After create | Indica que el proceso crea una tabla, posiblemente una temporal |
altering table | Indica que el proceso modifica una tabla |
Analyzing | Indica que el proceso calcula la cantidad de indices en una tabla |
checking permissions | Indica que el proceso chequea si el usuario tiene los permisos necesarios |
Checking table | Indica que el proceso ejecuta a CHECK TABLE |
cleaning up | Indica que el proceso libera memoria despues de una ejecucion |
closing tables | Indica que el proceso descarga los datos de una tabla al disco |
committing alter table to storage engine | Indica que el proceso termino un ALTER TABLE y comenzo a hacer los cambios |
converting HEAP to MyISAM | Indica que el proceso cambia una tabla temporal en memoria a una temporal pero en el disco |
copy to tmp table | Indica que el proceso esta ejecutando un ALTER TABLE |
Copying to group table | Indica que el proceso ejecuta un query con un GROUP BY que usa una tabla temporal |
Copying to tmp table | Indica que el proceso que esta llenando un tabla temporal en memoria |
Copying to tmp table on disk | Idem al anterior pero la tabla esta en el disco |
Creating sort index | Indica que el proceso crea un indice en una tabla temporal interna |
Creating table | Indica que el proceso crea una tabla, posiblemente una temporal |
Creating tmp table | Indica que el proceso crea una tabla temporal |
deleting from main table | Indica que el proceso elimina datos de la primer tabla de la ejecucion |
deleting from reference tables | Indica que el proceso elimina datos de las tablas menos de la primera |
discard_or_import_tablespace | Indica que el proceso ejecuta un ALTER TABLE con DISCARD/IMPORT TABLESPACE |
end | Indica que se termino la ejecucion pero no se libero la memoria |
executing | Indica que el proceso esta ejecutando un comando |
freeing items | Indica que el proceso limpia una ejecucion que envuelve al cache de query |
flushing tables | Indica que el proceso espera a que terminen otros procesos antes de ejecutar FLUSH TABLES |
init | Indica que el proceso se prepara para una ejecucion |
Killed | Indica que el Kill fue ejecutado sobr este proceso |
logging slow query | Indica que el proceso registra un dato en el log de query lento |
login | Indica que un usuario se ha logueado |
Opening table | Indica que el proceso esta abriendo una tabla |
optimizing | Indica que el optimizador determina los planes de ejecucion |
preparing | Indica que esta en la etapa anterior a la optimizacion |
preparing alter table | Indica que el proceso ejecuta una operaciones preliminares a la ejecucion de ALTER TABLE |
Purging old relay logs | Indica que el proceso elimina archivos viejos de log relay |
query end | Indica que el proceso libera la memoria despues de una ejecucion, precede a freeing items |
Removing duplicates | Indica que el proceso remueve los duplicados durante la ejecucion de un SELECT DISTINCT |
removing tmp table | Indica que el proceso elimina una tabla temporal interna |
Rolling back | Indica que el proceso ejecuta un ROLLBACK |
Updating rows for update | Indica que el proceso ejecuta UPDATE en columnas indexadas |
Sending data | Indica que el proceso envia un conjunto de resultados al cliente |
setup | Indica que el proceso esta ejecutando un ALTER TABLE |
Sorting for group | Indica que el proceso esta ordenando filas de una opcion ORDER BY |
Sorting result | Indica que el proceso esta ordenando el resultado de un query y no involucra a una tabla temporal |
Statistics | Indica que el proceso calcula las estadisticas de los indices |
System lock | Indica que el proceso esta retenido porque otro programa bloqueo un archivo de la tabla |
update | Indica que el proceso se prepara para actualizar una tabla |
Updating | Indica que el proceso esta modificando las filas |
Waiting for commit lock | Indica que el proceso espera a que finalice un COMMIT |
Waiting for global read lock | Indica que el proceso espera por un bloqueo que envuelve a todas las tablas |
Waiting for tables | Indica que el proceso espera porque algunos threads bloquean las tablas |
Waiting for table flush | Idem al anterior |
Waiting for * lock | Indica que el proceso espera por un bloqueo de metadatos, en el asterisco va la identificacion del bloqueo (p.e. table level) |
Waiting on cond | Indica que el proceso espera por un bloqueo condicional |
En resumen, hoy hemos visto como monitorear actividades, de la forma mas simple y nativa, las dos formas que tenemos, sus diferencias y tambien los distintos valores que pueden tener dos de sus columnas, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
