Обновить

Комментарии 28

Дефрагментация была полезна только для HDD c механическим перемещением головок над поверхностью диска.

Для размещённых на SSD дисках файлов данных, в подавляющем большинстве случаев дефрагментация не приведёт к ожидаемому повышению производительности дисковых операций, а только сократит срок службы SSD дисков и может привести к появлению неоптимальных планов запросов.

Хм, а вот немцы из oo-software считают иначе.

Более того, если обратите внимание, сама Microsoft является золотым партнером этой компании и её продукта(ов).

Скажите пожалуйста, что думаете по этому поводу?

НЛО прилетело и опубликовало эту надпись здесь
Хм, а вот немцы из oo-software считают иначе.

вы бы расшифровали что значит «считают иначе»

какая-то у вас сплошная теория... где с измерениями? Логическая дефрагментация никак не связана с физической, более того - это разные явления. Да и пассаж про SSD и размещение данных, по сравнению с жеским диском, выглядит странно - диски тоже все используют в RAID и контроллер массива сам решает что и как ему делать.

НЛО прилетело и опубликовало эту надпись здесь
Статья и так длинная получилась,

я бы не сказал


а что будет, если я ещё и графики сюда выложу со всеми возможными типами нагрузки и конфигурациями дисковой подсистемы.

ну так выложите, будет гораздо интереснее

НЛО прилетело и опубликовало эту надпись здесь

Лично мне, статью с цифрами тестов, но без лишней воды (которая есть сейчас), было бы интереснее прочитать. А так, зашел на интересный заголовок, а ничего в замен не получил.

Эту же информацию я получил несколько лет назад, из статьи Брента Озара. Он рекомендовал поменять трешхолды в дефолтных значениях скрипта Ola.

https://www.brentozar.com/archive/2014/12/tweaking-defaults-ola-hallengrens-maintenance-scripts/

НЛО прилетело и опубликовало эту надпись здесь
Сокращение потребления ресурсов сервера на дефрагментацию

у меня как-то ms sql ассоциируется с 1с )
в случае с 1с обычно вполне есть технологическое окно для перестройки индексов


Увеличится время жизни дисков SSD из-за сокращения числа циклов перезаписи ячеек хранения.

ну… сейчас посмотрел: p4510, аптайм 2.5 года, еженощные перестроения индексов в терабайтной базе.
по мнению накопителя израсходованный ресурс 7%. при этом накопитель совсем не рекордсмен по ресурсу, ЕМНИП 1 DWPD.

НЛО прилетело и опубликовало эту надпись здесь
У меня сейчас на базах 1С дефрагментация раз в месяц — хотя большие проценты каждый день фрагментируются.

у меня работает известный скрипт от ola, каждую ночь переиндексация таблиц с более, чем 5% изменений, раз в неделю — всех. ну и обновление статистики, разумеется.
одной из мотиваций сделать так было то, что полная переиндексация при высоком maxdop идёт очень быстро.


именно дефрагментации (INDEX_REORGANIZE) нет, согласен, что на ssd она не особо полезна.


Размер файлов данных может заметно прибавить в весе.

это же не только размер файлов сам по себе, это более «рыхлые» индексы, соответственно больше дискового io, меньше полезных данных помещается в кэше и т.п.


Дефрагментация портит статистику по колонкам (стоимость операций ввода-вывода), не входящим в ключ индекса. Без неё станет лучше статистика, а значит повысится качество планов запросов и сократиться время затронутых запросов.

про это можно подробнее, где почитать?

НЛО прилетело и опубликовало эту надпись здесь
Это замечание важно, поскольку фактически является отсылкой к СХД на основе SSD, у которых все операции ввода вывода, как мы покажем дальше, являются случайными.

а вы точно это показали? )
разница между случайным и последовательным доступом на ssd, конечно, не такая фатальная, как на hdd, но всё равно…


