Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Ao criar ou reconstruir um índice, definindo a opção SORT_IN_TEMPDB como ON, você pode direcionar o Mecanismo de Banco de Dados do SQL Server para usar tempdb para armazenar os resultados de classificação intermediários usados para criar o índice. Embora essa opção aumente a quantidade de espaço em disco temporário usado para criar um índice, a opção pode reduzir o tempo necessário para criar ou reconstruir um índice quando o tempdb está em um conjunto de discos diferente do banco de dados do usuário. Para obter mais informações sobre tempdb, consulte Configurar a opção de configuração do servidor de criação de memória de índice.
Fases da construção do índice
À medida que o Mecanismo de Banco de Dados cria um índice, ele passa pelas seguintes fases:
O Mecanismo de Banco de Dados primeiro verifica as páginas de dados da tabela base para recuperar valores de chave e cria uma linha de folha de índice para cada linha de dados. Quando os buffers de classificação internos estiverem preenchidos com entradas de índice de folha, as entradas são ordenadas e gravadas no disco como uma etapa intermediária de ordenação. Em seguida, o Mecanismo de Banco de Dados retoma a verificação da página de dados até que os buffers de classificação sejam preenchidos novamente. Esse padrão de varredura de várias páginas de dados seguido de classificação e gravação de uma execução de classificação continua até que todas as linhas da tabela base tenham sido processadas.
Em um índice agrupado, as linhas de folha do índice são as linhas de dados da tabela; portanto, as execuções de classificação intermediária contêm todas as linhas de dados. Em um índice não agrupado, as linhas de folha podem conter colunas não-chave, mas geralmente são menores do que um índice agrupado. Se as chaves de índice forem grandes ou se houver várias colunas não-chave incluídas no índice, uma execução de classificação não clusterizada poderá ser grande. Para obter mais informações sobre como incluir colunas não-chave, consulte Criar índices com colunas incluídas.
O motor de base de dados mescla as sequências ordenadas de linhas de folha de índice em um único fluxo ordenado. O componente de ordenação e mesclagem do Mecanismo de Banco de Dados começa com a primeira página de cada execução de classificação, encontra a chave mais baixa em todas as páginas e passa essa linha de folha para o índice de criação. A próxima chave mais baixa é processada e, em seguida, a próxima, e assim por diante. Quando a última linha de índice de folha é extraída de uma página de execução de classificação, o processo muda para a próxima página dessa execução de classificação. Quando todas as páginas em uma extensão de execução de classificação tiverem sido processadas, a extensão será liberada. À medida que cada linha de índice de folha é passada para o componente de criação de índice, ela é incluída em uma página de índice de folha no buffer. Cada página de folha é escrita à medida que é preenchida. À medida que as páginas folha são escritas, o Mecanismo de Banco de Dados também cria as camadas superiores do índice. As páginas de índice de nível superior são escritas à medida que são preenchidas.
SORT_IN_TEMPDB Opção
Quando SORT_IN_TEMPDB é definido como OFF, o padrão, as execuções de classificação são armazenadas no grupo de arquivos de destino. Durante a primeira fase de criação do índice, as leituras alternadas das páginas da tabela base e gravações das corridas de ordenação movem as cabeças de leitura/gravação do disco de uma área para outra. Os cabeçalhos estão na área da página de dados à medida que as páginas de dados são digitalizadas. Eles transferem-se para uma área de espaço livre quando os buffers de ordenação são preenchidos e o processo de ordenação atual precisa ser gravado no disco e então retornam para a área da página de dados à medida que a verificação da página da tabela é retomada. O movimento da cabeça de leitura/escrita é maior na segunda fase. Nesse momento, o processo de ordenação normalmente alterna leituras de cada área de execução de ordenação. Tanto as execuções de ordenação quanto as novas páginas de índice são criadas no grupo de arquivos de destino. Isso significa que, enquanto o Mecanismo de Banco de Dados está espalhando leituras pelas sequências de ordenação, ele precisa saltar periodicamente para as extensões de índice para escrever novas páginas de índice à medida que são preenchidas.
Se a opção SORT_IN_TEMPDB estiver definida como ON e tempdb estiver em um conjunto separado de discos do grupo de arquivos de destino, durante a primeira fase, as leituras das páginas de dados ocorrerão em um disco diferente das gravações na área de trabalho de classificação em tempdb. Isso significa que as leituras de disco das chaves de dados geralmente continuam mais em série no disco, e as gravações no disco tempdb também são geralmente seriais, assim como as gravações para criar o índice final. Mesmo que outros usuários estejam usando o banco de dados e acessando endereços de disco separados, o padrão geral de leituras e gravações é mais eficiente quando SORT_IN_TEMPDB é especificado do que quando não é.
A opção SORT_IN_TEMPDB pode melhorar a contiguidade das extensões do índice, especialmente se a operação CREATE INDEX não estiver sendo processada em paralelo. As extensões da área de trabalho de classificação são liberadas em uma base um pouco aleatória em relação à sua localização no banco de dados. Se as áreas de trabalho de classificação estiverem contidas no grupo de arquivos de destino, à medida que as extensões de trabalho de classificação forem liberadas, elas poderão ser adquiridas pelas solicitações de extensões para manter a estrutura de índice conforme ela é construída. Isso pode randomizar os locais das extensões do índice até certo ponto. Se as extensões de classificação são mantidas separadamente em tempdb, a sequência na qual elas são liberadas não tem efeito sobre a localização das extensões do índice. Além disso, quando as execuções de classificação intermediária são armazenadas em tempdb em vez do grupo de arquivos de destino, há mais espaço disponível no grupo de arquivos de destino. Isso aumenta as chances de que as extensões do índice sejam contíguas.
A opção SORT_IN_TEMPDB afeta apenas a instrução atual. Nenhum metadados registra que o índice foi ou não classificado em tempdb. Por exemplo, se você criar um índice não clusterizado usando a opção SORT_IN_TEMPDB e, posteriormente, criar um índice clusterizado sem especificar a opção, o Mecanismo de Banco de Dados não usará a opção quando recriar o índice não clusterizado.
Note
Se uma operação de classificação não for necessária ou se a classificação puder ser executada na memória, a opção SORT_IN_TEMPDB será ignorada.
Requisitos de espaço em disco
Ao definir a opção SORT_IN_TEMPDB como ON, você deve ter espaço livre em disco suficiente disponível no tempdb para manter as execuções de classificação intermediárias e espaço livre em disco suficiente no grupo de arquivos de destino para armazenar o novo índice. A instrução CREATE INDEX falhará se não houver espaço livre suficiente e houver algum motivo pelo qual os bancos de dados não podem crescer automaticamente para adquirir mais espaço, como nenhum espaço no disco ou o crescimento automático está desativado.
Se SORT_IN_TEMPDB estiver definido como OFF, o espaço livre em disco disponível no grupo de arquivos de destino deverá ser aproximadamente do tamanho do índice final. Durante a primeira fase, as séries de classificação são construídas e requerem aproximadamente o mesmo espaço que o índice final. Durante a segunda fase, cada extensão de execução de classificação é liberada após ter sido processada. Isso significa que as extensões de execução de classificação são liberadas aproximadamente na mesma taxa em que as extensões são adquiridas para manter as páginas de índice finais; portanto, os requisitos gerais de espaço não excedem muito o tamanho do índice final. Um efeito colateral disso é que, se a quantidade de espaço livre estiver muito próxima do tamanho do índice final, o Mecanismo de Banco de Dados geralmente reutilizará as extensões de execução de classificação muito rapidamente depois que elas forem liberadas. Como as extensões de execução de classificação são liberadas de uma maneira um pouco aleatória, isso reduz a continuidade das extensões de índice nesse cenário. Se o SORT_IN_TEMPDB estiver definido como OFF, a continuidade das extensões de índice será melhorada se houver espaço livre suficiente disponível no grupo de arquivos de destino, permitindo que as extensões de índice sejam alocadas a partir de um conjunto contíguo, ao invés de serem alocadas a partir das extensões de execução de ordenação recém-desalocadas.
Ao criar um índice não clusterizado, você deve ter disponível como espaço livre:
Se SORT_IN_TEMPDB estiver definido como ON, deve haver espaço livre suficiente no tempdb para armazenar as execuções de classificação e espaço livre suficiente no grupo de arquivos de destino para armazenar a estrutura de índice final. As execuções de classificação contêm as linhas de folha do índice.
Se SORT_IN_TEMPDB estiver definido como OFF, o espaço livre no grupo de arquivos de destino deverá ser grande o suficiente para armazenar a estrutura de índice final. A continuidade das extensões do índice pode ser melhorada se houver mais espaço livre disponível.
Ao criar um índice clusterizado em uma tabela que não tenha índices não clusterizados, você deve ter disponível como espaço livre:
Se SORT_IN_TEMPDB estiver definido como ON, deve haver espaço livre suficiente no tempdb para armazenar as execuções de classificação. Incluem as linhas de dados da tabela. Deve haver espaço livre suficiente no grupo de arquivos de destino para armazenar a estrutura de índice final. Isso inclui as linhas de dados da tabela e a árvore B do índice. Pode ser necessário ajustar a estimativa para fatores como ter um tamanho de chave grande ou um fator de preenchimento com um valor baixo.
Se SORT_IN_TEMPDB estiver definido como OFF, o espaço livre no grupo de arquivos de destino deverá ser grande o suficiente para armazenar a tabela final. Isso inclui a estrutura do índice. A continuidade da tabela e das extensões do índice pode ser melhorada se houver mais espaço livre disponível.
Ao criar um índice clusterizado em uma tabela que tenha índices não clusterizados, você deve ter disponível como espaço livre:
Se SORT_IN_TEMPDB estiver definido como ON, deve haver espaço livre suficiente no tempdb para armazenar a coleção de execuções de classificação para o maior índice, normalmente o índice clusterizado, e espaço livre suficiente no grupo de arquivos de destino para armazenar as estruturas finais de todos os índices. Isso inclui o índice clusterizado que contém as linhas de dados da tabela.
Se SORT_IN_TEMPDB estiver definido como OFF, o espaço livre no grupo de arquivos de destino deverá ser grande o suficiente para armazenar a tabela final. Isto inclui as estruturas de todos os índices. A continuidade da tabela e das extensões do índice pode ser melhorada se houver mais espaço livre disponível.
Tarefas relacionadas
Reorganizar e reconstruir índices
Conteúdo relacionado
Configurar a opção de configuração do servidor de criação de memória de índice