ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Performance no select firebird?
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Jan 11, 2021 10:45 am    Assunto: Performance no select firebird? Responder com Citação

Tenho esse select
Código:
select
    conta.id,
    conta.nome,
    SUM(movconta.valor * CASE WHEN  movconta.tipo in (0, 3) THEN 1 ELSE -1 END) AS valor
from conta
left join movconta on conta.id = movconta.id_conta
where conta.inativo = 0
group by 1,2
order by conta.nome


Se teu retirar o join ele fica raído pq não envolve soma nas tabelas, mais preciso dessa soma de contas aparecendo

Tem como melhorar a performance desse select?

Aonde mexer pra ver se melhora?

O componente de select estou usando firedac FDQuery
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jan 11, 2021 12:14 pm    Assunto: Responder com Citação

Bom dia,

Só pra confirmar, a performance é parecida se você rodar essa consulta através do IBExpert ou outra ferramenta?
Existe uma FK na tabela movconta referenciando a tabela conta utilizando o campo id_conta?
Se a resposta for sim para as duas perguntas acima, experimente remover o Case de dentro do Sum só para ver se está afetando muito a performance.


Editado pela última vez por imex em Qui Set 16, 2021 9:12 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Jan 11, 2021 1:21 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Só pra confirmar, a performance é parecida se você rodar essa consulta através do IBExpert ou outra ferramenta?
Existe uma FK na tabela movconta referenciando a tabela conta utilizando o campo id_conta?
Se a resposta for sim para as duas perguntas acima, experimente remover o Case de dentro do Sum só para ver se está afetando muito a performance.


Sim para as duas perguntas

Deu uma pequena diferença sim. Agora se eu retirar o JOIN tmb ai fica instantâneo
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jan 11, 2021 2:31 pm    Assunto: Responder com Citação

Você pode fazer um teste com uma subquery para obter a soma, dessa forma seria possível retirar o Join, mas não sei se vai afetar a performance:

Código:
select
    conta.id,
    conta.nome,
    (select SUM(movconta.valor * CASE WHEN movconta.tipo in (0, 3) THEN 1 ELSE -1 END)
     from movconta
     where conta.id = movconta.id_conta) AS valor
from conta
where conta.inativo = 0
order by conta.nome


Outro teste seria utilizar o Or na condição do Case em vez do In, mas novamente, acho que não vai fazer diferença:

Código:
    SUM(movconta.valor * CASE WHEN movconta.tipo = 0 or movconta.tipo = 3 THEN 1 ELSE -1 END) AS valor


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Jan 11, 2021 3:18 pm    Assunto: Responder com Citação

imex escreveu:
Você pode fazer um teste com uma subquery para obter a soma, dessa forma seria possível retirar o Join, mas não sei se vai afetar a performance:

Código:
select
    conta.id,
    conta.nome,
    (select SUM(movconta.valor * CASE WHEN movconta.tipo in (0, 3) THEN 1 ELSE -1 END)
     from movconta
     where conta.id = movconta.id_conta) AS valor
from conta
where conta.inativo = 0
order by conta.nome


Outro teste seria utilizar o Or na condição do Case em vez do In, mas novamente, acho que não vai fazer diferença:

Código:
    SUM(movconta.valor * CASE WHEN movconta.tipo = 0 or movconta.tipo = 3 THEN 1 ELSE -1 END) AS valor


Espero que ajude
Imex, com a subquery o result ficou muito melhor, ja com o OR no lugar do IN não mudou nada, subquery deu certo amigo.
Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Ago 09, 2021 4:13 pm    Assunto: Responder com Citação

Este select ainda esta me dando dor de cabeça
Código:
select
    conta.id,
    replace (conta.nome,  '  ', ' ') AS nome,
    (select
          coalesce(SUM(CAST(movconta.valor AS NUMERIC(15,2)) * CASE WHEN movconta.tipo in (0, 3) THEN 1 ELSE -1 END), 0)
     from movconta
     where conta.id = movconta.id_conta
       and movconta.tipo IN (0, 1)
       and movconta.status <> 30           
) AS valor
from conta
where conta.inativo = 0
ORDER BY conta.nome


Esta parte aqui
Código:
and movconta.tipo IN (0, 1)

Da um pouco de lentidão.

Mais a maior lentidão é a primeira vez que é acessado ai demora muito, depois ele fica melhor a performance.

Tem um jeito de melhorar este select?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 10, 2021 1:57 pm    Assunto: Responder com Citação

Não sei se esse problema tem relação com essa consulta já que fica mais lento na primeira vez.
Experimente fazer uns testes removendo o Order By o e Replace (os 2 juntos e também um de cada vez) para ver se vai fazer alguma diferença.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Ago 10, 2021 4:43 pm    Assunto: Responder com Citação

imex escreveu:
Não sei se esse problema tem relação com essa consulta já que fica mais lento na primeira vez.
Experimente fazer uns testes removendo o Order By o e Replace (os 2 juntos e também um de cada vez) para ver se vai fazer alguma diferença.


Boa tarde,

Mesmo removendo o que você solicitou ainda na primeira vez ficou lento