параметры fio для случайного/последовательного чтения блоками 8кб с очередью 1
fio --name=randread --rw=randread --bs=8k --runtime=10 --time_based=1 --filename=/dev/nvme0n1p1 --iodepth=1 --randrepeat=0 --direct=1
fio --name=read --rw=read --bs=8k --runtime=10 --time_based=1 --filename=/dev/nvme0n1p1 --iodepth=1 --randrepeat=0 --direct=1

   READ: bw=114MiB/s (120MB/s), 114MiB/s-114MiB/s (120MB/s-120MB/s), io=1140MiB (1196MB), run=10001-10001msec

   READ: bw=643MiB/s (674MB/s), 643MiB/s-643MiB/s (674MB/s-674MB/s), io=6430MiB (6743MB), run=10001-10001msec

разница в 5-6 раз

НЛО прилетело и опубликовало эту надпись здесь
Но я имел ввиду банальную вещ, что последовательное чтение с SSD диска будет собирать случайно разбросанные по ячейчас блоки (которые размером могут и не совпадать с размером страницы MSSQL)

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

НЛО прилетело и опубликовало эту надпись здесь

Также Вы упустили из вида упреждающее чтение (readahead), за счёт которого можно получить значительный прирост скорости на дефрагментированных индексах как на локальных ссд, так и на сетевых дисковых массивах особенно.

Рекомендую посмотреть Березнёва Александра. Там наглядно приводятся цифры и факты.

НЛО прилетело и опубликовало эту надпись здесь

Увы, упреждающее чтение одинаково влияет на фрагментированные и не фрагментированные индексы, уточните, что именно было упущено?

Упреждающее чтение позволяет считывать последовательные экстенты индексов с диска одним блоком до 512 Кб. Как об этом написано в документации. По факту, видимо, более длинными. Но это работает только в том случае, если индекс дефрагментирован.

Если оперативки достаточно, эффекта не будет почти никакого.

Вот, кстати, зря, что не досмотрели, за14 минутой начинается самая мякотка - влияние скорости выполнения запросов по фрагментированым и дефрагментированным индексам, которые расположены в буферном кеше. В том числе и с уменьшением fillfactor дефрагментированного индекса, для получения сравнимых объёмов.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
К видео же особых претензий нет, кроме того, что как-то незаметно сравнивать стали фрагментированную таблицу и таблицу с филфактором не по умолчанию

так это логично как раз же, нет?
я до просмотра этого видео как раз считал, что на ssd основным фактором снижения производительности в случае фрагментации будет «распухание» индексов (фактически мы увеличиваем весь дисковый io, плюс уменьшаем буферный пул, что по сути тоже ведёт к увеличению дискового io, плюс несколько увеличиваем нагрузку на процессор — все эти неиспользуемые области в страницах индекса будут попадать в процессорный кэш, вымывая оттуда полезные данные).
честно говоря, мне не очень понятно, откуда взялась эта разница в видео. ИМХО тема требует дальнейшего изучения.

НЛО прилетело и опубликовало эту надпись здесь

увидел ваш комментарий на sql.ru:


И что делать, если изменний и дефрагментаций получается так много, что SSD диски энтерпрайз-класса заканчиваются за год-два?

если я правильно понимаю доку, то переиндексация порождает запись в размере двухкратного размера индекса (причём половина записи может быть перенаправлена в tempdb).
с учётом того, что, всё-таки, перестраивать приходится далеко не все индексы, не очень понятно, как у вас получается «стачивать» ssd за год. берёте диски с dwpd=0.3?

НЛО прилетело и опубликовало эту надпись здесь

Обслуживание подразумевает две возможные операции: реорганизация индексов на уровне страниц для устранения внутренней фрагментации, или пересоздание индекса для устранения и внутренней и внешней фрагментации.

Почему только внутреннюю? Ведь реорганизация устраняет и внешнюю фрагментацию.

P.S. есть ли где-то описание имплементации алгоритма реорганизации?

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации