Descobrindo quais tabelas estão em quais filegroups

Alguma vez você deve ter se perguntado: “Como eu sei em qual filegroup está essa tabela?”

Existe uma ideia de que a hierarquia se dá da seguinte forma:

Instância -> Database -> Filegroup -> Tabela -> Dados

Porém está faltando um item aí que acaba passando despercebido muitas vezes… Os índices! Ele é quem define onde os dados de uma tabela serão armazenados.

O índice cluster é o responsável por organizar a tabela fisicamente. Seria conveniente dizer que ele “É” os dados da sua tabela (falar que os dados estão dentro do índice cluster me soa errado, então deixemos a frase estranha mesmo 🙂 ). Então, na prática, ao criar o seu índice cluster, você estará especificando o filegroup onde os dados serão armazenados.

O índice não cluster organiza os teus dados de uma forma lógica, mas ele também ocupa espaço, uma vez que ele possui os campos que foram especificados na criação do índice (mais o teu índice cluster).

“Ok Logan, mas a minha tabela é uma HEAP, não tem índice cluster… Como fica?”

Bom, se você parar pra pensar, uma HEAP table possui a ordem física baseada na ordem de inserção do registro… Então imagine que existe um índice, mas com ordenação baseada na ordem de chegada no momento da inserção (rowid).

Vendo isso na prática, vamos criar um banco com 2 filegroups (Primary e Secondary), criar duas tabelas, uma com índice cluster e outra sem (uma heap table) e vamos inserir 1 milhão de registros nela.

Ok, feito isso, vamos ver a tabela sys.indexes e a sys.tables :

 

Notem que mesmo não criando um índice, um join com a sys.indexes retorna a tabela HEAP, por isso acho que a analogia acima é válida. Vejam também que, a não ser pelo nome da tabela, eu não consigo ver em qual filegroup o registro foi inserido. Para isso, vamos mudar a consulta, fazendo mais um join, desta vez com a sys.filegroups

Pronto… Desta forma, conseguimos descobrir “em quais filegroups estão as nossas tabelas”.

E agora… Se quisermos mudar os dados entre filegroups, como devemos fazer?

Bom, isso é assunto para um próximo post… Ou vocês acharam que os registros tinham sido inseridos para te fazer perder 30 minutos (aqui pelo menos) inserindo registros à toa? 🙂

Espero que tenham gostado… Dúvidas? Críticas? Sugestões de melhorias? Comentem… vamos agregar conteúdo!

[]’s!

3 comentários

  1. Oi Logan, tudo bem?
    Um pequeno ponto na parte da composição do seu INC:

    (mais o teu índice cluster).

    Na verdade, seria a chave do índice cluster (as colunas que o compõem) e não o índice inteiro.
    Cya!

  2. Oi Logan,

    Só uma pequena consideração referente a ‘HEAP table possui a ordem física baseada na ordem de inserção do registro…’

    Na heap, o dado é inserido em qualquer página que possuia espaço disponível, logo não há ordem de inserção do registro. Além disso, a heap é composta por páginas desordenadas semligação entre si. Logo, heap e ordenação não combinam =)

    1. É verdade Socorro!
      Quando eu falei em ordem física eu estava pensando em algo do tipo “entrou 2 ou mais linhas, elas são armazenadas conforme chegar no banco”, por isso comentei pra imaginar a ordem por rowid…
      Valeu o comentário! 🙂

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.