Olhe... Isso no meu pc que o banco esta local, em rede fica muito mais lento.
Código:
------ Performance info ------
Prepare time = 0ms
Execute time = 9s 610ms
Avg fetch time = 533,89 ms
Current memory = 35.162.312
Max memory = 35.290.360
Memory buffers = 2.048
Reads from disk to cache = 9.521
Writes from cache to disk = 0
Fetches from cache = 459.008


Segunda vez fazendo o select
Código:
------ Performance info ------
Prepare time = 0ms
Execute time = 703ms
Avg fetch time = 39,06 ms
Current memory = 35.162.152
Max memory = 35.315.624
Memory buffers = 2.048
Reads from disk to cache = 9.360
Writes from cache to disk = 0
Fetches from cache = 458.990


Deixando com os campos que removi

Código:
------ Performance info ------
Prepare time = 0ms
Execute time = 750ms
Avg fetch time = 41,67 ms
Current memory = 35.171.792
Max memory = 35.328.368
Memory buffers = 2.048
Reads from disk to cache = 10.238
Writes from cache to disk = 0
Fetches from cache = 459.047


Agora removendo do filtro
Citação:
and movconta.tipo IN (0, 1)

Código:
------ Performance info ------
Prepare time = 16ms
Execute time = 328ms
Avg fetch time = 18,22 ms
Current memory = 35.166.296
Max memory = 35.328.368
Memory buffers = 2.048
Reads from disk to cache = 8.143
Writes from cache to disk = 0
Fetches from cache = 454.439


Agora removendo o subselect
Código:
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 35.147.176
Max memory = 35.328.368
Memory buffers = 2.048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 172


O primeiro aonde ficou mais lento de todos é quando inicio o PC e não foi feito nenhuma consulta ainda sendo a primeira consulta do dia.


Na performance do ibexpert essa tabela movconta passou 215.215 vezes
Essa tabela movconta tem 215.227 registros cadastrados,
ja a tabela conta foi 55 vezes. sendo que é esse a quantidade de registos nessa tabela Todos indexados.
Código:
PLAN (MOVCONTA INDEX (FK_MOVCONTA_REF_CONTA, IDX_MOV_TIPO, IDX_MOV_TIPO))
PLAN (CONTA ORDER IDXNOMECONTA)

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 10, 2021 6:22 pm    Assunto: Responder com Citação

Essa consulta sem a subconsulta fica lenta na primeira vez?
Outras consultas também ficam lentas na primeira vez?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Ago 11, 2021 8:35 am    Assunto: Responder com Citação

imex escreveu:
Essa consulta sem a subconsulta fica lenta na primeira vez?
Outras consultas também ficam lentas na primeira vez?

Bom dia. Respondendo a pergunta
Primeira: Não fica instantâneo
Segunda: Tabela cliente tmb fica um pouco lento, mais o que mais o pessoal reclama é dessa que trago o movimento das contas.

Hj abrindo pela primeira vez mesmo comentando esse filtro and movconta.tipo IN (0, 1) fica lento
Código:

------ Performance info ------
Prepare time = 0ms
Execute time = 16s 234ms
Avg fetch time = 901,89 ms
Current memory = 35.171.880
Max memory = 36.185.576
Memory buffers = 2.048
Reads from disk to cache = 33.115
Writes from cache to disk = 0
Fetches from cache = 603.937


Já comentando todo subselect como disse fica instantâneo a consulta
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Ago 11, 2021 9:51 am    Assunto: Responder com Citação

Bom dia,

Acho que o problema não está na consulta, talvez esteja no banco de dados ou no servidor, já que está ocorrendo somente na primeira vez e com outras consultas também.
Acho que seria interessante você criar um banco de dados novo para fazer uns testes.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Ago 11, 2021 10:01 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Acho que o problema não está na consulta, talvez esteja no banco de dados ou no servidor, já que está ocorrendo somente na primeira vez e com outras consultas também.
Acho que seria interessante você criar um banco de dados novo para fazer uns testes.


Vou fazer uns testes pra ver se é isso.

Obrigado
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Ago 11, 2021 5:11 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
imex escreveu:
Bom dia,

Acho que o problema não está na consulta, talvez esteja no banco de dados ou no servidor, já que está ocorrendo somente na primeira vez e com outras consultas também.
Acho que seria interessante você criar um banco de dados novo para fazer uns testes.


Vou fazer uns testes pra ver se é isso.

Obrigado
A principio parece ter resolvido Imex.

O banco antigo estava com muito lixo

Criei um banco novo extrai o metadados e fiz o backup e restore no novo e além de ficar de 658,688KB para 83,952KB ficou bem mais rápido a primeira consulta.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Qui Ago 12, 2021 8:41 am    Assunto: Responder com Citação

neste link tem varias dicas sobre performance

https://www.youtube.com/results?search_query=mqfs

é pra FB, mas vale a pena conferir pra quem usa outros BS.
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Ago 12, 2021 10:33 am    Assunto: Responder com Citação

joemil escreveu:
neste link tem varias dicas sobre performance

https://www.youtube.com/results?search_query=mqfs

é pra FB, mas vale a pena conferir pra quem usa outros BS.

A sim estou seguindo o canal, muito bom mesmo, inclusive esta tendo uma live que estou participando desde terça feira a respeito do PSQL e Performance com o Gregorio que é o dono do canal.

Top mesmo.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB