Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1? / 24 сообщений из 24, страница 1 из 1
21.03.2021, 16:25
    #40055626
abrashka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
День добрый!
Есть не большая таблица:
Код: sql
1.
Create table MyTbl(id int primary key, n varchar(100))


порядка 100 строк, данные практически не удаляются и не добавляются, но постоянно обновляются:
Код: sql
1.
Update MyTbl set n=... where id=... 


Как можно максимально повысить производительность таких обновлений?
Если, гипотетически, на каждой странице будет по одной строке- это приведет к улучшению производительности во время параллельных апдейтов?
Спасибо!
...
Рейтинг: 0 / 0
21.03.2021, 17:07
    #40055635
abrashka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
или отмена блокировок страниц ALLOW_PAGE_LOCKS=OFF
плюс добавления подсказки ROWLOCK должно помочь?

Код: sql
1.
Update MyTbl WITH (ROWLOCK) set n=... where id=... 
...
Рейтинг: 0 / 0
21.03.2021, 17:09
    #40055637
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
1. Fillfactor никак не учитывается при обновлениях.
2. 100 строк (если даже каждая имеет максимальный размер в 8000 байт) - это ниочем.
3. Ничего тебе тут не "улучшить". Разве только "уменьшить" число обновлений.
...
Рейтинг: 0 / 0
21.03.2021, 18:49
    #40055645
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
abrashka,

В анамнезе-то что? Какие ожидания, какие блокировки, сколько десятков сотен тысяч раз в секунду происходит обновление, сколько коннектов одновременно пытается это делать, и т.д.

Запись данных на диск производится постранично, так что, теоретически, если каждая запись будет на своей странице, то это может облегчить параллельные апдейты соседних строк. Что-то наподобие 150 dialogs rule для сервис брокера. Но у вас там либо транзакции длинные, либо поток какой-то ну совсем жесткий, чтобы разница была заметна.

Если вот совсем наугад, без каких-либо вводных и диагностики, то я бы смотрел в сторону in-memory tables. Какого именно типа ин-мемори - зависит от того, насколько вам дороги эти данные (подозреваю, что не очень, т.к. вы их постоянно перезаписываете).
...
Рейтинг: 0 / 0
21.03.2021, 18:51
    #40055646
abrashka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
aleks222,
я видимо не совсем разобрался в теории... если перестроить индекс с филфактор 1, то грубо говоря каждая строка будет находится на персональной странице, нет?
если так, то параллельные обновления нескольких строк не будут друг другу "мешать", то есть если будет блокировка страницы, то это никак не повлияет на обновление другой строки, ведь она на другой странице, это так или я путаю?
...
Рейтинг: 0 / 0
21.03.2021, 19:53
    #40055660
abrashka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Ennor Tiegael,

Спасибо!
in-memory tables не подходит, у нас Standard Edition
...
Рейтинг: 0 / 0
21.03.2021, 21:55
    #40055679
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
abrashka,

Просто добавьте в таблицу столбец filler char(5000) null. Тогда на страницу будет помещаться только одна строка.
...
Рейтинг: 0 / 0
22.03.2021, 02:10
    #40055708
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
abrashka
Ennor Tiegael,

Спасибо!
in-memory tables не подходит, у нас Standard Edition
А при чем здесь это? In-memory OLTP доступно даже в редакции Express, даже на 2016.
...
Рейтинг: 0 / 0
22.03.2021, 12:18
    #40055807
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
abrashka,

WITH (ROWLOCK) должно помочь.
...
Рейтинг: 0 / 0
22.03.2021, 13:52
    #40055856
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов
WITH (ROWLOCK) должно помочь.
Не поможет.
Все равно будет конкуренция за PAGELATCH_EX
...
Рейтинг: 0 / 0
22.03.2021, 16:21
    #40055920
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
invm,

ладно, а если (ROWLOCK, XLOCK)?
Впрочем, тоже не поможет, UPDATE может привести к расщеплению страницы, надо гарантировать целостность.
...
Рейтинг: 0 / 0
22.03.2021, 16:35
    #40055934
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов
invm,

