|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
0wl 1. Дерево индекса сбалансировано сразу после перестроения (ну или создания). А потом мы начинаем в это дерево вставлять данные и оказывается, что в какие-то промежутки вставляем чаще, чем в другие. Эти популярные промежутки начинают чаще делиться, создавать дополнительные ветки под собой - и баланс дерева нарушается. Именно это я имел в виду под "разбалансированным" деревом - и в этом случае мы получаем, что пусть к "листьям" по одной ветке оказывается длиннее, чем по другой, куда данные добавляют реже. Еще раз, в SQL Server деревья индексов всегда сбалансированы, до любого листового элемента дерева индекса одинаковое количество уровней. 0wl 2. read-ahead в SSD, по идее, никак не пострадает. Листовая страница знает, номера страниц до и после нее. В случае HDD мы бы долго ждали, пока он доберётся до следующей страницы, а с SSD у нас никакой разницы нет Ридахед упреждающе читает последующие страницы файла базы данных. Если в них лежат нужные данные, то они заранее окажутся в памяти. При логической фрагментации эффективность ридахед падает. 0wl 3. Про последний пример вообще не понял. Если на странице недостаточно места для вставки данных, она делится на 2 новые страницы, данные между ними делятся пополам. Единственный вариант, где я могу представить себе "1 строку на 1 странице" - это "хвостовая" страница, которую добавили в самом конце индекса. Ну и это, по идее, не надолго - со временем ей добавят соседей Сделайте индекс по дате, навставляйте в него данных на несколько страниц, а потом всем кроме 1-й записи из самой первой станицы обновите дату на максимальную из тех, что есть в таблице. На первой странице останется ровно 1 запись. Этот эффект хорошо наблюдается в индексах по last_something_date ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 13:01 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
0wlДерево индекса сбалансировано сразу после перестроения (ну или создания). А потом мы начинаем в это дерево вставлять данные и оказывается, что в какие-то промежутки вставляем чаще, чем в другие. Эти популярные промежутки начинают чаще делиться, создавать дополнительные ветки под собой - и баланс дерева нарушается. Именно это я имел в виду под "разбалансированным" деревом - и в этом случае мы получаем, что пусть к "листьям" по одной ветке оказывается длиннее, чем по другой, куда данные добавляют реже.Ровно наоборот. Split страницы создает 1 дполнительную страницу на том же уровне. Далее модифицируется страница предыдущего уровня, чтобы добавить ссылку на новую страницу. Если в ней нет места, она так же сплитится. И так далее. Если в итоге надо сплитить корневую страницу, то она так же разделяется на две, и добавлятся новая корневая страница. Поэтому дерево во-первых, растет не "вниз", а "вверх", а во-вторых, всегда остается сбалансированным, т.е. глубина дерева для любого ключа всегда одинакова. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 14:05 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
Александр и какой будет совет (рекомендации лучших sqlводов) : 1 Отключить джоб по ребилду индексов совсем. Делать перестройку примерно как шринк - когда необходимо 2 задрать avg_fragmentation_in_percent (которая считается для внешней фрагментации) с 5%-30% на 80-80 3 править джоб для использования avg_page_space_used_in_percent ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 18:08 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
0wl, авторприведение индекса к сбалансированному состоянию нет, не то, при перестроении индекса плотность его заполнения приводится к дефолтному значению. Т.е. если для вставки выгодно заранее выполнить расщепление страниц с заданной плотностью, то без перестроения не обойтись. Само дерево индексов всегда сбалансировано после выполнения операции, об этом заботится математика сервера. Что касается перестроения в целях дефрагментации (очевидно, при настройке 100% заполнении страниц), то Александр утверждает, что это бессмысленная операция и даже вредная при условии использования SSD носителя. За исключением необходимости перестроения с целью скорейшего удаления фантомных записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 18:39 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
SERG1257, 1.совсем 2 не следить 3. Удалить джоб Мир изменился. Реагируете только на реальные проблемы и автоматизируйте это, если нужно. А если припрёт, вначале подумайте об REORGANISE ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 22:55 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
Александр Гладченко SERG1257, 1.совсем 2 не следить 3. Удалить джоб Мир изменился. Реагируете только на реальные проблемы и автоматизируйте это, если нужно. А если припрёт, вначале подумайте об REORGANISE Если, грубо, очередь к диску не поднимается больше 1, то ответы на вопросы SERG1257 очевидны, они именно такие - "забить, ибо затраты будут выше профита". Независимо от используемой технологии долговременной памяти. На мой взгляд, пока все твои исследования систем хранения всё так же актуальны, только с некоторыми количественными изменениями, в том числе с изменёнными выводами в части "когда надо начинать беспокоиться". А сейчас ты даёшь оценочный анализ ("Т.е. последовательная запись превращается в случайную"), разве можно его сравнивать измерениями в повторяемых тестах? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 00:38 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
alexeyvg, ...не только запись превращается в случайную, но и чтение. Кроме того, ситуация сильно зависит от реализации алгоритма рассеивания записи, многоие не дорогие диски в этом халтурят. Также, большое влияние могут оказывать разные кеши на пути ввода-вывода. За счёт того, что производительность операций у SSD на порядки выше, не только мы, но и разработчики дисков и контроллеров пренебрегают потерями на фргментации. Давно уже никого не смущает, что оерационка не дефрагментирует диск. Раньше это рекомендовали повсеместно. По аналогии и внешняя фрагментация. Не будет в реальности скана последовательно расположенных на диске страниц. Алгоритмы размещения страниц в буферном пуле, их там удерживания и сброса на диск не такие тупые, как может показаться после продчтения высказываний апонентов. Каждому процессу выдаётся конечный и отнюдь не большой объём ресурсов. Если их нехватает, используется промежуточная материализация. В сухом остатке влияние незаполненных страниц и лишних страниц подхваченных упреждающим чтением будет сильно невелированно. Основные потери времени здесь и раньше и теперь были именно на физических операциях ввода-вывода, а они теперь на пару порядков быстрее. Кстати, нормальная очередь к диску уже лет десять 250 ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 13:58 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
Александр, если на виртуалке очередь кратковременно увеличивается до 5-10 тыс, это нормальное явление? При этом статистика по IO особенно не страдает. Или что-то где-то маскируется? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:29 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
Владислав Колосов, Простите, я не работаю с виртуалками. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:56 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
Александр Гладченко ...не только запись превращается в случайную, но и чтение. Кроме того, ситуация сильно зависит от реализации алгоритма рассеивания записи, многоие не дорогие диски в этом халтурят. ... По аналогии и внешняя фрагментация. Не будет в реальности скана последовательно расположенных на диске страниц. Не будет ли это влиять на производительность? Вот, я смотрю на любой тест SSD, и вижу, что при чтении со случайным доступом небольшими блоками поток падает в 3-10 раз. Почему? Не из за головок, понятно, а из за того, что есть латентность операции, затраты времени на обращение к драйверу, латентность физического интерфейса и т.д. Потому что код, который читает эту жалкую страницу, жалкие 8 кб, должен попасть в кэш процессора, вытеснив что нибудь, и только потом начать выполняться. А перед этим нужно переключить контекст, перезаписав TLB, переопределив области адресного пространства. Вот отсюда и получаются эти 3-10 раз. Упреждающее чтение, и филфактор тоже что то значат, об этом упоминали. Вот это всё мне говорит, что хоть сейчас беспокоиться о каком то уходе за индексами нужно намного позже, чем раньше, всё таки вообще про это не думать (и этого не понимать) нельзя. Александр Гладченко Давно уже никого не смущает, что оерационка не дефрагментирует диск. Раньше это рекомендовали повсеместно Ну и второй фактор - ненжужность, ибо "производительности достаточно". Не потому, что дефрагментация не полезная вещь, а потому, что она невыгодна, не имеет смысл заморачиваться. Как ты написал для БД: Александр Гладченко За счёт того, что производительность операций у SSD на порядки выше, не только мы, но и разработчики дисков и контроллеров пренебрегают потерями на фргментации. Не "бесполезна", не "вредна" большими красными буквами, а именно "производительность на порядки выше", то есть труд админов стоит дороже пары лишних SSD. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 23:19 |
|
AlwaysOn, нода для чтения и ребилд индекса
|
|||
---|---|---|---|
#18+
alexeyvg, Влияния на производительность не замечал, мы уже давно от ребилда отказались и ничего, всё и так прекрасно работает. Обновление статистики делайте, где надо, этого в большинстве случаев достаточно. Если много удаляете и велико число расщиплений, вполне можно использовать REORGANISE, он лечит внутреннюю фрагментацию. Зато уменьшение числа операций налицо, как раз засчёт отказа от дефрагментации, которая бъёт по всем чувствительым местам SQL Server. Но самая главная боль дефрагментации, это то, что она убивает SSD. И не так что бы они чуть меньше прослужили. Вы рассчитываете, что новый массив SSD у вас прослужит положенные 5 лет. А на практике, только из-за дефрагментации, срок сократиться до 2-х, а я своими глазами видел прецеденты, когда и года не служили. Причём, отказ дисков будет не такой "плавый", как у HDD, массив сломается весь сразу и менять его придётся целиком. Что бы этого избежать, вы сделаете AlwaysON кластер, а он не будет работать, потому что из-за очереди на REDO (а это самое узкое место этой технологии) реплика у вас не будет синхронизироваться, будет всё больше отставать. И виной этому будет (угадайте какая операция)? Я не говорю сейчас о маленьких приложениях, речь о системах с нагрузкой. Понятно, что мизерная нагрузка не будет пораждать проблем. alexeyvgВот, я смотрю на любой тест SSD, и вижу, что при чтении со случайным доступом небольшими блоками поток падает в 3-10 раз. Почему? Не из за головок, понятно, а из за того, что есть латентность операции, затраты времени на обращение к драйверу, латентность физического интерфейса и т.д. Потому что код, который читает эту жалкую страницу, жалкие 8 кб, должен попасть в кэш процессора, вытеснив что нибудь, и только потом начать выполняться. А перед этим нужно переключить контекст, перезаписав TLB, переопределив области адресного пространства. Вот отсюда и получаются эти 3-10 раз. Маленький блок был проблемой всегда и не только при чтении. Мало того, операции REDO очень чувствительны к величине страйпа, для них оптимално 64Kb. На SSD рамер ячейки существенно большье. Понятно что это не будет эффективно. Но это влияние не зависит от фрагментации. Задержки, кстати, будут не плохими, они как раз растут при увеличении размера блока. Причём, эти самые 3-10 раз будут в разы быстрее, чем то же самое на дефрагментированных жёстких дисках. alexeyvgЭто не из за SSD, это из за совершенствования операционок. Винды с NTFS эффективно хранят данные, и дефрагментация не так страшна, если иметь на диске некоторый свободный объём. Ну и второй фактор - ненжужность, ибо "производительности достаточно". Не потому, что дефрагментация не полезная вещь, а потому, что она невыгодна, не имеет смысл заморачиваться. Операционка тут не при чём. Это проблема NTFS, а он не изменился. Дефрагменацию не делают по уверениям Майкрософт именно потому, что она убивает диск. Есть тонны частных утилит, которые не только дефрагментацию отключают, но и ещё много ненужных телодвижений операционки с файлами, типа прописывание коротких имён, изменение атрибут архивности, простановка последнего времени доступа и т.п. Это всё реально продлевает жизнь дискам. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:23 |
|
|
start [/forum/topic.php?fid=46&startmsg=40009808&tid=1685513]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 144ms |
0 / 0 |