Anuncios

Bienvenidos sean a este post, hoy veremos como monitorear conexiones.

Anuncios

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)]>
Anuncios
Nota: 
Elimine unos datos similares porque no vienen al caso.
Anuncios

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
Anuncios
Nota: 
Al igual que en el caso anterior solamente deje la informacion que nos interesa
Anuncios

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:

TablaComandoDescripcion
IDIdMuestra el id de la conexion
USERUserMuestra el usuario de la conexion
HOSTHostMuestra el host de la conexion
DBdbMuestra a la base que este conectado
COMMANDCommandMuestra el tipo de comando que se ejecuto
TIMETimeMuestra los segundos que paso desde que el proceso cambio al estado actual
STATEStateMuestra el estado del proceso
INFOInfoMuestra el comando ejecutado (hasta 100 caracteres)
TIME_MSIdem a TIME pero en milisegundos
STAGE (*)Informa el escenario(stage) actual
MAX_STAGE (*)Informa al escenario maximo que puede alcanzar
PROGRESS (*)ProgressInforma el porcentaje completado del trabajo
MEMORY_USEDMuestra la cantidad de memoria que se utilizo
EXAMINED_ROWSMuestra la cantidad de lineas que se leyeron en el proceso
QUERY_IDMuesta el ID de la ejecucion actual
(*) Estos funcionan solo si el comando ejecutado soporta el reporte de progreso
Anuncios

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
Anuncios

Con esto comentado pasemos a ver los valores que puede poseer la columna COMMAND:

ValorDescripcion
Binlog DumpIndica cuando el proceso envia el log binario a un esclavo
Change userIndica cuando el proceso cambio al usuario actual
Close stmtIndica cuando el proceso desasigna una ejecucion preparada
ConnectIndica que el proceso es un thread esclavo conectado a un amo
Connect OutIndica que el proceso es un proceso esclavo conectado a un amo
Creating DBIndica que el proceso creo una base de datos
DaemonIndica que el proceso en si es un thread interno
DebugIndica que el proceso genera la informacion de depuracion
Delayed insertIndica que el proceso ejecuta un comando INSERT DELAYED
Drop DBIndica que el proceso elimina una base de datos
ErrorIndica que ocurrio un error fatal en el proceso
ExecuteIndica que el proceso ejecuta un comando preparado
FetchIndica que el proceso obtiene filas de una ejecucion preparada
Field ListIndica que el proceso recupera informacion de las columnas de una tabla
Init DBIndica que el proceso modifica la base predeterminada
KillIndica que el proceso finaliza otro proceso
Long DataIndica que el proceso recupera mucha informacion de un resultado
PingIndica que el proceso responde a un ping
PrepareIndica que el proceso hace una ejecucion preparada
ProcesslistIndica que el proceso obtiene informacion sobre los procesos existentes
QueryIndica que el proceso esta ejecutando un comando
QuitIndica que el proceso esta saliendo
RefreshIndica que el proceso esta ejecutando un FLUSH o resetea variables de informacion
Register SlaveIndica que el proceso registra un nuevo esclavo
Reset stmtIndica que el proceso resetea una ejecucion preparada
Set optionIndica que el proceso cambia una opcion de conexion
ShutdownIndica que el proceso detiene al servidor
SleepIndica que el proceso espera por una nueva ejecucion desde el cliente
StatisticsIndica que el proceso obtiene informacion sobre los estados del servidor
Table dumpIndica que el proceso envia una tabla entera a un esclavo
Anuncios

Ahora pasemos a comentar los valores que puede tener la columna STATE:

ValorDescripcion
After createIndica que el proceso crea una tabla, posiblemente una temporal
altering tableIndica que el proceso modifica una tabla
AnalyzingIndica que el proceso calcula la cantidad de indices en una tabla
checking permissionsIndica que el proceso chequea si el usuario tiene los permisos necesarios
Checking tableIndica que el proceso ejecuta a CHECK TABLE
cleaning upIndica que el proceso libera memoria despues de una ejecucion
closing tablesIndica que el proceso descarga los datos de una tabla al disco
committing alter table to storage engineIndica que el proceso termino un ALTER TABLE y comenzo a hacer los cambios
converting HEAP to MyISAMIndica que el proceso cambia una tabla temporal en memoria a una temporal pero en el disco
copy to tmp tableIndica que el proceso esta ejecutando un ALTER TABLE
Copying to group tableIndica que el proceso ejecuta un query con un GROUP BY que usa una tabla temporal
Copying to tmp tableIndica que el proceso que esta llenando un tabla temporal en memoria
Copying to tmp table on diskIdem al anterior pero la tabla esta en el disco
Creating sort indexIndica que el proceso crea un indice en una tabla temporal interna
Creating tableIndica que el proceso crea una tabla, posiblemente una temporal
Creating tmp tableIndica que el proceso crea una tabla temporal
deleting from main tableIndica que el proceso elimina datos de la primer tabla de la ejecucion
deleting from reference tablesIndica que el proceso elimina datos de las tablas menos de la primera
discard_or_import_tablespaceIndica que el proceso ejecuta un ALTER TABLE con DISCARD/IMPORT TABLESPACE
endIndica que se termino la ejecucion pero no se libero la memoria
executingIndica que el proceso esta ejecutando un comando
freeing itemsIndica que el proceso limpia una ejecucion que envuelve al cache de query
flushing tablesIndica que el proceso espera a que terminen otros procesos antes de ejecutar FLUSH TABLES
initIndica que el proceso se prepara para una ejecucion
KilledIndica que el Kill fue ejecutado sobr este proceso
logging slow queryIndica que el proceso registra un dato en el log de query lento
loginIndica que un usuario se ha logueado
Opening tableIndica que el proceso esta abriendo una tabla
optimizingIndica que el optimizador determina los planes de ejecucion
preparingIndica que esta en la etapa anterior a la optimizacion
preparing alter tableIndica que el proceso ejecuta una operaciones preliminares a la ejecucion de ALTER TABLE
Purging old relay logsIndica que el proceso elimina archivos viejos de log relay
query endIndica que el proceso libera la memoria despues de una ejecucion, precede a freeing items
Removing duplicatesIndica que el proceso remueve los duplicados durante la ejecucion de un SELECT DISTINCT
removing tmp tableIndica que el proceso elimina una tabla temporal interna
Rolling backIndica que el proceso ejecuta un ROLLBACK
Updating rows for updateIndica que el proceso ejecuta UPDATE en columnas indexadas
Sending dataIndica que el proceso envia un conjunto de resultados al cliente
setupIndica que el proceso esta ejecutando un ALTER TABLE
Sorting for groupIndica que el proceso esta ordenando filas de una opcion ORDER BY
Sorting resultIndica que el proceso esta ordenando el resultado de un query y no involucra a una tabla temporal
StatisticsIndica que el proceso calcula las estadisticas de los indices
System lockIndica que el proceso esta retenido porque otro programa bloqueo un archivo de la tabla
updateIndica que el proceso se prepara para actualizar una tabla
UpdatingIndica que el proceso esta modificando las filas
Waiting for commit lockIndica que el proceso espera a que finalice un COMMIT
Waiting for global read lockIndica que el proceso espera por un bloqueo que envuelve a todas las tablas
Waiting for tablesIndica que el proceso espera porque algunos threads bloquean las tablas
Waiting for table flushIdem al anterior
Waiting for * lockIndica que el proceso espera por un bloqueo de metadatos, en el asterisco va la identificacion del bloqueo (p.e. table level)
Waiting on condIndica que el proceso espera por un bloqueo condicional
Anuncios

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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50