Página 1 de 1
Duvidas sobre FIREBIRD
Enviado: 27 Jul 2009 20:45
por helio
Pessoal gostaria de saber se tem algum comando que possa devolver a quantidade de pessoas que estao acessando o banco FIREBIRD naquele momento.
Uso Xharbour 0.99.7 e o SQLRDD.
Valeu pela Atencao antecipadamente,
Helio Beltrao Jr.
Re: Duvidas sobre FIREBIRD
Enviado: 29 Ago 2009 13:45
por sygecom
Eu estava procurando algo assim ! Até achei que o proprio SQLRDD tinha isso proprio, você consegui resolver ?
Re: Duvidas sobre FIREBIRD
Enviado: 01 Set 2009 12:02
por Maligno
Que eu saiba, o único jeito é usar a API de serviços do Firebird (isc_database_info). Existe na net função C pra isso. É o caso de baixar e adaptar para o [x]Harbour.
Re: Duvidas sobre FIREBIRD
Enviado: 01 Set 2009 12:14
por Maligno
Aliás, um adendo: me parece que funcionalidade desse tipo estava para ser incluída no projeto para ser acessada via comando SQL. Mas acho que ainda não existe.
Re: Duvidas sobre FIREBIRD
Enviado: 01 Set 2009 14:13
por sygecom
Obrigado Maligno,
Eu consegui resolver, isso já está disponivel na versão 2.1, e como não pretendo usar versão menor que essa, para min ficou perfeito:
Código: Selecionar todos
Function Cont_users
Local aret := {}
Local vCONT:=0
IF eTIPO_SQL="POSTGRESQL"
cSQL := "select count(*) from pg_stat_activity"
ELSEIF eTIPO_SQL="MYSQL"
cSQL := "SELECT * FROM information_schema.`PROCESSLIST`"
ELSEIF eTIPO_SQL="FIREBIRD"
cSQL := "SELECT MON$USER, MON$REMOTE_ADDRESS, MON$REMOTE_PID, MON$TIMESTAMP FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION"
ENDIF
oSql := SR_GetConnection()
osql:exec(cSQL ,,.t.,@aret)
IF eTIPO_SQL="POSTGRESQL"
vCONT=(aret[1,1]/2)
ELSEIF eTIPO_SQL="MYSQL"
vCONT=(len(aret)/2)
ELSEIF eTIPO_SQL="FIREBIRD"
vCONT=(len(aret)-1)
IF vCONT=0
vCONT=1
ENDIF
ENDIF
Return(vCONT)
Re: Duvidas sobre FIREBIRD
Enviado: 01 Set 2009 16:56
por Maligno
Isso mesmo. Depois que encontrei algo sobre as tabelas virtuais de monitoramento do Firebird. Aliás, uma documentação mais completa:
http://fisheye1.atlassian.com/browse/~r ... ing_tables
Muito embora MON$ATTACHMENTS não tenha nenhum recurso para dizer diretamente quantos ou quais usuários estão conectados à uma determinada tabela. Acho que se deve trabalhar em cima do campo MON$ATTACHMENT_NAME. Rodei uma string no IBExpert e esse campo retornou o nome de caminho completo do banco de dados, o que é compreensível, haja vista que é a única forma de identificar um banco de dados. Se constasse apenas o nome, seria um erro.
Re: Duvidas sobre FIREBIRD
Enviado: 02 Set 2009 11:52
por sygecom
Aproveitando o topico, como você está fazendo a manutenção das base de dados em Firebird, lhe pergunto por que conforme vai sendo usado muito a base de dados vai crescendo e se usar o GBAK para fazer o backup e restore ele diminui significativamente o tamanho da base de dados.
Com isso fiquei com duas duvidas.
1º-Como fazer para saber se a Base de dados pode ser diminuida, se tem como calcular algo via comando SQL da porcentagem que posso diminuir.
2º-Eu fiz o teste usando o GBAK com Backup e Restore para poder diminuir o tamanho alocado pelo Firebird e vi que demorou muito para restaurar a base dados, será que teria alguma outra maneira mais rapida de fazer essa manutenção na base de dados ?
Desde já agradeço qualquer dica.
Re: Duvidas sobre FIREBIRD
Enviado: 02 Set 2009 13:40
por Maligno
O tamanho do banco de dados dependerá do tamanho da página escolhida no momento da criação. Para uma aplicação que tem muitas inserções, maior a página. Se o banco for mais utilizado para pesquisa, menor. Acontece que a cada inclusão, o servidor mantém essa página mais ou menos do tamanho especificado. Assim, ficam "buracos" no arquivo, o que facilita e acaba aumentando a velocidade de inclusões futuras. O ideal é não esquentar a cabeça com o tamanho do arquivo. Na dúvida, usa-se o tamanho default de 4KB para as páginas.
Quanto ao GBAK, nunca usei porque nunca precisei. Só fiz alguns testes para quando um dia precisar. Não sei dizer se é rápido ou é lento, porque só usei em arquivos pequenos. Aí é rápido mesmo. Mas é preciso tomar cuidado para não ter ninguém "logado" no banco, porque senão pode corromper o arquivo.
Que eu saiba, não há recurso para pesquisar o servidor sobre o tamanho do arquivo. Acredito que não deve ter nada disso. Muito menos por SQL. Talvez por alguma função da API. Mas não sei dizer. O que você pode fazer para diminuir o ritmo de crescimento do arquivo é diminuir o tamanho da página. Mas se for um sistema com muitas conexões concorrentes, pode haver perda de velocidade em inclusões.
Re: Duvidas sobre FIREBIRD
Enviado: 02 Set 2009 13:53
por sygecom
Obrigado pelas dicas.