none
Index HEAP RRS feed

  • Pergunta

  • Galera, tenho uma duvida : uma tabela com vários índices não CLUSTER   que não estão fragmentados, porém  esta tabela não possui indice cluster . O heap da fica fragmentado. Isso quer dizer que a tabela esta fragmentada ou não ?!
    segunda-feira, 14 de julho de 2014 15:12

Respostas

  • Thenriquelima,

    Uma tabela heap não possui uma ordenação definida, ela por si só define uma "ordenação" pela inclusão e manipulação de dados na tabela. Não é correto afirmar que uma tabela heap está fragmentada, porque ela não possui um critério de ordenação definido.

    O ideal seria criar índices "clusterizados", definindo uma chave primária para cada tabela nesta situação. Caso não seja possível, crie ao menos um índice "não clusterizado" para otimizar suas principais consultas.

    Para maiores informações sobre o assunto veja:

    http://msdn.microsoft.com/en-us/library/ms190457.aspx

    http://technet.microsoft.com/en-us/library/aa933131(v=sql.80).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta thenriquelima terça-feira, 5 de agosto de 2014 14:18
    quarta-feira, 23 de julho de 2014 18:19
    Moderador
  • Não é correto afirmar que uma tabela heap está fragmentada, porque ela não possui um critério de ordenação definido.

    O conceito de fragmentação em Heaps existe e é chamado de "Forwarded Pointers".

    Nesse link é possivel ler sobre isso:

    http://blogs.msdn.com/b/mssqlisv/archive/2006/12/01/knowing-about-forwarded-records-can-help-diagnose-hard-to-find-performance-issues.aspx


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    Alex,

    Acredito que não ficou claro para você(ou para mim) o entendimento de "fragmentação".

    Por favor, leia e analise: "Se não existe uma ordenação determinada, então não existe uma fragmentação". Não há como fragmentar algo que não foi indicado para ser ordenado, ele sempre será desordenado.

    O conceito "ForwardPointer" não define qual registro será apresentado antes de outro registro. Não existe um "critério definido" e com isso o I/O em disco é alto. Isto é apresentado no exemplo indicado no post do Peter.

    Continuo sugerindo ao "Thenriquelima" para criar índices, de acordo com às possibilidade indicadas no post anterior.

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta thenriquelima terça-feira, 5 de agosto de 2014 14:18
    quarta-feira, 23 de julho de 2014 18:50
    Moderador
  • Durval,

    Entendo o seu ponto de vista, mas o conceito de "heap fragmentation" existe, e foi isso que quis dizer.

    Segue outro post sobre o assunto:

    http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2930-fixing-heap-fragmentation/


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quarta-feira, 23 de julho de 2014 18:58
  • Durval,

    Entendo o seu ponto de vista, mas o conceito de "heap fragmentation" existe, e foi isso que quis dizer.

    Segue outro post sobre o assunto:

    http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2930-fixing-heap-fragmentation/


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    Alex,

    Entendo que existe o termo "Heap fragmentation", mas como Deus (ops... desculpe) Paul disse: "Não tente organizar sua 'Heap Table' criando e dropando um índice, continue 'heap' " !!! Ou então crie definitivamente um índice cluster.

    Isso é que importa. =^D

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta thenriquelima terça-feira, 5 de agosto de 2014 14:18
    quarta-feira, 23 de julho de 2014 19:16
    Moderador

