Diretrizes para executar as operações de índice online
Quando você executa operações de índice online, as diretrizes seguintes se aplicam:
Os índices clusterizados devem ser criados, reconstruídos ou descartados offline quando a tabela subjacente contiver tipos de dados LOB (objeto grande): image, ntext, text, varchar(max), nvarchar(max), varbinary(max) e xml.
Índices não-cluster não exclusivos podem ser criados online, quando a tabela contiver tipos de dados LOB, mas nenhuma dessas colunas são usadas na definição de índice seja como colunas-chaves ou colunas não-chave. Os índices não-cluster definidos como tipos de dados LOB devem ser criados ou recriados offline.
Os índices em tabelas temporárias locais, não podem ser criados, recriados ou soltos offline. Esta restrição não se aplica a índices em tabelas temporárias globais.
Observação |
---|
As operações de índice online estão disponíveis somente nas edições Enterprise, Developer e Evaluation do SQL Server. |
A tabela seguinte mostra os operações de índice que podem ser executadas online e os índices que são excluídos destas operações online. Restrições adicionais também estão incluídas.
Operação de índice online |
Índices excluídos |
Outras restrições |
---|---|---|
ALTER INDEX REBUILD |
Índice cluster desabilitado ou exibição indexada desabilitada Índice XML Índice em uma tabela temporária local |
Especificar a palavra-chave ALL pode fazer com que a operação falhe, quando a tabela contiver um índice excluído. Se aplicam as restrições adicionais na reconstrução de índices desabilitados. Para obter mais informações, consulte Diretrizes para desabilitar índices. |
CREATE INDEX |
Índice XML Índice cluster exclusivo inicial em uma exibição Índice em uma tabela temporária local |
|
CREATE INDEX WITH DROP_EXISTING |
Índice cluster desabilitado ou exibição indexada desabilitada Índice em uma tabela temporária local Índice XML |
|
DROP INDEX |
Índice desabilitado Índice XML Índice não-cluster Índice em uma tabela temporária local |
Os índices múltiplos não podem ser especificados dentro de uma única declaração. |
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY ou UNIQUE) |
Índice em uma tabela temporária local Índice cluster |
Somente um subcláusula por vez é permitida. Por exemplo, você não pode acrescentar e soltar restrições PRIMARY KEY ou UNIQUE na mesma declaração ALTER TABLE. |
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY ou UNIQUE) |
Índice cluster |
|
A tabela subjacente não pode ser modificada, truncada ou solta enquanto uma operação de índice online está em curso.
A configuração especificada de opção online (ON ou OFF) quando você cria ou solta um índice cluster é aplicada a qualquer índice não-cluster que deva ser reconstruído. Por exemplo, se o índice cluster for construído online usando CREATE INDEX WITH DROP_EXISTING, ONLINE=ON, todos os índices não-cluster associados também serão recriados.
Quando você cria ou reconstrói um índice UNIQUE online, o construtor de índice e uma transação de usuário simultânea podem tentar inserir a mesma chave, e, portanto, violando a singularidade. Se uma fila digitada por um usuário é inserida no índice novo (destino) antes que a fila original da tabela de destino seja movida para o índice novo, a operação de índice online falhará.
Embora não seja comum, a operação de índice online pode causar um deadlock quando interagir com as atualizações do banco de dados por causa das atividades de usuário ou aplicativo. Nesses raros casos, o Mecanismo de banco de dados do SQL Server irá selecionar a atividade do usuário ou aplicativo como uma vítima de deadlock.
Você pode executar operações DDL simultâneas de índice online na mesma tabela ou exibição apenas quando está criando múltiplos índices não-cluster novos, ou reorganizando índices não-cluster. Todas as outras operações de índice online executadas no mesmo tempo falham. Por exemplo, você não pode criar um novo índice online enquanto estiver reconstruindo um índice online existente na mesma tabela.
Considerações do espaço em disco
Geralmente, 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 requerido pelo índice de mapeamento temporário. Este índice temporário é usado em operações de índice online que criam, reconstroem, ou soltam um índice cluster. Soltar um índice cluster online requer tanto espaço quanto criar um índice cluster online. Para obter mais informações, consulte Requisitos de espaço em disco para operações de índice DDL.
Considerações sobre desempenho
Embora as operações de índice online permitam atividade de atualização de usuário simultânea, as operações de índice levarão mais tempo se a atividade de atualização for muito pesada. Tipicamente, as operações de índice online serão mais lentas que as operações de índice offline equivalentes, independentemente do nível de atividade de atualização simultâneo.
Em razão de ambas as estruturas de fonte e destino serem mantidas durante a operação de índice online, o uso de recurso para as operações de inserção, atualização e exclusão é aumentado, potencialmente até o dobro. Isto poderia causar uma diminuição no desempenho e maior uso de recurso, especialmente tempo de CPU, durante a operação de índice. As operações de índice online estão em log completo.
Embora recomendemos as operações online , você deve avaliar o seu ambiente e os requisitos específicos. Pode ser melhor executar as operações de índice offline. Fazendo isto, os usuários têm acesso restrito aos dados durante a operação, mas a operação termina mais rapidamente e usa menos recursos.
Em computadores multiprocessadores em execução no SQL Server Enterprise, as instruções de índice podem usar mais processadores para executar operações de exame e classificação associadas à instrução de índice da mesma forma que outras consultas. Você pode usar a opção de índice MAXDOP para controlar o número de processadores dedicados a uma operação de índice online. Desse modo, é possível equilibrar os recursos usados por uma operação de índice com aqueles dos usuários simultâneos. Para obter mais informações, consulte Configurando operações de índice paralelo.
Em razão do bloqueio S-lock ou Sch-M ser mantido na fase final da operação de índice, tome cuidado ao executar uma operação de índice online dentro de uma transação de usuário explicita, como no 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.
Considerações do 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 assegurar que a operação de índice possa ser revertida, o log de transações não pode ser truncado até que a operação de índice se complete. Durante a operação de índice, no entanto, poderá ser feito backup do log. 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 obter mais informações, consulte Espaço em disco de log de transações para operações de índice.
Consulte também