none
Importação de grande volume de dados perdendo desempenho ao longo dos inserts RRS feed

  • Pergunta

  • Tenho uma aplicação feita em C# que faz a importação de dados em uma série de tablas, a partir da leita de xmls.

    São perto de 60 tabelas, que sempre tem seus registros excluídos caso inicie uma nova importação.

    Possui uma tabela mãe, que é o registro de referência só para eu saber o nome do arquivo que foi importado, esta tabela é a primeira a receber o insert, ela possui duas chaves,  a primária que é um inteiro incrementado pelo sql server e um Id próprio que é um Guid que eu crio na hora de importar, esta coluna é usada em todas as outras tabelas como chave estrangeira, desta forma eu consigo localizar todos os possíveis registros de um arquivo nas demais tabelas.

    As demais tabelas tbm possuem uma coluna de chave primária também inteiro e incrementado pelo sql server.

    O comportamento está sendo bastante estranho para mim, porque ao longo dos inserts, percebo que o número de registros não se mantém linear, da metade da importação para frente ele vai diminuindo, até praticamente parar, anteriormente eu havia criado como chave primária de todas as tabelas um Guid, porém percebi que este tipo de dado usando como PK foi uma escolha péssima, devido ao Sql Server precisar reorganizar a cada insert e isso se tornou impraticável. Minha pergunta é se eu devo neste caso também alterar as chaves estrangeiras para inteiro para manter o desempenho até o final? Ou se eu deveria criar as chaves de alguma forma só no final? Não como o sql server trabalha com tantos inserts e qual a forma correta dele manter os inserts até o fim.

    Versão do banco: Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)

    Número de registros da tabela de referência cidata: Tota de 3 milhões de registros


    quarta-feira, 18 de novembro de 2020 19:07

Todas as Respostas

  • ljs-03,

    Vamos por partes, existem diversas análises e considerações que temos que entender e identificar.

    Inicialmente a importação esta sendo realizada através do C#?

    O banco de dados existente no Microsoft SQL Server 2019 foi importado de alguma outra versão?

    Qual é o nível de compatibilidade e modelo de recuperação que você esta utilizando?

    Em relação a sua PK, esse é um ponto muito importante, mas primeiro precisamos entender como estes dados estão sendo consumidos.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 23 de novembro de 2020 22:32