Duvida qto a banco grande
Tenho um banco que tem tabelas com milhões de registro em cada tabela. Queria opiniões sobre qual a melhor forma de se trabalhar com este banco, pois as consultas são muito lentas e as vezes demoram muitos minutos. Alguém tem um banco assim, como faz pra contornar o problema de performance. Preciso de algumas dicas pra melhorar o desempenho do meu sistema. Obrigado.
Foxcyber
Curtidas 0
Respostas
Silviogs
26/10/2005
Olá amigo
qual o banco que vc usa?
que tipo de acesso usa?
vc teria como mostrar a query para analisarmos? pelo menos uma delas?
com isso poderiá-mos ajudá-lo melhor.
Atenciosamente
Silvio Guedes
qual o banco que vc usa?
que tipo de acesso usa?
vc teria como mostrar a query para analisarmos? pelo menos uma delas?
com isso poderiá-mos ajudá-lo melhor.
Atenciosamente
Silvio Guedes
GOSTEI 0
Motta
26/10/2005
Qual bd ?
Como são estas consultas ? Totalizações ? Buscas discretas ?
Com que frequencia são feitas ?
Como são as tabelas ? Quantos registros realmente ?
As buscas fazem joins ? Muitos ?
Em geral o uso de indices ajuda, mas sem maiores detalhes é duro opinar.
Como são estas consultas ? Totalizações ? Buscas discretas ?
Com que frequencia são feitas ?
Como são as tabelas ? Quantos registros realmente ?
As buscas fazem joins ? Muitos ?
Em geral o uso de indices ajuda, mas sem maiores detalhes é duro opinar.
GOSTEI 0
Foxcyber
26/10/2005
Uso SQLServer, com acesso via ADO. As querys sao normais por exemplo:
Em uma tabela que tem os campo Grupo, DtHrTransacao, NrCartao etc
Faço um select assim:
select Grupo, DtHrTransacao, NrCartao from validacoes
where DtHrTransacao between :data1 and :data2
é isso. Só que essa tabela é gigantesca. Te milhoes e milhoes de registros de várias datas.
Em uma tabela que tem os campo Grupo, DtHrTransacao, NrCartao etc
Faço um select assim:
select Grupo, DtHrTransacao, NrCartao from validacoes
where DtHrTransacao between :data1 and :data2
é isso. Só que essa tabela é gigantesca. Te milhoes e milhoes de registros de várias datas.
GOSTEI 0
Foxcyber
26/10/2005
Essa tabela de validacoes é a maior e que me da mais problemas, as vezes eu faco um ou dois joins com ela nao passa disso com outras tabelas nao muito grandes. Essa tabela validacoes possui indices. Ja fiz também views com ela mas nao adiantou muito.
GOSTEI 0
Motta
26/10/2005
Um indice por DtHrTransacao PODERIA melhorar a consulta, mas se o intervalo do between for grande o otimizador pode escolher uma busca na tabela toda, o Oracle faz isto.
Não dá para saber a regra de negocio mas poderia criar uma flag de registros mais buscados , tipo mês corrente etc ?
Quantos valores distintos existem para DtHrTransacao ,e quantos registros tem a tabela , como é esta relação ?
Não dá para saber a regra de negocio mas poderia criar uma flag de registros mais buscados , tipo mês corrente etc ?
Quantos valores distintos existem para DtHrTransacao ,e quantos registros tem a tabela , como é esta relação ?
GOSTEI 0
Foxcyber
26/10/2005
Valores distintos para DtHrTransacao sao 30 ou 31
O numero de registros na tabela atualmente esta com 3 milhoes
O numero de registros na tabela atualmente esta com 3 milhoes
GOSTEI 0
Motta
26/10/2005
Na melhor das hipoteses ele vai retornar 1/31 da tabela, em geral assim o full table fica mais barato (tenho dúvidas) o sqlserver gera plano de execução ? O que ele diz ?
Não serve criar uma agregadora por dia? Voce poderia atualiza-la todo dia via um processo batch.
Não serve criar uma agregadora por dia? Voce poderia atualiza-la todo dia via um processo batch.
GOSTEI 0
Foxcyber
26/10/2005
Estava pensando nisso criar uma agregadora, por isso postei a msg para ter mais ideias ou ver se essa seria a melhor forma.
GOSTEI 0
Foxcyber
26/10/2005
Alguém ja fez este tipo de coisa, com tabelas agregadoras. Vale a pena? Será que terei um ganho considerável? Alguém tem mais alguma idéia diferente?
GOSTEI 0
Motta
26/10/2005
Vc pode fazer uma agregadora com triggers, vc viu o plano de execução ?
GOSTEI 0
Foxcyber
26/10/2005
Nao, pq nao sei como fazer isso. Poderia explicar?
GOSTEI 0
Motta
26/10/2005
VEJA SE ESTES ARTIGOS TE AJUDAM , EU NAO CONHEÇO SQLSERVER.
http://www.imasters.com.br/artigo.php?cn=228&cc=86
http://www.imasters.com.br/artigo.php?cn=2702&cc=86
http://www.imasters.com.br/artigo.php?cn=389&cc=73
http://www.imasters.com.br/artigo.php?cn=390&cc=73
http://www.imasters.com.br/artigo.php?cn=388&cc=73
http://www.imasters.com.br/artigo.php?cn=387&cc=73
basicamente é :
criar uma tabela totalizadora
criar uma triggers para com base no movimento da tabela base
inserir / atualizar (somar diminuir) valores da agregadora
não achei um artigo especifico de como fazer , mas os acima dao uma ideia
http://www.imasters.com.br/artigo.php?cn=228&cc=86
http://www.imasters.com.br/artigo.php?cn=2702&cc=86
http://www.imasters.com.br/artigo.php?cn=389&cc=73
http://www.imasters.com.br/artigo.php?cn=390&cc=73
http://www.imasters.com.br/artigo.php?cn=388&cc=73
http://www.imasters.com.br/artigo.php?cn=387&cc=73
basicamente é :
criar uma tabela totalizadora
criar uma triggers para com base no movimento da tabela base
inserir / atualizar (somar diminuir) valores da agregadora
não achei um artigo especifico de como fazer , mas os acima dao uma ideia
GOSTEI 0
Foxcyber
26/10/2005
Valeu cara, muito obrigado pela sua paciencia vou dar uma olhada e se melhorar ou resolver meu problema posto aqui as melhorias pra que todos se beneficiem deste tópico;
GOSTEI 0