Como determinar a tabela intensiva de leitura / gravação das estatísticas de DMV / DMF

3

Esta é uma pergunta de acompanhamento na questão do Stack Overflow

Como descobrir a tabela do SQL Server escrever estatísticas?

O objetivo é o mesmo da pergunta anterior

The goal here is to find out appropriate fill factor for indexes

De acordo com a resposta de Mitch Wheat, ele sugeriu que

... ordinary tables use the default 90% fill factor, high insert tables somewhere between 70 - 85% (depending on row size). Read only tables can utilise a fill factor of 100%

Mesmo depois de descobrir as estatísticas do índice, estou com problemas para entender o resultado.

Como você determina se uma tabela é alta

  • insira
  • ler
  • inserir / ler mesa?

Você precisa levar em consideração todas as estatísticas como leaf_insert_count , leaf_delete_count , user_seek/scan/lookup_count etc?
ou eu precisaria ver apenas alguns domínios?

Eu adoraria ver quais outras formas existem para determinar como determinar o fator de preenchimento para um determinado índice.

Consulta usada para obter estatísticas de índice,

select  db_name(US.database_id)
    , object_name(US.object_id)
    , I.name as IndexName
    , OS.leaf_allocation_count
    , OS.nonleaf_allocation_count
    , OS.leaf_page_merge_count
    , OS.leaf_insert_count
    , OS.leaf_delete_count
    , OS.leaf_update_count
    , *
from    sys.dm_db_index_usage_stats US
    join sys.indexes I 
        on I.object_id = US.object_id 
        and I.index_id = US.index_id
    join sys.dm_db_index_operational_stats(db_id(), null, null, null) OS
        on OS.object_id = I.object_id and OS.index_id = I.Index_id
where   I.type <> 0  -- not heap
    and object_name(US.object_id) not like 'sys%'
order by    OS.leaf_allocation_count desc, 
        OS.nonleaf_allocation_count desc, 
        OS.leaf_page_merge_count desc,
        US.User_updates desc, 
        US.User_Seeks desc, 
        US.User_Scans desc, 
        US.User_Lookups desc

E o resultado da amostra.

    
por Sung Kim 18.10.2009 / 20:23

2 respostas

3

Eu fiz uma pergunta semelhante, mas especificamente para índices clusterizados compostos de campos de identidade. Teve boas respostas:

Valor correto para fator de preenchimento para índices clusterizados com chaves de identidade substitutas

Eu decidi definir globalmente o fator de preenchimento em todas as tabelas / índices para 80% e aqueles com índices de cluster de identidade de 90%

Eu removo os índices de reconstrução diária da fragmentação com fragmentação > = 30% e os índices de reorganização > 5% e < 30%.

Eu gravo essas ações em uma tabela que reviso periodicamente e uso como um guia para aumentar / diminuir os fatores de preenchimento.

    
por 18.10.2009 / 22:01
1

O fator de preenchimento é algo com o qual você deve jogar até obter a configuração correta.

Não importa quão alto esteja a mesa. 80% nem sempre é um bom número. Se os valores estiverem sempre em ordem, use 100%. Não há sentido em deixar espaço livre na página, se você não precisar.

Se você tiver um índice quando novos valores estiverem em todo o lugar, precisará de um fator de preenchimento mais alto. Se você estiver indexando em um GUID (e não criando os GUIDs em ordem), um fator de preenchimento de 50% poderá ser necessário (dependendo da taxa de inserção da tabela, frequência de reconstrução do índice, etc.).

    
por 19.10.2009 / 06:28