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


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


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

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

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

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

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

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

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

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

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

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

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


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


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

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

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



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

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

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

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

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

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

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


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

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

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


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