Назад | Перейти на главную страницу

Как определить таблицу с интенсивным чтением / записью из статистики DMV / DMF

Это дополнительный вопрос к вопросу о переполнении стека

Как узнать статистику чтения / записи таблицы SQL Server?

Цель такая же, как и в предыдущем вопросе

Цель здесь - узнать соответствующий коэффициент заполнения для индексов

Согласно ответу Митча Уита, он предположил, что

... обычные таблицы используют коэффициент заполнения по умолчанию 90%, таблицы с высокой вставкой где-то между 70-85% (в зависимости от размера строки). Таблицы только для чтения могут использовать коэффициент заполнения 100%

Даже после того, как я узнал статистику индекса, у меня возникли проблемы с осмыслением результата.

Как вы определяете является ли стол высокий

Вы должны взять все статистика вроде leaf_insert_count, leaf_delete_count, user_seek/scan/lookup_count и т.д. во внимание?
или мне нужно будет посмотреть только несколько доменов?

Я бы хотел увидеть что другие способы нужно определить, как определить коэффициент заполнения для конкретного индекса.

Запрос, используемый для получения статистики индекса,

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

И примерный результат.

Я задал аналогичный вопрос, но специально для кластерных индексов, состоящих из полей идентификации. Были хорошие ответы:

Правильное значение коэффициента заполнения для кластеризованных индексов с суррогатными ключами идентификации

Я решил глобально установить коэффициент заполнения для всех таблиц / индексов на 80%, а для таблиц с идентичными кластеризованными индексами - 90%.

Я ежедневно удаляю фрагментацию - восстанавливаю индексы с фрагментацией> = 30% и реорганизую индексы> 5% и <30%.

Я записываю эти действия в таблицу, которую периодически просматриваю и использую в качестве руководства для повышения / понижения коэффициентов заполнения.

Фактор заполнения - это то, с чем вам нужно поиграть, пока вы не получите правильную настройку.

Неважно, насколько высока правая таблица. 80% не всегда может быть хорошим числом. Если значения всегда будут в порядке, используйте 100%. Нет смысла оставлять свободное место на странице, если оно вам не нужно.

Если у вас есть индекс, когда новые значения будут повсюду, вам понадобится более высокий коэффициент заполнения. Если вы индексируете GUID (и не создаете GUID по порядку), тогда может потребоваться коэффициент заполнения 50% (в зависимости от скорости вставки таблицы, частоты перестроения индекса и т. Д.).