Particionamento de Dados com Sql Server 2005 / 2008.
Boa tarde.
Vi algumas aulas e artigos no DevMedia sobre particionamento de dados.
Como faço para particionar tabelas existentes ou seja com dados nas Tabelas vendas e vendasitem.
Criar a função de particionamento?
Criar um Partition Scheme?
Excluir os clusterd indexes?
Re-criar os clusterd idexes utilizando o Partition Scheme?
Att..
Ricardo
Frigorifico Sa
Curtidas 0
Respostas
Rodrigo Mourão
12/01/2010
Olá Ricardo,
Vou lhe ser sincero, SqlSever não é meu forte. Para projetos grandes uso Oracle se não for grande ai vale qualquer free como MySql, FireBird, etc.
Bem eu poderia lhe responder baseado na teoria, mas a teoria só não adianta. E como o bom profissional não é aquele que sabe tudo mas que tem o telefone, email de quem sabe, vou entrar em contato com alaguns amigos instrutores que vivem SqlServer para poder saber qual o método é mais viável na pratica.
Peco que aguarde que em breve postarei uma sugestão.
abs!!!
Vou lhe ser sincero, SqlSever não é meu forte. Para projetos grandes uso Oracle se não for grande ai vale qualquer free como MySql, FireBird, etc.
Bem eu poderia lhe responder baseado na teoria, mas a teoria só não adianta. E como o bom profissional não é aquele que sabe tudo mas que tem o telefone, email de quem sabe, vou entrar em contato com alaguns amigos instrutores que vivem SqlServer para poder saber qual o método é mais viável na pratica.
Peco que aguarde que em breve postarei uma sugestão.
abs!!!
GOSTEI 0
Frigorifico Sa
12/01/2010
Oi Rodrigo.
Bom profissional pode ser aquele que tem suporte DevMedia tb. rss Brincadeira.
Obrigado pela atenção.
Esqueci de um detalhe tem replicação no banco. Teria que fazer particionamento nas duas pontas tb.
Abcs.
Att..
Ricardo
GOSTEI 0
Rodrigo Mourão
12/01/2010
Olá Amigo,
Ainda estou trabalhando no seu chamado, peço a gentileza que aguarde mais um pouco.
Att,
Ainda estou trabalhando no seu chamado, peço a gentileza que aguarde mais um pouco.
Att,
GOSTEI 0
Frigorifico Sa
12/01/2010
Olá Rodrigo,
Tudo bem, sei que não é uma tarefa fácil e temos o dia a dia tb.
Att..
Ricardo
GOSTEI 0
Rodrigo Mourão
12/01/2010
Olá amigo desculpe a demora em responder.
Bem como lhe falei não sou expert em SqlServer por isso fui falar com quem sabe. E um instrutor amigo meu aqui no Rio, e o papo foi excelente entrei em um mundo até então desconhecido.
Em primeiro lugar vamos falar do custo benefício, o particionamento de dados geralmente é utilizado em Data Warehouse inclusive em um dos links que ele me deu para poder estudar o assunto vi que a própria microsoft aconselha utilizar este artifício com bases maiores de 100GB, sendo assim temos que avaliar o custo benefício deste recurso.
Mas como comentei antes a teoria só não adianta pois não livros tudo e muito lindo. Indicar um método de particionamento para você como melhor opção e muito difícil pois este procedimento deve levar em consideração tamanho da base, concorrência, recurso de dados, se há ou não replicação, e qual a intenção real disso. Por exemplo imagine que a intenção do particionamento e reduzir o universo de busca de um select para aumentar a velocidade da busca. Então um estratégia, inclusive utilizada por este meu amigo, é dividir os dados em tabelas distintas por períodos por exemplo e depois cria views para exibir os dados.
Agora se a intenção é outra como por exemplo particionar o banco em arquivos físicos distintos para melhorar a concorrência em disco então vale a pena criar PARTITION FUNCTION, PARTITION SCHEME e os FILEGROUP. Então cada estratégia exige um procedimento diferente.
Caso não tenha visto ainda segue abaixo os link com as fontes que ele me passou:
http://www.microsoft.com/brasil/servidores/sql/2005/techinfo/spdw.mspx
http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&sid=402
http://msdn.microsoft.com/pt-br/library/ms178148.aspx
http://msdn.microsoft.com/pt-br/library/ms188232.aspx
http://msdn.microsoft.com/pt-br/library/ms175533.aspx
http://msdn.microsoft.com/pt-br/library/ms190199.aspx
Bem não sei se é exatamente isso que queria porém continuo a disposição para ajudar,
Att,
GOSTEI 0
Frigorifico Sa
12/01/2010
Olá,
Rodrigo.
A intenção é diminuir o universo de busca dos select para ficar mais rapido e evitar os travamentos. O Banco hoje com quase 5 anos tem 29 giga. Tem uma replicação para CALL CENTER receber pedidos e enviar as informações hoje com 4 operadoras. Temos uma previsão de aumento de produção para este ano. Bom o que posso fazer é criar job para popular outras otimizando algumas consultas. Este preocesso de criar outras tabelas distintas, ex: se eu tenho 5 anos de dados crio uma para cada ano depois faço uma view agrupando os 5 anos, altero o relatorio existente que filtra por data buscando da view. Melhora o desempenho? Ou teria que criar mecanismo no relatório para se o usuario digitar 2005 busca de tal tabela sele digitar de 2006 busca de outra?
Obrigado pela atenção.
Já ajudou bastante, para que eu possa dar andamento na otimização e ver que tenho um recurso que não estamos usando não exclusivamente por falta de conhecimento.
Att..
Ricardo
GOSTEI 0
Rodrigo Mourão
12/01/2010
Olá camarada, boa tarde.
Em primeiro lugar tenho que citar que seu banco tem um tamanho considerável sim e que independente do método utilizado tem que ser feito algo no sentido de particionamento.
Se hoje vc você criar um banco de dados novo eu lhe aconselharia a já criar o banco particionado, inclusive separando os arquivos mdf no disco para diminuir a concorrência. No seu caso existe um banco em produção que quando foi criado não se pensava em particionamento então eu fico até receoso de sugerir algo pois como terá que ser feito um trabalho em cima de uma base em produção ai vale a pena se for o caso contratar um consultoria de 1 ou duas horas de algum profissional especialista da área para avaliar o cenário.
Uma coisa menos traumática seria particionar as tabelas e criar views, eu acredito que isso já facilitaria o trabalho. Foi passar um fato real aqui conosco, nosso banco é Oracle e temos dezenas de relatórios gerencias feitos em Crystal. Um deles vinha sofrendo diversas alterações que chegou um ponto em que o relatório não executava mais, dava erro.
Analisei o select e sugeri ao analista responsável que colocasse aquilo numa view, detalhe nada tem haver com particionamento, foi só trocar o select por uma view e colocar o select grandão na view.
Foi só fazer isso que o relatório não só voltou a funcionar mas também muito mais rápido. AS view quando criadas na tem com eles o plano de execução da busca definido, inclusive se não me engano no SQLServer podemos deixar um select pré-compilado.
Agora a questão é fazer um backup da sua base, alterar e comparar o tempo. Lembre-se esse artifício de particionar as tabelas e criar view esta longe de um cenário ideal, profissional ou elegante, mas temos que ver o custo beneficio da coisa. Cada caso é um caso.
Abs e estou as ordens.
Att,
GOSTEI 0
Frigorifico Sa
12/01/2010
Rodrigo,
Vc conhece alguem que poderia dar esta consultoria? "Remotamente" sem precisar ser in office. Assim o custo ficaria mais em conta e facil de aprovar um orçamento. "sem ter que mexer com passagem aerea bla bla bla". Bom é o seguinte o banco e o sistema são terceirizados, algumas coisas eu altero ou faço sugestão "como o recurso do sql server 2008 Resource Governor". Comecei a alterar alguns relatorios criando tabelas com os dados de vendas mais sintetico.
Mas ainda tenho um problema de replicação que quando da uma latencia, da uma travada no CALL CENTER, E temos tambem força de vendas automatizada e tenho que pensar neste crescimento do banco horizontal e vertical.
Amigo, obrigado pela ajuda.
Att..
Ricardo
GOSTEI 0
Rodrigo Mourão
12/01/2010
Olá Amigo,
Conhecer até conheço mas não sei até que ponto eu poderia indica-lo a você preciso ver com a DevMedia como isso funciona.
Estarei colocando o chamado como concluído. Caso tenha mais alguma dúvida é só reabri-lo.
Att,
GOSTEI 0