Estou trabalhando com um banco de dados Firebird 2.1.1 e comecei a ler sobre as tabelas de monitoramento.
Estou tentando ver de alguma forma em tempo real quais consultas cada cliente realiza no banco de dados.
Eu dei uma olhada na MON$STATEMENTS
tabela, mas ela não fornece muita informação. Eu esperava mais conteúdo dentro da tabela.
Estou procurando no lugar errado ou não entendi a finalidade/utilização das tabelas de monitoramento do Firebird?
Há uma série de coisas que você precisa saber ao usar as tabelas de monitoramento:
MON$STATEMENTS
) fornecem uma lista das instruções ativas ou preparadas no momento em que uma consulta foi executada.SYSDBA
, o proprietário do banco de dados ou um usuário com funçãoRDB$ADMIN
pode ver todas as informações, outros usuários só podem ver informações sobre suas próprias conexões.doc/README.monitoring_tables.txt
Agora, quanto à sua captura de tela: todas as declarações são da mesma conexão (sua própria):
MON$ATTACHMENT_ID = 1521
. Apenas uma instrução está atualmente ativa (MON$STATE = 1
) e participando da transaçãoMON$TRANSACTION_ID = 90964
e foi iniciada em 2012-12-06 10:08 (MON$TIMESTAMP
), o restante está inativo (MON$STATE = 0
) e, portanto, não possui id de transação e timestamp. A primeira instrução também é a única que atualmente possui uma consulta real (MON$SQL_TEXT
), que é a consulta que realmente produziu o resultado na captura de tela. No Firebird, as instruções são alocadas separadamente da consulta real a ser executada usando essa instrução.Isso não é muito, mas se você tivesse se juntado a
MON$RECORD_STATS
,MON$IO_STATS
ouMON$MEMORY_USAGE
com base emMON$STAT_ID
você teria recebido estatísticas sobre a consulta (ou seja, o número de leituras, atualização de registros, número de páginas lidas ou escritas, uso de memória). As tabelas de monitoramento mostram informações em um determinado momento no tempo, e se uma consulta já terminou quando você a executa, você não obtém nenhuma informação (não tenho 100% de certeza, mas pode permanecer disponível até a próxima execução de um declaração, ou até que a declaração seja despreparada ou fechada).Se, em vez disso, você precisar de um fluxo de informações e estatísticas, poderá obter mais da API do Firebird Trace. Eu ainda não usei muito, mas o artigo Audit and Trace Services in Firebird 2.5 de Thomas Steinmauer fornece uma boa introdução a ele.
Em sua pergunta, você diz que esperava 'mais conteúdo', mas na verdade não especificou qual conteúdo você precisa ou espera; Espero que isso forneça informações suficientes.