none
Partições, Filegroups, Files e Terabytes de dados. Como gerenciar? RRS feed

  • Pergunta

  • Bom dia pessoal!

    Pela primeira vez terei que gerenciar dados de volumes enormes (dezenas de TERABYTES) e, apesar de já ter estudado e pensado em como irei dividir tantos dados, achei por bem perguntar aqui para alguém mais experiente me dar alguma dica.

    Eu terei que carregar dados diariamente de um sistema de Mediação de operadora de telecom. Isso significa que eu terei que carregar os dados de TODAS as chamadas realizadas por dia, todos os dias.

    Decidi fazer isso de forma diária para já "particionar" o volume de dados a ser carregado e em seguida ser lido (cada registro de chamada será lido 25 vezes!)

    Então, de forma abreviada, terei uma tabela assim:

    Tabela Mediação
      cdr_unique_id (clustered index)
      load_id (id da carga)
      dados (todas as colunas da chamada)

    Esta tabela tem um índice cluster porque no início do processo eu vou ler um range deles e lá no fim do processo precisarei exportar alguns registros específicos. Logo, ele ser um índice cluster irá me dar uma grande performance. O load_id apenas vai identificar a id da carga, que em outra tabela eu salvo tudo referente àquela carga (de quando são os dados, quando carreguei, qual o volume, quanto tempo demorou a carregar etc)

    Minha dúvida é:

    Cada carga (ou DIA de dados) de chamadas possui 80GB. Em 1 mês, terei 2,4 TB, e a base irá crescer até 365 dias. Passando disso, passarei a excluir o 366º dia mais antigo. Ou seja, em 1 ano terei 28,8 TERABYTES só deste tipo de dados. Fora os outros!

    Como eu posso melhorar a performance de carga destes dados e leitura?

    Eu penso em criar uma partition function para cada 25 milhões de linhas e colocar cada um destas fatias de 25 milhões de linhas em um filegroup. AQUI que mora minha dúvida...

    O que é melhor eu fazer?
    opção 1) criar X filegroups com apenas 1 arquivo cada e de tamanho ilimitado e especificar na partition function que desejo "fatiar" a cada 25 milhões de chamadas para dentro de vários filegroups?

    opção 2) ou criar apenas 1 filegroup com X arquivos com tamanho limitado a aproximadamente 80GB (tamanho médio da carga diária) e não especificar qualquer partition function e partition schema, apenas deixando a tabela neste filegroup?

    Minha intenção é ganhar performance de carga e principalmente de leitura através do índice cluster, que é feita com:

    select ... from TabelaMediacao where cdr_unique_id  between x and y 
    Sendo o índice clusterizado, será que terei algum ganho de performance na leitura se eu dividir com partition function e schema?


    sexta-feira, 24 de maio de 2013 11:15

Respostas

  • Felipe,

    Particionamento seria complicado devido as manutenções que voce teria para fazer depois, voce nao teria a possiblidade de gerar tabelas históricas, importar os dados antigos nelas e coloca-las em filegroups separados para fins de consulta apenas?

    Abraço!



    sexta-feira, 24 de maio de 2013 13:18
  • Felipe,

    Vamos por partes, em um cenário com este tipo de volume de dados, você deverá pensar em muito não somente como os dados serão armazenados, mas também, como estes dados serão restaurados.

    Eu particularmente trabalho com diversas bases de dados no Instituto com tamanhos distintos de gigabytes não tive nada de terabyte até o presente momento.

    Mas o que eu tenho planejado é dividir meus bancos de dados em diversos filegroups que possuem um conjunto de 4 ou 5 arquivos. Acredito que para o seu caso, esta pode ser uma solução inicial!!!

    Estrutura cada banco de dados em diversos filegroups com diversos arquivos poderá ser um pouco complicado o processo de organização e arquitetura, mas a distribuição em diversos arquivos poderá oferecer maior performance e alta disponibilidade do seu ambiente.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 31 de maio de 2013 00:27
    Moderador

Todas as Respostas

  • Felipe,

    Particionamento seria complicado devido as manutenções que voce teria para fazer depois, voce nao teria a possiblidade de gerar tabelas históricas, importar os dados antigos nelas e coloca-las em filegroups separados para fins de consulta apenas?

    Abraço!



    sexta-feira, 24 de maio de 2013 13:18
  • Felipe,

    Vamos por partes, em um cenário com este tipo de volume de dados, você deverá pensar em muito não somente como os dados serão armazenados, mas também, como estes dados serão restaurados.

    Eu particularmente trabalho com diversas bases de dados no Instituto com tamanhos distintos de gigabytes não tive nada de terabyte até o presente momento.

    Mas o que eu tenho planejado é dividir meus bancos de dados em diversos filegroups que possuem um conjunto de 4 ou 5 arquivos. Acredito que para o seu caso, esta pode ser uma solução inicial!!!

    Estrutura cada banco de dados em diversos filegroups com diversos arquivos poderá ser um pouco complicado o processo de organização e arquitetura, mas a distribuição em diversos arquivos poderá oferecer maior performance e alta disponibilidade do seu ambiente.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 31 de maio de 2013 00:27
    Moderador