Descobrindo quais tabelas esto 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:

Instncia -> Database -> Filegroup -> Tabela -> Dados

Porm est faltando um item a que acaba passando despercebido muitas vezes… Os ndices!Ele quem define onde os dados de uma tabela sero armazenados.

O ndice cluster o responsvel por organizar a tabela fisicamente. Seria conveniente dizer que ele “” os dados da sua tabela (falar que os dados esto dentro do ndice cluster me soa errado, ento deixemos a frase estranha mesmo 🙂 ). Ento, na prtica, ao criar o seu ndice cluster, voc estar especificando o filegroup onde os dados sero armazenados.

O ndice no cluster organiza os teus dados de uma forma lgica, mas ele tambm ocupa espao, uma vez que ele possui os campos que foram especificados na criao do ndice (mais o teu ndice cluster).

“Ok Logan, mas a minha tabela uma HEAP, no tem ndice cluster… Como fica?”

Bom, se voc parar pra pensar, uma HEAP table possui a ordem fsica baseada na ordem de insero do registro… Ento imagine que existe um ndice, mas com ordenao baseada na ordem de chegada no momento da insero (rowid).

Vendo isso na prtica, 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 milho de registros nela.

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

 

Notem que mesmo no criando um ndice, um join com a sys.indexes retorna a tabela HEAP, por isso acho que a analogia acima vlida. Vejam tambm que, a no ser pelo nome da tabela, eu no 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 esto as nossas tabelas”.

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

Bom, isso assunto para um prximo post… Ou vocs acharam que os registros tinham sido inseridos para te fazer perder 30 minutos (aqui pelo menos) inserindo registros toa? 🙂

Espero que tenham gostado… Dvidas? Crticas? Sugestes de melhorias? Comentem… vamos agregar contedo!

[]’s!

3 comentários

  1. Oi Logan, tudo bem?
    Um pequeno ponto na parte da composio do seu INC:

    (mais o teu ndice cluster).

    Na verdade, seria a chave do ndice cluster (as colunas que o compem) e no o ndice inteiro.
    Cya!

  2. Oi Logan,

    S uma pequena considerao referente a ‘HEAP table possui a ordem fsica baseada na ordem de insero do registro’

    Na heap, o dado inserido em qualquer pgina que possuia espao disponvel, logo no h ordem de insero do registro. Alm disso, a heap composta por pginas desordenadas semligao entre si. Logo, heap e ordenao no combinam =)

    1. verdade Socorro!
      Quando eu falei em ordem fsica eu estava pensando em algo do tipo “entrou 2 ou mais linhas, elas so armazenadas conforme chegar no banco”, por isso comentei pra imaginar a ordem por rowid…
      Valeu o comentrio! 🙂

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.