sexta-feira, 10 de setembro de 2010

Entendendo o armazenamento de dados

Quando fazemos um INSERT no banco de dados estamos inserindo informações, mas muitos desenvolvedores e até DBAs não sabem como essas informações ficam armazenadas dentro do SQL Server, como é controlada a alocação das páginas e extents ou qual a estrutura usada para o armazenamento.

Irei falar um pouco sobre armazenamento de dados no SQL Server e como funcionam a utilização de páginas, extents, PFS, GAM e SGAM.

Todas as informações do SQL Server ficam armazenadas em páginas. Páginas são blocos de dados de 8K, se a informação for maior do que 8K ela irá ocupar quantas páginas forem necessárias.
Outra estrutura existente no SQL é chamada de extent, uma extent é formada por um conjunto de 8 páginas, totalizando então 64K. Uma extent pode ser uniforme, caso tenha informações de somente um objeto ou mista caso tenha informações de mais de um objeto. Todo novo objeto criado no banco de dados utiliza uma página em uma extent mista, quando este objeto atingir 64K ele passa a ocupar uma extent inteira, ou seja, uma extent uniforme.
Para alocar as informações o SQL Server utiliza GAM (Global Allocation Map) e SGAM (Shared Global Allocation Map) para o controle de extents e PFS(Page Free Space) para controlar as páginas. As informações de GAM e SGAM controlam até 63904 extent (4GB), então a cada 4GB de informações existem informações de GAM e SGAM. São com essas informações que o SQL controla se uma extent é uniforme ou mista ou se uma extent possui página disponível para alocação por exemplo. Quando uma extent é mista ela utiliza as informações da SGAM para fazer este controle, quando o bit da SGAM estiver como 0 é porque a extent está cheia e não há espaço para alocação, quando o bit for 1 é porque a extent é mista e existe pelo menos uma página disponível. Quando uma extent é uniforme ela passa a utilizar a GAM, quando o bit da GAM for 1 é porque está livre e quando for 0 está alocada.
Para fazer o controle de páginas é utilizada a informação da PFS, essa informação aparece a cada 8088 páginas (64MB). É através da PFS que o SQL controla a quantidade disponível para alocação na página, ela guarda informação em percentual e por faixa, seguem as faixa por fator de preenchimento que o SQL utiliza:
Faixa 1: 0% a 50%
Faixa 2: 51% a 80%
Faixa 3: 81% a 95%
Faixa 4: 96% a 100%

Existe ainda outra informação chamada de IAM (Index Allocation Map), possui praticamente a mesma estrutura da GAM e SGAM. Uma IAM é usada para guarda informações de somente um objeto, ou seja, toda tabela ou índice possui uma IAM, através dela é possivel ver todas as extents que pertence a um objeto.

Está é uma visão geral de como o SQL Server gerencia o controle e armazenamento das informações.

Abraços,
Rodrigo Figueiredo

2 comentários:

  1. Muito legal a sua iniciativa! E paguei uma cadeira de BD, mas infelizmente limitou apenas ao modelo de entidade e relacionamento...Você teria alguma universidade ou curso online? Pois onde eu moro não existe rsrsrs

    ResponderExcluir
    Respostas
    1. Olá Kawan desculpa a demorar de 4 meses pra responder!! hehe
      Há um bom tempo não acessava esse blog, irei voltar a escrever agora.

      Então existem sim vários cursos online e muito bom disponíveis na internet, segue alguns sites: www.srnimbus.com.br; www.sqlservercentral.com; www.aprendapowershell.com.br.

      Além de vários outro blogs, que acho uma das melhores formas de aprendizado, existe muito conteúdo muito bom nos blogs.

      Abraços,
      Rodrigo Figueiredo
      figueiredo.rodrigo@hotmail.com

      Excluir