Data Buffer

O que é um BUFFER?

Dentro do SQL Server, Buffer é uma estrutura de tamanho fixo de 8KB utilizada para servir primariamente como cache de dados. Tanto a memória como os arquivos em disco são segmentados em páginas de 8Kb. Ao contrário dos demais Bancos de dados (Oracle, DB2, etc), esse tamanho é fixo e não pode ser alterado.

image

Dentro de uma página, encontram-se os registros de dados – também chamados de linhas ou rows. Essas informações são posicionadas através dos slots, que são ponteiros localizados no final de cada buffer. Isso permite que o conteúdo da informação fique localizado em qualquer região dentro da página, enquanto que o slot serve como uma referência para encontrá-la.

É comum referenciar uma página através da nomenclatura:

DBID:FILEID:PAGEID

Isso significa que um bloqueio PAGELOCK 2:1:2 corresponde a um bloqueio da página do Banco de dados 2 (TEMPDB), arquivo 1 (Tempdb.MDF) e offset 2 (2*8kb = 16KB).

As páginas de dados, ou buffers, são encontradas em memória ou nos arquivos de dados (MDF e NDF) – não são usados em arquivos de LOG.

Comments

  • Anonymous
    August 09, 2010
    Olá fabrício, bem legal. Eu já conhecia tudo isso e achei um post rápido e interessante. Poderias comentar sobre o comando DBCC Page? Tipo: citar a quantidade de bytes usado por cada componente deste comando (header, tipo variável, etc)? Como calcular o valor armazenado para uma linha que possua varchar e outra que não possua, etc. Até logo

  • Anonymous
    August 11, 2010
    Olá DBA! As informações sobre o DBCC PAGE estão no livro Inside SQL Server - Storage Engine. Não sou um grande fã de explicar como funciona os hexadecimais de cada registro porque isso pode mudar com o tempo. Um exemplo disso é a compactação de tabela: ao marcar a partição/índice/tabela como compactada, sua representação muda completamente. Outro caso disso é o SPARSE column, que apresenta uma modificação brutal na forma de armazenamento. Por isso e mais alguns outros motivos, vou direcioná-lo ao livro Inside SQL. Após escrever tudo isso, já digo que você me deu uma boa idéia para artigo: você sabia que uma coluna NULLABLE ocupa o mesmo espaço de uma coluna NÃO-NULLABLE? Abraços, Fabricio

  • Anonymous
    August 12, 2010
    The comment has been removed

  • Anonymous
    August 20, 2010
    Olá DBA! É parecido com isso, mas não é exatamente igual. Assim que der postarei mais informações sobre sua ótima sugestão. Abraços, Fabricio

  • Anonymous
    August 20, 2010
    Explicação simples e esclarecedora. Parabéns!