Otimizando o desempenho do BCP para dados BLOB

13

Eu sou o processo de planejar a migração ao vivo de um banco de dados de 2 TB para tabelas particionadas. O sistema está falando amplamente de um repositório de documentos, sendo a maior parte do espaço alocado para LOBs entre 50kb e 500kb, com uma pequena porcentagem no intervalo de 500kb a 1MB. Parte da migração envolverá dados de BCP do banco de dados antigo para o novo.

O BCP é a abordagem preferida, pois a divisão atual / histórica nos dados permite extrair os dados mais antigos em etapas (durante períodos mais silenciosos) antes de uma troca final, minimizando o impacto no sistema ativo. O volume de dados e a disponibilidade de armazenamento impedem uma reconstrução no local para um esquema de partição .

Suspeito que talvez haja alguns ganhos de desempenho ao experimentar KILOBYTES_PER_BATCH em vez de ROWS_PER_BATCH, devido ao conteúdo do BLOB. É sugerido na documentação do BCP que o SQL pode otimizar as operações com base nesse valor.

O que não consigo encontrar é qualquer orientação sobre a natureza dessas otimizações ou por onde começar meus testes. Na ausência de sugestões, tentarei pequenas tiragens nos limites de 4/8/16/32 / 64mb para começar.

Provavelmente, existem alguns ganhos com a alteração do tamanho do pacote (parâmetro BCP -a, em vez da configuração no nível do servidor), mas estou inclinado a aumentar isso para o máximo de 65535, a menos que alguém tenha uma abordagem mais formulada.

Mark Storey-Smith
fonte

Respostas:

12

Esta não é uma resposta direta à sua pergunta, mas existem alguns artigos que você se beneficiaria com a leitura (caso não os tenha encontrado primeiro :-)). Trata-se de carregar muitos dados usando a cópia bcp / bulk. Eu li todos eles e não encontrei nada detalhado sobre KILOBYTES_PER_BATCH, todos eles estão usando ROWS_PER_BATCH, mas tenho certeza que você encontrará outras informações úteis.

e as referências óbvias do MSDN:

Na minha experiência pessoal, consegui fazer um carregamento rápido de dados usando carregamento paralelo e testes com vários tamanhos de lote. Eu acho que apenas testes pessoais servirão para você. Espero que você encontre bons conselhos nas referências.

Marian
fonte
Obrigado Marian, marquei algumas novas descobertas nessa lista exaustiva. Como uma tarefa única, muitas das etapas incrementais / de refino não são tão úteis, mas há muitas dicas que eu posso usar.
Mark-Storey-Smith
Sim, entendo que também foi uma tarefa única e encontrei algumas coisas úteis na lista. É uma ótima tarefa :-). Você também pode fazer um pequeno aplicativo .NET (se você estiver familiarizado com o .NET), como em outro artigo de Linchi Shea: Impacto no desempenho: o script de inserção mais ideal não pode superar o BulkCopy . Você pode encontrar o mesmo que ele :-).
Marian
Como não parece haver nenhuma orientação específica do BLOB para o BCP na natureza, estou marcando sua resposta muito completa como aceita. Obrigado novamente.
Mark-Storey-Smith
Desculpe, não pude ajudá-lo mais, mas espero que você tenha encontrado algo útil nele.
Marian