Compartilhar via


Diretrizes para operações de índice online

Quando você executa operações de índice online, as diretrizes seguintes se aplicam:

  • Índices clusterizados devem ser criados, recriados ou descartados offline quando a tabela subjacente contém os seguintes tipos de dados LOB (objeto grande): image, ntext e text.

  • Índices em tabelas temporárias locais não podem ser criados, recriados ou descartados online. Essa restrição não se aplica a índices em tabelas temporárias globais.

Observação

As operações de índice online não estão disponíveis em todas as edições do MicrosoftSQL Server. Para obter uma lista de recursos compatíveis com as edições do SQL Server, consulte recursos compatíveis com as edições do SQL Server 2014.

A tabela a seguir mostra as operações de índice que podem ser executadas online e os índices excluídos dessas operações online. Restrições adicionais também são incluídas.

Operação de índice online Índices excluídos Outras restrições
ALTERAR ÍNDICE RECONSTRUIR Índice clusterizado desabilitado ou exibição indexada desabilitada

Índice XML

Índice columnstore

Índice em uma tabela temporária local
Especificar a palavra-chave ALL pode fazer com que a operação falhe quando a tabela contém um índice excluído.

Aplica-se restrições adicionais à recriação de índices desabilitados. Para obter mais informações, consulte Desabilitar índices e restrições.
CRIAR ÍNDICE Índice XML

Índice clusterizado exclusivo inicial em uma exibição

Índice em uma tabela temporária local
CRIAR ÍNDICE COM COMANDO DROP_EXISTING Índice clusterizado desabilitado ou exibição indexada desabilitada

Índice em uma tabela temporária local

Índice XML
DROP INDEX Índice desabilitado

Índice XML

Índice não clusterizado

Índice em uma tabela temporária local
Vários índices não podem ser especificados em uma única instrução.
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY ou UNIQUE) Índice em uma tabela temporária local

Índice clusterizado
Somente uma subcláusula é permitida de cada vez. Por exemplo, você não pode adicionar e remover restrições PRIMARY KEY ou UNIQUE na mesma instrução ALTER TABLE.

A tabela subjacente não pode ser modificada, truncada ou descartada enquanto uma operação de índice online está em processo.

A configuração de opção online (ON ou OFF) especificada quando você cria ou descarta um índice clusterizado é aplicada a quaisquer índices não clusterizados que devem ser recriados. Por exemplo, se o índice clusterizado for criado online usando CREATE INDEX WITH DROP_EXISTING, ONLINE=ON, todos os índices não clusterizados associados também serão recriados online.

Quando você cria ou recria um índice UNIQUE online, o construtor de índices e uma transação de usuário simultânea podem tentar inserir a mesma chave, violando a exclusividade. Se uma linha inserida por um usuário for inserida no novo índice (destino) antes que a linha original da tabela de origem seja movida para o novo índice, a operação de índice online falhará.

Embora não seja comum, a operação de índice online pode causar um deadlock quando interage com atualizações de banco de dados devido a atividades de usuário ou aplicativo. Nesses casos raros, o Mecanismo de Banco de Dados do SQL Server selecionará a atividade de usuário ou aplicativo como vítima de deadlock.

Você pode executar operações de DDL de índice online simultâneas na mesma tabela ou exibição somente quando estiver criando vários novos índices não clusterizados ou reorganizando índices não clusterizados. Todas as outras operações de índice online executadas ao mesmo tempo falham. Por exemplo, você não pode criar um novo índice online ao recriar um índice existente online na mesma tabela.

Uma operação online não pode ser executada quando um índice contém uma coluna do tipo de objeto grande e, na mesma transação, há operações de atualização antes dessa operação online. Para contornar esse problema, coloque a operação online fora da transação ou coloque-a antes de qualquer atualização na transação.

Considerações sobre espaço em disco

Em geral, os requisitos de espaço em disco são os mesmos para operações de índice online e offline. Uma exceção é o espaço em disco adicional exigido pelo índice de mapeamento temporário. Este índice temporário é usado em operações de índice online que criam, reconstroem, ou soltam um índice clusterizado. Remover um índice clusterizado online requer tanto espaço quanto criar um índice clusterizado online. Para obter mais informações, consulte Requisitos de espaço em disco para operações DDL de índice.

Considerações sobre desempenho

Embora as operações de índice online permitam atividade de atualização simultânea do usuário, as operações de índice levarão mais tempo se a atividade de atualização for muito pesada. Normalmente, as operações de índice online serão mais lentas do que as operações de índice offline equivalentes, independentemente do nível de atividade de atualização simultânea.

Como as estruturas de origem e de destino são mantidas durante a operação de índice online, o uso de recursos para transações de inserção, atualização e exclusão é aumentado, potencialmente até o dobro. Isso pode causar uma diminuição no desempenho e maior uso de recursos, especialmente o tempo de CPU, durante a operação de índice. As operações de índice online são totalmente registradas.

Embora recomendemos operações online, você deve avaliar seu ambiente e requisitos específicos. Pode ser ideal executar operações de índice offline. Ao fazer isso, os usuários têm acesso restrito aos dados durante a operação, mas a operação é concluída mais rapidamente e usa menos recursos.

Em computadores multiprocessadores que executam o SQL Server 2014, as instruções de índice podem usar mais processadores para executar as operações de verificação e classificação associadas à instrução de índice, assim como outras consultas. Você pode usar a opção de índice MAXDOP para controlar o número de processadores dedicados à operação de índice online. Dessa forma, você pode balancear os recursos usados pela operação de índice com os dos usuários simultâneos. Para obter mais informações, consulte Configurar operações de índice paralelo. Para obter mais informações sobre as edições do SQL Server que dão suporte a operações indexadas paralelas, consulte recursos compatíveis com as edições do SQL Server 2014.

Como um bloqueio S ou Sch-M é mantido na fase final da operação de índice, tenha cuidado ao executar uma operação de índice online dentro de uma transação de usuário explícita, como o bloco BEGIN TRANSACTION...COMMIT. Fazer isso faz com que a fechadura seja mantida até o término da transação, impedindo portanto simultaneidade de usuário.

A recompilação de índice online pode aumentar a fragmentação quando é permitido executar com as opções MAX DOP > 1 e ALLOW_PAGE_LOCKS = OFF. Para obter mais informações, confira como funciona: Recompilação de índice online – pode causar maior fragmentação.

Considerações sobre o log de transações

As operações de índice em larga escala, executadas offline ou online, podem gerar grandes cargas de dados que podem fazer com que o log de transações seja preenchido rapidamente. Para garantir que a operação de índice possa ser revertida, o log de transações não poderá ser truncado até que a operação de índice seja concluída; no entanto, o log pode ser feito em backup durante a operação de índice. Portanto, o log de transações deve ter espaço suficiente para armazenar as transações da operação de índice e quaisquer transações simultâneas de usuário pelo período da operação de índice. Para mais informações, consulte Espaço de Disco do Log de Transações para Operações de Índice.

Como funcionam as operações de índice online

Executar operações de índice online

ALTER INDEX (Transact-SQL)

CRIAR ÍNDICE (Transact-SQL)