Importação de dados com índices desabilitados utilizando DataServer SQL Server

Escrito por Marcos Kirchner em 17 de junho de 2011, 16:36h

Desabilitar os índices durante a carga (load) de dados é uma técnica comum para melhorar o desempenho do processo de importação. A idéia é simples: para cada registro criado, é necessário que todos os índices associados a tabela em questão sejam atualizados. Se os índices estiverem inativos o gerenciador do banco de dados precisa trabalhar menos e o processamento é mais rápido.

No entanto, quando utilizamos a estrutura padrão de tabelas criadas pelo DataServer SQL sempre há duas colunas que são utilizadas para emular o comportamento do ROWID existente nos bancos de dados Progress: as colunas PROGRESS_RECID e PROGRESS_RECID_IDENT_. Para cada uma das duas colunas é criado um índice.

O Dataserver também cria automaticamente um gatilho (trigger) de inserção (evento INSERT), que atualiza estas colunas. Uma das operações que esta trigger realiza é localizar na tabela o registro recém criado e atualizá-lo. Esta pesquisa é realizada através da coluna PROGRESS_RECID_IDENT_. Se todos os índices da tabela forem desabilitados ou removidos, a única opção para o gerenciador do banco de dados localizar o registro é realizar uma varredura na tabela (também conhecido como table scan).

Em resumo: para cada registro inserido na tabela, a trigger executa e faz uma pesquisa do registro. Se o índice utilizado na pesquisa estiver desabilitado, para cada registro ocorre um table scan. Quando a tabela está vazia, uma varredura completa é rapida. A medida que novos registros são criados, a operação de varredura demora mais e mais. Abaixo um gráfico (clique para ampliar) do número médio de registros criados por segundo, com todos os índices desabilitados.

image

Neste gráfico é possível observar que logo no início do processo, com a tabela vazia, mais de mil registros são criados por segundo. Esta média reduz rapidamente, e após 30 segundos de processamento o número de registros por segundo oscila na casa de 150. Depois de alguns minutos a média é inferior a 20 registros por segundo.

Como regra geral, procure não desabilitar um índice que é importante para o processo de carga de dados. Para tabelas criadas pelo DataServer, a sugestão é desabilitar todos os índices exceto o da coluna PROGRESS_RECID_IDENT_. O nome deste índice é <nome tabela>#_#progress_recid_ident_.

ATUALIZADO 29/06/11: o nome do índice criado pelo DataServer estava errado.

Categorias: Banco de dados | DataServer | Desempenho | SQL Server

Comentar

biuquote
  • Comentário
  • Pré-visualização
Loading

Acesso LogMeIn

Informe o código PIN: