Más sobre Trace Manager

Deja un comentario

En este artículo del blog ya habíamos visto como se usa el programa FBTRACEMGR.EXE y cual es su utilidad:

Usando Trace Manager

ahora veremos otra característica muy interesante de ese programa: sesiones múltiples.

Cuando ejecutamos el programa podemos indicarle el nombre de la sesión y podemos tener varias sesiones ejecutándose simultáneamente y cada una de esas sesiones monitoreando distintas actividades.

¿Por qué haríamos algo así?

Porque si una sola sesión se encarga de monitorear todo entonces los resultados que obtendremos estarán todos mezclados. Estarán todos, sí, pero todos mezclados y por lo tanto realizar cualquier búsqueda en ellos nos puede hacer demorar mucho tiempo. Suele ser mejor separar las actividades.

Así, por ejemplo, podríamos tener una sesión que solamente se encargará de monitorear los INSERTs a las tablas, otra sesión se encargará de monitorear los UPDATEs, otra los DELETEs, otra los stored procedures, otra los triggers, etc. Esto nos permitirá tener todo más ordenado y las búsquedas serán rapidísimas.

Ejemplo 1: Queremos monitorear los INSERTs

Nuestro archivo de configuración podría ser algo como:

TRACE1

Captura 1. Si haces clic en la imagen la verás más grande

Y llamaríamos al programa FBTRACEMGR.EXE de esta manera:

TRACE2

Captura 2. Si haces clic en la imagen la verás más grande

Si ahora hacemos un INSERT en una tabla (por ejemplo en la tabla de BANCOS) escribiendo:

TRACE3

Captura 3. Si haces clic en la imagen la verás más grande

el FBTRACEMGR.EXE nos mostrará algo como esto:

TRACE4

Captura 4. Si haces clic en la imagen la verás más grande

¡¡¡BUENÍSIMO!!! No solamente vemos que ocurrió un INSERT en la tabla de Bancos sino también cual fue el comando que se escribió. Y mirando un poco más arriba también sabremos quien fue el usuario, la computadora, la fecha, la hora, el número de la transacción y los parámetros de la transacción. Un montón de información que nos será muy útil si estamos buscando errores.

Ejemplo 2: Queremos monitorear los UPDATEs

Ahora, nuestro archivo de configuración sería algo como:

TRACE5

Captura 5. Si haces clic en la imagen la verás más grande

Como puedes ver es muy parecido al anterior pero con el nombre de archivo y el filtro cambiados porque ahora lo que nos interesa es monitorear los UPDATE.

Lo interesante de esto es que si abrimos otra ventanita “Símbolo del sistema” y en esta nueva ventanita ejecutamos al programa FBTRACEMGR.EXE con este archivo de configuración entonces tendremos dos sesiones: una que se encarga de monitorear a los INSERTs y otra que se encarga de monitorear a los UPDATEs. Muy bueno.

TRACE6

Captura 6. Si haces clic en la imagen la verás más grande

Usamos la ventanita (1) para escribir comandos SQL, cuando uno de esos comandos es un INSERT la ventanita (2) nos mostrará sus datos y cuando el comando es un UPDATE entonces la ventanita (3) será la que mostrará los datos de la operación.

Conclusión:

Poder tener muchas sesiones abiertas al mismo tiempo es muy útil porque nos permite trabajar en forma más ordenada. De esta manera podemos tener una sesión encargada de monitorear los INSERTs, otra sesión encargada de monitorear los UPDATEs, y así sucesivamente.

Aunque en estos ejemplos la salida del programa FBTRACEMGR.EXE fue siempre hacia la pantalla lo normal y lo recomendable es que la salida sea hacia un archivo de texto, como vimos en el artículo anterior.

Artículos relacionados:

Usando Trace Manager

El índice del blog Firebird21

Anuncios

FOR SELECT y tablas CTE

1 comentario

Si en un stored procedure o en un trigger escribimos algo como:

WITH CONSULTAS AS (
   SELECT
      CLI_IDENTI,
      CLI_NOMBRE
   FROM
      CLIENTES
 )

 FOR SELECT

cuando compilamos ese código veremos un mensaje de error: “token unknown FOR”

¿Qué significa ese mensaje?

Que quisimos usar como palabra clave una palabra que para el Firebird no puede ser usada como tal en ese lugar.

¿Y por qué eso?

Porque la tabla CTE es parte del FOR SELECT y por lo tanto debe encontrarse adentro, no afuera. La sintaxis correcta es:

