Monitoramento leve
Novo recurso — monitoramento leve baseado em um plugin de trace que atualiza
contadores em tempo real. Os contadores ficam em memória compartilhada, o que
funciona bem no Classic Server. As atualizações não usam locks. O tamanho
padrão da memória compartilhada é 4 MB e não muda após a inicialização.
Isso mantém o acesso aos contadores quase sem locks. O tamanho pode ser
alterado com o parâmetro MemorySize do plugin (veja abaixo).
Hoje há um conjunto pequeno de contadores. O monitoramento cobre dois tipos de objetos: bancos e conexões. No nível do banco há um conjunto separado para conexões finalizadas, para acumular estatísticas.
API do serviço
Para ler os dados foi criado um novo serviço:
/* Lightweight monitoring */
#define isc_action_svc_lwmonitoring 32O serviço tem dois parâmetros. O primeiro escolhe a operação. Hoje existe só “executar consulta”:
#define isc_spb_lwm_query 1Há quatro tipos de consulta (abaixo). Passe o número (1–4) como valor inteiro
de isc_spb_lwm_query.
O segundo parâmetro — nome do banco — é opcional e usa a tag isc_spb_dbname.
Se definido, a consulta fica limitada a esse banco; senão retorna dados de todos
os bancos conhecidos.
Formato da resposta
Todas as consultas devolvem texto, uma linha por elemento. Um elemento pode descrever um banco, uma conexão ou um agregado. As linhas são JSON.
A primeira linha é sempre o cabeçalho:
{"idQuery" : 1, "tsQuery" : "2024-04-17T00:17:58" }- idQuery
- número da consulta (ID)
- tsQuery
- início da consulta (hora local do servidor, ISO-8601)
Consulta 1 — resumo
Resumo dos bancos e conexões conhecidos. Sempre uma linha:
{"cntDb" : 1, "activeAtt" : 1, "goneAtt" : 0}- cntDb
- número de bancos
- activeAtt
- conexões ativas
- goneAtt
- conexões finalizadas
Consulta 2 — lista de bancos
Uma ou mais linhas:
{"dbName" : "SECURITY2.FDB", "activeAtt" : 1, "goneAtt" : 2}- dbName
- nome do arquivo do banco
- activeAtt
- conexões ativas
- goneAtt
- conexões finalizadas
Consulta 3 — resumo por banco
Uma ou mais linhas:
{"dbName" : "SECURITY2.FDB", "activeAtt" : 1, "goneAtt" : 0, "doneTran" : 1, "activeTran" : 0, "prepReq" : 0, "execReq" : 0, "activeReq" : 0}- dbName
- nome do arquivo do banco
- activeAtt
- conexões ativas
- goneAtt
- conexões finalizadas
- doneTran
- transações concluídas
- activeTran
- transações ativas
- prepReq
- statements preparados
- execReq
- statements executados
- activeReq
- statements ativos
Contadores adicionais:
- rowsFetched
- linhas devolvidas à aplicação
- execTime
- tempo de execução, ms
- errors
- erros devolvidos à aplicação
- fetches
- fetches de página
- reads
- leituras de página
- marks
- marks (antes de alterar uma página)
- writes
- escritas de página
Consulta 4 — detalhe das conexões
Várias linhas de dois tipos:
{"dbName" : "SECURITY2.FDB", "activeAtt" : 1, "goneAtt" : 0}{"idAtt" : 0, "pidAtt" : 0, "doneTran" : 0, "activeTran" : 0, "prepReq" : 0, "execReq" : 0, "activeReq" : 0}{"idAtt" : 13925, "pidAtt" : 11188, "doneTran" : 1, "activeTran" : 0, "prepReq" : 0, "execReq" : 0, "activeReq" : 0}Linhas (a) descrevem bancos; linhas (b) descrevem conexões daquele banco. Depois de cada (a) há pelo menos uma (b).
- idAtt
- id da conexão, ou
0para o agregado de conexões finalizadas - pidAtt
- PID do processo do servidor que atende a conexão
Erros
Em falha o serviço devolve uma exceção no status vector ou uma linha JSON:
{"errorMsg" : "Error text"}Exemplo:
{"errorMsg" : "Unknown query: 5"}Exemplos de comando
Service manager local:
fbsvcmgr service_mgr action_lwmonitoring lwm_query 1Host remoto, consulta 4 para um banco:
fbsvcmgr host:service_mgr action_lwmonitoring lwm_query 4 dbname employeeConfiguração
Em firebird.conf há um parâmetro com o nome do plugin:
MonitoringPlugin =Por padrão o plugin não está definido e o monitoramento fica desligado. No
HQbird o nome é fblwmon:
MonitoringPlugin = fblwmonO plugin vem na build do HQbird, no diretório plugins.
Os parâmetros do plugin se definem da forma usual (veja README.plugins.html),
por exemplo em plugins.conf:
Plugin = fblwmon
{
Config = lwmConfig
}
Config = lwmConfig
{
# default 4MB
MemorySize = 1M
}MemorySize — tamanho da memória compartilhada do plugin em bytes (ou com
sufixo, por exemplo 1M).
Limite de conexões
Com base no monitoramento leve há um limite embutido de conexões simultâneas por
banco. O valor do limite é o mesmo para todos os bancos (HQ 2.5 não tem ajuste
por banco). Dois parâmetros inteiros em firebird.conf:
WarnCountAttachments = 0
MaxCountAttachments = 0A verificação ocorre na conexão e não conta a conexão que está sendo criada. Usa o contador de conexões ativas daquele banco:
- se contador ≥
WarnCountAttachmentse <MaxCountAttachments, a conexão é permitida efirebird.logrecebe:
Database XXX: number of attachments is above warning level (N >= W)- se contador ≥
MaxCountAttachments, a conexão é recusada. O cliente vê:
Statement failed, SQLSTATE = HY000
Number of attachments exceeds allowed maximume em firebird.log:
Database XXX: number of attachments is above maximum level (N >= M)Não são verificadas: conexões a security.db, conexões de serviço e conexões
com isc_dpb_no_db_triggers no DPB.
WarnCountAttachments = 0— sem avisosMaxCountAttachments = 0— sem bloqueio
Para o limite funcionar é preciso instalar e configurar o plugin de monitoramento leve (veja acima).