Todas as Respostas

  • Essa sua frase ficou um pouco confusa "O heap da fica fragmentado", mas estou entendendo que na sua analise os indices NON-CLUSTERED apareceram sem fragmentação e a HEAP apareceu fragmentada.

    Se for isso, é possivel nesse caso ter a HEAP fragmentada, pois são estruturas diferentes.

    Se você quiser remover a fragmentação da HEAP também, eu sugiro que você avalie a escolha de um indice CLUSTERED que melhor atender o seu caso, crie o indice e use-o (não remova).


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    segunda-feira, 14 de julho de 2014 15:45
  • Thenriquelima,

    Uma tabela heap não possui uma ordenação definida, ela por si só define uma "ordenação" pela inclusão e manipulação de dados na tabela. Não é correto afirmar que uma tabela heap está fragmentada, porque ela não possui um critério de ordenação definido.

    O ideal seria criar índices "clusterizados", definindo uma chave primária para cada tabela nesta situação. Caso não seja possível, crie ao menos um índice "não clusterizado" para otimizar suas principais consultas.

    Para maiores informações sobre o assunto veja:

    http://msdn.microsoft.com/en-us/library/ms190457.aspx

    http://technet.microsoft.com/en-us/library/aa933131(v=sql.80).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta thenriquelima terça-feira, 5 de agosto de 2014 14:18
    quarta-feira, 23 de julho de 2014 18:19
    Moderador
  • Não é correto afirmar que uma tabela heap está fragmentada, porque ela não possui um critério de ordenação definido.

    O conceito de fragmentação em Heaps existe e é chamado de "Forwarded Pointers".

    Nesse link é possivel ler sobre isso:

    http://blogs.msdn.com/b/mssqlisv/archive/2006/12/01/knowing-about-forwarded-records-can-help-diagnose-hard-to-find-performance-issues.aspx


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quarta-feira, 23 de julho de 2014 18:27
  • Não é correto afirmar que uma tabela heap está fragmentada, porque ela não possui um critério de ordenação definido.

    O conceito de fragmentação em Heaps existe e é chamado de "Forwarded Pointers".

    Nesse link é possivel ler sobre isso:

    http://blogs.msdn.com/b/mssqlisv/archive/2006/12/01/knowing-about-forwarded-records-can-help-diagnose-hard-to-find-performance-issues.aspx


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    Alex,

    Acredito que não ficou claro para você(ou para mim) o entendimento de "fragmentação".

    Por favor, leia e analise: "Se não existe uma ordenação determinada, então não existe uma fragmentação". Não há como fragmentar algo que não foi indicado para ser ordenado, ele sempre será desordenado.

    O conceito "ForwardPointer" não define qual registro será apresentado antes de outro registro. Não existe um "critério definido" e com isso o I/O em disco é alto. Isto é apresentado no exemplo indicado no post do Peter.

    Continuo sugerindo ao "Thenriquelima" para criar índices, de acordo com às possibilidade indicadas no post anterior.

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta thenriquelima terça-feira, 5 de agosto de 2014 14:18
    quarta-feira, 23 de julho de 2014 18:50
    Moderador
  • Durval,

    Entendo o seu ponto de vista, mas o conceito de "heap fragmentation" existe, e foi isso que quis dizer.

    Segue outro post sobre o assunto:

    http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2930-fixing-heap-fragmentation/


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quarta-feira, 23 de julho de 2014 18:58
  • Durval,

    Entendo o seu ponto de vista, mas o conceito de "heap fragmentation" existe, e foi isso que quis dizer.

    Segue outro post sobre o assunto:

    http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2930-fixing-heap-fragmentation/


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    Alex,

    Entendo que existe o termo "Heap fragmentation", mas como Deus (ops... desculpe) Paul disse: "Não tente organizar sua 'Heap Table' criando e dropando um índice, continue 'heap' " !!! Ou então crie definitivamente um índice cluster.

    Isso é que importa. =^D

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta thenriquelima terça-feira, 5 de agosto de 2014 14:18
    quarta-feira, 23 de julho de 2014 19:16
    Moderador
  • Sim, por isso no primeiro post eu comentei sobre deixar o indice.

    "crie o indice e use-o (não remova)"

    Acredito que esse post já ficou claro, obrigado pela discusão, é sempre saudavel ver pontos de vistas iguais ou diferentes sobre um assunto.

    []s


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quarta-feira, 23 de julho de 2014 19:20
  • Obrigado a todos pela ajuda...

    terça-feira, 5 de agosto de 2014 14:19