ладно, а если (ROWLOCK, XLOCK)?
Впрочем, тоже не поможет, UPDATE может привести к расщеплению страницы, надо гарантировать целостность.


Тут вообще разговор про ожидания на LATCH-ах.
К обычным блокировкам они имеют отдаленное отношение.
...
Рейтинг: 0 / 0
22.03.2021, 17:14
    #40055958
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Ennor Tiegael
abrashka,
В анамнезе-то что? Какие ожидания, какие блокировки, сколько десятков сотен тысяч раз в секунду происходит обновление, сколько коннектов одновременно пытается это делать, и т.д.


Неправильно вопросы ставите.
Правильный вопрос: зачем вам эти "частые обновления"?
Ведь если нечто обновляется каждую наносекунду - это абсолютно бесполезно.
Можно пропускать все мимо.
...
Рейтинг: 0 / 0
22.03.2021, 17:57
    #40055982
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
msLex,

LATCH блокировки для чего служат? Разве не для того, чтобы зафиксировать изменения в структуре страницы? Один из источников изменения - split, о котором я писал.
...
Рейтинг: 0 / 0
22.03.2021, 18:20
    #40055997
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов
msLex,

LATCH блокировки для чего служат? Разве не для того, чтобы зафиксировать изменения в структуре страницы? Один из источников изменения - split, о котором я писал.



Во-первых, LATCH-и накладываются при любом обращении к любым страницам (и не только страницам).
Во-вторых, какое отношение к LATCH-ам имеют ROWLOCK, XLOCK из вашего поста?
В-третьих, при split накладываются IX блокировки на PAGE, они и без LATCH-ей не дадут менять структуру таблицы.
...
Рейтинг: 0 / 0
22.03.2021, 18:29
    #40055999
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
msLex,

в таком случае LATCH вообще несущественны по сравнению другими причинами задержек. И зачем было о них упоминать, если это постоянные издержки.
...
Рейтинг: 0 / 0
22.03.2021, 18:41
    #40056006
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов,

PAGELATCH_EX - эксклюзивная физическая блокировка страницы, а не логическая Как X, S и пр.
Любая модификация данных на странице будет накладывать этот latch. Соответственно, все конкурирующие процессы, пишущие на эту страницу выстроятся в очередь.
...
Рейтинг: 0 / 0
22.03.2021, 18:42
    #40056008
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов
msLex,

в таком случае LATCH вообще несущественны по сравнению другими причинами задержек. И зачем было о них упоминать, если это постоянные издержки.
Ожидания на латчах становятся очень даже существенными, если в параллели долбиться в одни и те же страницы начиная, скажем, от 10к раз в секунду.
...
Рейтинг: 0 / 0
23.03.2021, 14:05
    #40056234
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Хорошо, какие способы этого избежать? Выделить отдельную секцию для каждого номера, гарантировать заполнение страницы отдельным номером?
...
Рейтинг: 0 / 0
23.03.2021, 14:08
    #40056235
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов,

использовать In-Memory OLTP, оно как раз latch-free :)
...
Рейтинг: 0 / 0
23.03.2021, 14:08
    #40056237
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Владислав Колосов
Хорошо, какие способы этого избежать? Выделить отдельную секцию для каждого номера, гарантировать заполнение страницы отдельным номером?
https://docs.microsoft.com/ru-ru/sql/relational-databases/diagnose-resolve-latch-contention?view=sql-server-ver15

Ну и все остальное, что нагуглится по latch contention
...
Рейтинг: 0 / 0
23.03.2021, 14:30
    #40056250
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
felix_ff
Владислав Колосов,

использовать In-Memory OLTP, оно как раз latch-free :)


Это уж совсем очевидно, но не всегда применимо :)
...
Рейтинг: 0 / 0
23.03.2021, 15:54
    #40056297
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
Гавриленко Сергей Алексеевич,

вариант с секционированием рассматривается в статье по ссылке, надо заметить.
...
Рейтинг: 0 / 0
24.03.2021, 14:10
    #40056647
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
abrashka,

Залейте с fillfactor 100 и успокойтесь. Если у вас таблица не используется в огромном числе параллельных запросов, то и на INMEMORY смотреть нет смысла.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1? / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]