FOR WITH CONSULTAS AS (

o sea que en este caso no se usa un FOR SELECT sino un FOR WITH

Artículo relacionado:

El índice del blog Firebird21

Usando Trace Manager

11 comentarios

Con la versión 2.5 de Firebird se agregó algo que puede ser muy útil: Trace Manager.

¿Qué hace Trace Manager?

Nos permite conocer todas las conexiones realizadas a una Base de Datos y todas las transacciones, en tiempo real, o sea apenas ocurren.

El programa que realiza esta tarea se llama FBTRACEMGR.EXE y lo encontrarás en la carpeta \BIN\ de tu instalación del Firebird.

Tarea a realizar:

Queremos monitorear todas las actividades que realiza el Servidor del Firebird, para ello necesitaremos hacer lo siguiente:

  1. Crear un archivo de configuración donde podremos determinar, entre otras cosas:
    • Monitorear todo lo que ocurre en una conexión
    • Monitorear todas las actividades de un usuario
    • Monitorear todas las transacciones en una o varias bases de datos
  2. Ejecutar el programa FBTRACEMGR.EXE con el archivo de configuración anterior
  3. Opcionalmente (y preferiblemente) en lugar de enviar los resultados a la pantalla del monitor podemos enviarlos a un archivo de texto y de esa manera será muy fácil posteriormente revisar ese archivo de texto y conocer exactamente lo que ocurrió en la Base de Datos

Enconces, empezaremos creando con el bloc de notas del Windows un archivo de texto donde guardaremos la configuración a utilizar:

TRACE1

Captura 1. Si haces clic en la imagen la verás más grande

Las de arriba no son las únicas opciones posibles, hay más, en la Captura 2 las encontrarás a todas:

TRACE2

Captura 2. Si haces clic en la imagen la verás más grande

Ahora que ya hemos creado un archivo de configuración podemos ejecutar el programa FBTRACEMGR.EXE y empezar a monitorear todo lo que acontece dentro de la Base de Datos.

TRACE3

Captura 3. Si haces clic en la imagen la verás más grande

En lugar de localhost: puedes necesitar escribir la dirección IP de tu Servidor, opcionalmente seguido por una barra y el número del puerto de conexión, algo como:

192.168.0.1/3051:

Abrimos ahora otra ventana “Símbolo del sistema” y ejecutamos en ella el programa ISQL.EXE y nos conectamos a una Base de Datos para ver lo que sucede con nuestro monitoreo:

TRACE4

Captura 4. Si haces clic en la imagen la verás más grande

Y en la otra ventana del sistema (en la cual habíamos ejecutado el programa FBTRACEMGR.EXE) vemos esto:

TRACE5

Captura 5. Si haces clic en la imagen la verás más grande

“Trace session ID 3 started” nos indica que esta es la tercera sesión del TraceManager que hemos iniciado hoy.

“TRACE_INIT” nos indica que se inició el Trace.

“COMMIT_TRANSACTION” nos indica que una transacción terminó con un COMMIT.

“ATT_4979” nos indica que esta es la conexión número 4.979 a la Base de Datos desde que fue creada.

“SYSDBA” nos indica quien fue el usuario que se conectó a la Base de Datos. El “:NONE” después de su nombre nos indica que no usó un rol para conectarse. Si un usuario utiliza un rol, el nombre de ese rol aparecerá aquí.

“XNET:WALTER-PC” nos indica la forma de conexión (a través de XNET en este caso, también podría haber sido a través de una dirección IP) y el nombre de la computadora (o la dirección IP si aplica).

“C:\Archivos de programa\…” es el nombre del programa que se usó para conectarse a la Base de Datos. En este caso el nombre de ese programa fue ISQL.EXE pero lo normal es que se trate del nombre de tu aplicación (Contabilidad, Facturación, Ventas, Sueldos, etc.)

“TRA_90742” es el número de la transacción. En este caso fue la transacción número 90.742.

“CONCURRENCY | WAIT | READ_WRITE” indican los parámetros de la transacción. En este caso la transacción fue SNAPSHOT, WAIT, READ WRITE, en otros casos podría ser: READ COMMITTED, NO WAIT, READ ONLY, REC_VERSION, NO_REC_VERSION, etc.

“START_TRANSACTION” nos indica que se inició una transacción.

“EXECUTE_TRIGGER_FINISH” nos indica que finalizó la ejecución de un trigger cuyos datos vemos un poco más abajo.

Y bueno, puede mostrarte más información relacionada pero ya la puedes descubrir por tí mismo, para eso eres lo suficientemente inteligente como para entender lo que ocurre.

Si quieres que el programa FBTRACEMGR.EXE no envíe la información a la pantalla sino que la envíe a un archivo de texto le puedes redireccionar la salida con el símbolo mayor que, como se muestra a continuación:

TRACE6

Captura 6. Si haces clic en la imagen la verás más grande

Entonces, más tarde podrás revisar el contenido del archivo MONITOREO1.TXT (desde luego que ese nombre es un ejemplo, tú puedes elegir cualquier otro nombre).

TRACE7

Captura 7. Si haces clic en la imagen la verás más grande

Conclusión:

Poder “trazar” las operaciones que ocurren dentro de una Base de Datos puede resultarnos muy pero muy útil cuando vemos que hay problemas con ella, por ejemplo si hay transacciones que no terminan eso nos indica un problema con una aplicación (Contabilidad, Facturación, Ventas, etc.) y debemos encontrar cual es el módulo que abrió una transacción pero nunca la cerró porque las transacciones que se abren y nunca se cierran solamente pueden causar problemas y nunca nos otorgarán algún beneficio. También podemos saber si un usuario se conectó hoy, a que hora se conectó, que operaciones realizó, etc.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21