none
Performance de importacao de dados - Arquivo CSV RRS feed

  • Pergunta

  • Bom Dia a Todos!

    Tenho um processo criado no SSIS onde exporto dados de uma base Firebird (arquivo csv) e importo para o sQL Server 2008. Como a quantidade de dados é grande, tenho tabela com mais de 61 milhoes de registros, uso o recurso de desabilitar os indices das tabelas sql server e depois utilizo o task de bulk insert para importar os dados. Ao finalizar a importação dos dados executo um comando para habilitar os indices, o que vem demorando muito. Sendo assim, preciso de uma ajuda para resolver esse problema, saber se é o procedimento correto ou não, enfim, resolver o problema de tempo para fazer essa habilitação dos indices.

    Obrigado a todos.

    Anderson

    sexta-feira, 12 de setembro de 2014 13:41

Todas as Respostas

  • Anderson,

    O seu procedimento esta correto, é isso mesmo que tem que ser feito.

    Quando você habilita os índices irá demorar porque serão criados.

    Para melhorar a performance você pode colocar os índices em filegroup e discos diferentes dos de dados.

     


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    sexta-feira, 12 de setembro de 2014 13:55
  • Anderson,

    O melhor seria se você importar todo conteúdo do arquivo CSV tem uma tabela de transição de dados (exclusiva para esta operação).

    Após importar e realizar o tratamento de dados necessário, então importar o conteúdo na tabela de Produção. Não será necessário desabilitar os índices porque em algum momento o novo conteúdo inserido deverá ser indexado e se você desabilitar estará postergando uma tarefa que o SQL Server deve realizar no momento do seu CHECKPOINT.

    Existe também nas tarefas de importação de dados para tabelas do pacotes SSIS uma opção chamada "Fast load" que aumenta a performance de leitura de dados. Veja na imagem abaixo:


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    sexta-feira, 12 de setembro de 2014 14:48
    Moderador
  • Durval, Boa Tarde!

    Esses dados não precisam ser tratados, por isso optei realmente em jogar diretamente em suas respectivas tabelas.

    O processo realizo da seguinte forma:

    - Gero os arquivos csv (Firebird)

    - Realizo um truncate nas tabelas que irão receber os dados

    - Desabilito os indices

    - Realizo o processo de bulk insert

    - habilito os indices

    Achei interessante essa ideia de gravar numa tabela de transição para depois gravar nas tabelas finais, possivelmente irei fazer uma simulação para ver algum ganho.

    sexta-feira, 12 de setembro de 2014 17:04
  • Tulio, Boa Tarde!

    Irei simular sua indicação para ver o ganho que teremos com essa solução.

    Obrigado

    sexta-feira, 12 de setembro de 2014 17:08
  • Anderson,

    Eu concordo com as orientações dos Colegas, dentre a possibilidade de Desabilitar os dados, como também não.

    Eu particularmente tenho o hábito de realizar o procedimento de desabilitar os dados e posteriormente habilitar, mas eu também modo o modelo de recuperação do banco de dados de FULL ou SIMPLE para Bulk Logged.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 12 de setembro de 2014 21:31
  • Anderson,

    O melhor seria se você importar todo conteúdo do arquivo CSV tem uma tabela de transição de dados (exclusiva para esta operação).

    Após importar e realizar o tratamento de dados necessário, então importar o conteúdo na tabela de Produção. Não será necessário desabilitar os índices porque em algum momento o novo conteúdo inserido deverá ser indexado e se você desabilitar estará postergando uma tarefa que o SQL Server deve realizar no momento do seu CHECKPOINT.

    Existe também nas tarefas de importação de dados para tabelas do pacotes SSIS uma opção chamada "Fast load" que aumenta a performance de leitura de dados. Veja na imagem abaixo:


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    Durval,

    Só um detalhe que eu acho que temos que analisar, eu particularmente faço o processo de desabilitar os índices, mesmo sabendo que o SQL Server tem a necessidade de realizar o processo de indexação dos dados, mas como destaquei eu sempre utilizo o Modelo de Recuperação Bulk Logged para este tipo de cenário.

    Não é somente o processo de indexação dos dados que torna gera esta demora, mas sim se estivermos utilizando o Recovery Model FULL, o SQL Server vai também escrever no Transaction Log e isso vai também gerar uma sobrecarga de leitura/escrita de forma concorrente para os arquivos de dados em simultâneo com os arquivos de log.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 12 de setembro de 2014 21:34