|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
День добрый! Есть не большая таблица: Код: sql 1.
порядка 100 строк, данные практически не удаляются и не добавляются, но постоянно обновляются: Код: sql 1.
Как можно максимально повысить производительность таких обновлений? Если, гипотетически, на каждой странице будет по одной строке- это приведет к улучшению производительности во время параллельных апдейтов? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 16:25 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
или отмена блокировок страниц ALLOW_PAGE_LOCKS=OFF плюс добавления подсказки ROWLOCK должно помочь? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 17:07 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
1. Fillfactor никак не учитывается при обновлениях. 2. 100 строк (если даже каждая имеет максимальный размер в 8000 байт) - это ниочем. 3. Ничего тебе тут не "улучшить". Разве только "уменьшить" число обновлений. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 17:09 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
abrashka, В анамнезе-то что? Какие ожидания, какие блокировки, сколько десятков сотен тысяч раз в секунду происходит обновление, сколько коннектов одновременно пытается это делать, и т.д. Запись данных на диск производится постранично, так что, теоретически, если каждая запись будет на своей странице, то это может облегчить параллельные апдейты соседних строк. Что-то наподобие 150 dialogs rule для сервис брокера. Но у вас там либо транзакции длинные, либо поток какой-то ну совсем жесткий, чтобы разница была заметна. Если вот совсем наугад, без каких-либо вводных и диагностики, то я бы смотрел в сторону in-memory tables. Какого именно типа ин-мемори - зависит от того, насколько вам дороги эти данные (подозреваю, что не очень, т.к. вы их постоянно перезаписываете). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 18:49 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
aleks222, я видимо не совсем разобрался в теории... если перестроить индекс с филфактор 1, то грубо говоря каждая строка будет находится на персональной странице, нет? если так, то параллельные обновления нескольких строк не будут друг другу "мешать", то есть если будет блокировка страницы, то это никак не повлияет на обновление другой строки, ведь она на другой странице, это так или я путаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 18:51 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Ennor Tiegael, Спасибо! in-memory tables не подходит, у нас Standard Edition ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 19:53 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
abrashka, Просто добавьте в таблицу столбец filler char(5000) null. Тогда на страницу будет помещаться только одна строка. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:55 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
abrashka Ennor Tiegael, Спасибо! in-memory tables не подходит, у нас Standard Edition ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 02:10 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
abrashka, WITH (ROWLOCK) должно помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:18 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов WITH (ROWLOCK) должно помочь. Все равно будет конкуренция за PAGELATCH_EX ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:52 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
invm, ладно, а если (ROWLOCK, XLOCK)? Впрочем, тоже не поможет, UPDATE может привести к расщеплению страницы, надо гарантировать целостность. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:21 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов invm, ладно, а если (ROWLOCK, XLOCK)? Впрочем, тоже не поможет, UPDATE может привести к расщеплению страницы, надо гарантировать целостность. Тут вообще разговор про ожидания на LATCH-ах. К обычным блокировкам они имеют отдаленное отношение. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:35 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Ennor Tiegael abrashka, В анамнезе-то что? Какие ожидания, какие блокировки, сколько десятков сотен тысяч раз в секунду происходит обновление, сколько коннектов одновременно пытается это делать, и т.д. Неправильно вопросы ставите. Правильный вопрос: зачем вам эти "частые обновления"? Ведь если нечто обновляется каждую наносекунду - это абсолютно бесполезно. Можно пропускать все мимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:14 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
msLex, LATCH блокировки для чего служат? Разве не для того, чтобы зафиксировать изменения в структуре страницы? Один из источников изменения - split, о котором я писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 17:57 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов msLex, LATCH блокировки для чего служат? Разве не для того, чтобы зафиксировать изменения в структуре страницы? Один из источников изменения - split, о котором я писал. Во-первых, LATCH-и накладываются при любом обращении к любым страницам (и не только страницам). Во-вторых, какое отношение к LATCH-ам имеют ROWLOCK, XLOCK из вашего поста? В-третьих, при split накладываются IX блокировки на PAGE, они и без LATCH-ей не дадут менять структуру таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:20 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
msLex, в таком случае LATCH вообще несущественны по сравнению другими причинами задержек. И зачем было о них упоминать, если это постоянные издержки. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:29 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов, PAGELATCH_EX - эксклюзивная физическая блокировка страницы, а не логическая Как X, S и пр. Любая модификация данных на странице будет накладывать этот latch. Соответственно, все конкурирующие процессы, пишущие на эту страницу выстроятся в очередь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:41 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов msLex, в таком случае LATCH вообще несущественны по сравнению другими причинами задержек. И зачем было о них упоминать, если это постоянные издержки. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 18:42 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Хорошо, какие способы этого избежать? Выделить отдельную секцию для каждого номера, гарантировать заполнение страницы отдельным номером? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:05 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов, использовать In-Memory OLTP, оно как раз latch-free :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:08 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Владислав Колосов Хорошо, какие способы этого избежать? Выделить отдельную секцию для каждого номера, гарантировать заполнение страницы отдельным номером? Ну и все остальное, что нагуглится по latch contention ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:08 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
felix_ff Владислав Колосов, использовать In-Memory OLTP, оно как раз latch-free :) Это уж совсем очевидно, но не всегда применимо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:30 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, вариант с секционированием рассматривается в статье по ссылке, надо заметить. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 15:54 |
|
Очень частые изменения маленькой таблицы, стоит или использовать fillfactor=1?
|
|||
---|---|---|---|
#18+
abrashka, Залейте с fillfactor 100 и успокойтесь. Если у вас таблица не используется в огромном числе параллельных запросов, то и на INMEMORY смотреть нет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2021, 14:10 |
|
|
start [/forum/topic.php?fid=46&fpage=30&tid=1684914]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 136ms |
0 / 0 |