Partilhar via


Dados de estouro de linha excedendo 8 KB

Uma tabela pode conter um máximo de 8.060 bytes por linha. No SQL Server 2008 essa restrição é reduzida a tabelas que contenham colunas varchar, nvarchar, varbinary, sql_variant ou colunas tipo de dados CLR definido pelo usuário. O comprimento de cada uma dessas colunas ainda deve se encaixar no limite de 8.000 bytes. Contudo, suas larguras combinadas podem exceder o limite de 8.060 bytes. Isso se aplica a colunas varchar, nvarchar, varbinary, sql_variant ou de tipo de dados CLR definido pelo usuário quando criadas e modificadas, e também quando dados são atualizados ou inseridos.

ObservaçãoObservação

Essa restrição não se aplica a colunas varchar(max), nvarchar(max), varbinary(max), ntext, text, image ou xml. Para obter mais informações sobre o armazenamento dessas colunas, consulte Usando tipos de dados de valor grande, Usando dados de texto e de imageme Usando dados XML.

Considerações sobre dados de estouro de linha

Quando as colunas combinadas varchar, nvarchar, varbinary, sql_variant ou coluna tipo de dados CLR definido pelo usuário excederem 8.060 bytes por linha, considere o seguinte:

  • Ultrapassar o limite do tamanho de linha de 8.060 bytes pode afetar o desempenho porque o SQL Server ainda mantém um limite de 8 KB por página. Quando colunas combinadas varchar, nvarchar, varbinary, sql_variant ou tipo de dado CLR definido pelo usuário excederem esse limite, o Mecanismo de Banco de Dados do SQL Server moverá a coluna de registro de maior largura para outra página na unidade de alocação ROW_OVERFLOW_DATA, embora mantenha um ponteiro de 24 bytes na página original. A movimentação de registros volumosos para outra página ocorre dinamicamente à medida que os registros aumentam com base nas operações de atualização. As operações de atualização que diminuem os registros podem fazer com que os registros sejam retornados para a página original na unidade de alocação IN_ROW_DATA. Da mesma forma, a consulta e execução de outras operações de seleção, como classificações e junções em grandes registros que contêm tempo de processamento de dados de estouro de linha, uma vez que esses registros são processados de forma síncrona em vez de assíncrona.

    Portanto, quando uma tabela é projetada com várias colunas varchar, nvarchar, varbinary, sql_variant ou com coluna tipo de dado CLR definido pelo usuário, considere a porcentagem de linhas que deverão exceder e a freqüência com que os dados de estouro serão provavelmente consultados. Se houver provavelmente consultas freqüentes em várias linhas dos dados de estouro de linha, considere normalizar a tabela de modo que algumas colunas sejam movidas para outra tabela. Em seguida, isso pode ser consultado em uma operação JOIN assíncrona.

  • O comprimento de colunas individuais deve ainda se encaixar no limite de 8.000 bytes para colunas varchar, nvarchar, varbinary, sql_variant e colunas tipo de dado CLR definido pelo usuário. Só os comprimentos combinados delas podem exceder o limite de linha de 8.060 bytes de uma tabela.

  • A soma de outras colunas de tipo de dados, inclusive char e dados nchar deve enquadrar-se no limite de linha de 8.060 bytes. Dados de objeto grandes também estão isentos do limite de linha de 8.060 bytes.

  • A chave de índice de um índice clusterizado não pode conter colunas varchar que tenham dados existentes na unidade de alocação ROW_OVERFLOW_DATA. Se um índice clusterizado for criado em uma coluna varchar e os dados existentes estiverem na unidade de alocação IN_ROW_DATA, as ações subseqüentes de entrada e atualização da coluna que extraem os dados da linha falharão. Para obter mais informações sobre unidades de alocação, consulte Organização de tabela e índice.

  • Você pode incluir colunas contendo dados de estouro de linha como colunas de chave ou não chave de um índice não clusterizado.

  • O limite do tamanho de registros para tabelas que usam colunas esparsas é de 8.018 bytes. Quando os dados convertidos mais os dados de registros existentes ultrapassam os 8.018 bytes, é retornado o ERRO MSSQLSERVER 576. Quando colunas são convertidas entre tipos esparsos e não esparsos, Mecanismo de Banco de Dados mantém uma cópia dos dados de registros atuais. Isso dobra temporariamente o armazenamento exigido para o registro.

  • Para obter informações sobre tabelas ou índices que podem conter dados de estouro de linha, use a função de gerenciamento dinâmico sys.dm_db_index_physical_stats.

Consulte também

Conceitos