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 (5)

  1. DBA SQL disse:

    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

  2. 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

  3. DBA SQL disse:

    Olá Fabrício,

    Sim eu sabia. Tipo, um campo que permite NULL, quando está como NULL ocupado o maior espaço do tipo especificado para o campo.

    Exemplo: Caso eu tenha um campo varchar(1000) e nele eu tenha null, o campo vai ocupar 1000 bytes não é isso?

    Abraço.

  4. 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

  5. Fabricio Lima disse:

    Explicação simples e esclarecedora. Parabéns!

Skip to main content