Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcio Peruchi

Problemas com configuração limite de tempo resposta do servidor

Recommended Posts

Bom dia.

 

Instalamos o WAMP (Apache+PHP+Mysql) no servidor e temos uma aplicação PHP+PostGres rondando nela. Aqui vai o problema.

Quando fazemos buscas simples no postgres ele retorna os dados rapidamente.

Entretando efetuando testes aqui quando fazemos consultas SQL que retornam mais de 60 linhas de dados ele simplesmente fica extremamente lento, ele continua carregando, mas carrega uma linda de dados a cada 10 ou 15 segundos.

Gostaria de saber se alguém já teve esse problema e se poderia por gentileza me ajudar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

como é a query ?

 

a tabela está normalizada e otimizada (indices..)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

select distinct pt.id, pt.codigo_produto, pt.pro_descricao, pt.unifat, pt.pro_qtdunidade, pt.pro_vendeavulso, pt.pro_descricao_comp,
tpi.desconto_permitido, tpi.valor_venda, pt.pro_estoque, pt.pro_pesoliq, gp.descricao as descricao_grupo, 
ma.descricao as descricao_marca, tprod.descricao as descricao_tip_prod, ip.nome_imagem,
pt.pro_tipovenda, tp.codigo as id_tab_preco, tp.id as id2_tab_preco, tp.descricao as descricao_tab_preco,
(select count(*) from tabelas_preco tp 
left join tabelas_preco_itens tpi on tpi.codigo_tabela_preco = tp.id inner join tabelas_vendedores tv on tv.codigo_tabela = tp.id and tv.codigo_vendedor = ".$dadosorasys['codigo_vendedor']." 
where tp.codigo_empresa = pt.codigo_empresa and tpi.codigo_produto = pt.id) as quantidade_tabelas
from produtos pt 
inner join grupos gp on gp.id = pt.codigo_grupo 
inner join marcas ma on ma.id = pt.codigo_marca 
inner join tiposproduto tprod on tprod.id = pt.codigo_tipo 
left join imagens_produtos ip on ip.codigo_produto = pt.id and ip.id = (select max(ip.id) from imagens_produtos ip where ip.codigo_produto=pt.id)
left join tabelas_preco_itens tpi on tpi.codigo_produto = pt.id 
left join tabelas_preco tp on tp.id = tpi.codigo_tabela_preco
inner join tabelas_vendedores tv on tv.codigo_tabela = tp.id and tv.codigo_vendedor=".$dadosorasys['codigo_vendedor']."
where pt.codigo_empresa=".$dadosorasys['codigo_empresa']."
and tpi.codigo_tabela_preco=".(int)$_GET['cod_tab_preco']."
and (pt.situacao='A' or pt.situacao='0')
order by pt.pro_descricao

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, vc tem 9 joins ai, fora a subquery e o distinct!

 

lógico que vai ser lento.

 

 

vou te mover para o fórum de bancos de dados.

 

 

Mas pesquise sobre otimizar bancos sql.

Por exemplo isso aqui:

select count(*)
isso é lento.

 

Otimizar consultas é um trabalho de formiga, ir alterando diversos lugares ganhando segundo por segundo de performance.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://dev.mysql.com/doc/refman/5.6/en/explain.html

http://dev.mysql.com/doc/refman/5.6/en/using-explain.html

 

Verifique se não há a possibilidade de criar índices únicos e/ou particionamentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É o problema ai é este subselect com o count, talvez se vc jogar isso em uma view ele ja melhore com o cache da view, outra coisa que pode ser feita é a indexação e utilizar ferramentas de otimização e manutenção do postgres (se já não estiver utilizando).

 

Algumas dicas:

Vacuum- otimizando sua base de dados PostgreSQL:

http://www.htmlstaff.org/ver.php?id=9435

 

Performance e timeout:

http://www.dicas-l.com.br/freedb/freedb_20090929.php#.USZQNld7c2Y

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.