Diretrizes para operações de índice online
Quando você executa operações de índice online, as diretrizes seguintes se aplicam:
Os índices clusterizados devem ser criados, recriados ou descartados offline quando a tabela subjacente contiver estes tipos de dados LOB (objeto grande): image, ntext e text.
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 não estão disponíveis em todas as edições do Microsoft SQL Server. Para obter uma lista de recursos com suporte nas edições do SQL Server, consulte Recursos compatíveis com as edições do SQL Server 2012. |
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 Desabilitar índices e restrições. |
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 clusterizado |
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. |
|
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 ao mesmo tempo falham. Por exemplo, você não pode criar um novo índice online enquanto estiver reconstruindo um índice online existente na mesma tabela.
Uma operação online não pode ser efetuada quando um índice contém uma coluna de um tipo de objeto grande, e na mesma transação há operações de atualização anteriores a essa operação online. Para resolver esse problema, coloque a operação online fora da transação ou coloque-a antes de quaisquer atualizações na transação.
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 que estão executando SQL Server 2012, as instruções de índice podem usar mais processadores para executar a verificação e operações de classificação associadas à instrução de índice, assim como outras consultas fazem. Você pode usar a opção de índice MAXDOP para controlar o número de processadores dedicados à 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 Configurar operações de índice paralelo. Para obter mais informações sobre as edições do SQL Server que oferecem suporte a operações indexadas paralelas, consulte Recursos compatíveis com as edições do SQL Server 2012 (https://go.microsoft.com/fwlink/?linkid=232473).
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.
A recriação de índices online pode aumentar a fragmentação quando é permitido executá-la com as opções MAX DOP > 1 e ALLOW_PAGE_LOCKS = OFF. Para obter mais informações, consulte Como funciona: Recriação de Índice Online - Pode causar fragmentação elevada.
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.
Conteúdo relacionado
Como funcionam as operações de índice online