powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Aggressive Under-Indexing
51 сообщений из 51, показаны все 3 страниц
Aggressive Under-Indexing
    #39744658
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть очень маленькая таблица с большим количеством апдейтов и на ней возникают постоянные блокировки. Что потенциально можно сделать в таком случае, подскажите, пожалуйста?

spBlitz про нее:
Lock Waitsdbo.SEQUENCES.PK_SEQUENCES (1): Row lock waits: 569,172; total duration: 13,942 minutes; avg duration: 1 seconds; Lock escalation attempts: 2; Actual Escalations: 0. NC indexes on table: 0
spBlitz про индекс на ней:
Usage StatsReads: 46,954,297 (46,954,289 seek 8 scan) Writes:15,726,100
Op Stats46,954,289 singleton lookups; 26 scans/seeks; 0 deletes; 15,725,898 updates;
Size171 rows; 0.1MB

SQL для создания таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE [dbo].[SEQUENCES](
	[NOM_SEQUENCE] [nvarchar](30) NOT NULL,
	[VALEUR] [decimal](18, 0) NULL,
 CONSTRAINT [PK_SEQUENCES] PRIMARY KEY CLUSTERED 
(
	[NOM_SEQUENCE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744661
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssedov,

Добавлю, при разборе блокировок видно что удерживается индекс PK_SEQUENCES в режиме X. Работа идет по сути только с 2мя записями в этой таблице, во всяком случае в блокировках фигурируют только они. Эти записи что-то типа счетчика, каждый коннект к БД его увеличивает, дисконнект уменьшает. Коннектов до 1000 одновременно работающих.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744671
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovЧто потенциально можно сделать в таком случаеВ случае конфликта писатель-писатель - ничего.
При конфликте читатель-писатель - грязное чтение, RCSI, snapshot isolation.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744694
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovЧто потенциально можно сделать в таком случаеДобавлю к ответу invm, старайтесь блокировать на максимально короткое время, если это возможно.
invmПри конфликте читатель-писатель - грязное чтение, RCSI, snapshot isolation.Гразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744698
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgГразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.Зависит от предназначения читаемого. А оно нам неведомо.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744701
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmalexeyvgГразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.Зависит от предназначения читаемого. А оно нам неведомо.Вангую, что это самодельный идентити.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744704
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgВангую, что это самодельный идентити.Зависящий от числа коннектов?
Очень странный иднентити :)
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744719
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovЕсть очень маленькая таблица с большим количеством апдейтов и на ней возникают постоянные блокировки. Что потенциально можно сделать в таком случае, подскажите, пожалуйста?


1. Критическая секция и sp_getapplock.
2. Самый ленивый вариант: update with(tablockx).
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744756
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помещение таблицы в память в таком случае могло бы помочь? Хотя ФС на сервере внешняя СХД и сама по себе очень быстрая.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744758
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovПомещение таблицы в память в таком случае могло бы помочь? Хотя ФС на сервере внешняя СХД и сама по себе очень быстрая.Мог бы помочь анализ архитектуры вашего приложения.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744761
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Читал про sp_getapplock, но так и не понял чем она поможет. Как понимаю это тоже блокировка на запись, но наложенная приложением. Остальные коннекты так же будут висеть и ждать её? Верно понимаю?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744773
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Как это правильно сделать? Есть может какая-то информация на эту тему? Или, если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744777
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovГавриленко Сергей Алексеевич,

Как это правильно сделать? Есть может какая-то информация на эту тему? Или, если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?Давайте начнем с простого вопроса -- какие у вас проблемы с перфомансом? Или вы просто скрипт запустили и испугались?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744782
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Проблемы ежедневно практически в одно и тоже время. Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу.
В итоге решили понять в чем причина, так как какой то связи пока проследить не получается. Запустил на день трейс на эскалации и блокированные процессы. На двух таблицах были эскалации, но блокировки возникали на той что привел в первом посте. Поэтому эскалации оставил на потом, считая что дело не в них. Пока решил попробовать разобраться с блокировками.
С бд работают около 10 серверов веб приложения. Через веб подключаются пользователи.
Какая-то ещё нужна информация?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744785
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgssedovЧто потенциально можно сделать в таком случаеДобавлю к ответу invm, старайтесь блокировать на максимально короткое время, если это возможно.
invmПри конфликте читатель-писатель - грязное чтение, RCSI, snapshot isolation.Гразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.

Если запросы работают с малым числом строк, то может быть, имеет смысл использовать подсказку ROWLOCK?

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744793
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovесли ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?

Примерно вот так

ssedov ежедневно практически в одно и тоже время ( указать время и конкретные дни ). Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч.

у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу

Разработчик знает лучше свою архитектуру и быстрее может сказать в чем косяк.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744798
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovКоличество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы.Вот когда такое случится, смотрите в sys.dm_os_waiting_tasks кто кого ждет.
Или sp_who2.
Или скачайте себе sp_whoisactive и смотрите ей.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744818
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovssedov,
каждый коннект к БД его увеличивает, дисконнект уменьшает. Коннектов до 1000 одновременно работающих.

А каким образом отлавливается коннект/дисконнект? Триггер on logon/logoff? И если триггер - update тоже выполняется этим же триггером?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744842
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flexgen,

Если верно все понимаю, то вся работа с БД происходит через АПИ. Оно при входе/выходе дёргает хранимку, которая обращается к указанной таблице. Далее в этой таблице есть счётчик связанный с заявками, он тоже дёргается каждый раз когда с заявкой выполняется действие. В итоге эта таблица получается самая активная на апдейты.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744843
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Как понимаю кто кого ждёт я посмотрел. Смотрел разными скриптами и профайлером до кучи. В итоге выводы об ожиданиях в первом посте привёл.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744847
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
Если запросы работают с малым числом строк, то может быть, имеет смысл использовать подсказку ROWLOCK?

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017

Почитал про нее. Но как понимаю у меня идет блокировка индекса. В трейсе вижу это так
авторwaitresource="KEY: 5:72058307143598080 (85be1f2715d1)" waittime="10069"

Если докопаться до значения, то это конкретная запись в таблице, т.е. 1 строка. Верно понимаю что это и есть блокировка на строку и здесь нет расширения блокировки на таблицу или страницу?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744864
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovВ итоге выводы об ожиданиях в первом посте привёл.Суммарная информация об ожиданиях - это как "средняя температура по больнице".
Надо найти причину происходящего. Например, в "час Х" резко возрастает количество коннектов/дисконнектов. Или просто запускается длительная транзакция, и остальные ждут ее окончания. И т.п.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744878
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovПроблемы ежедневно практически в одно и тоже время. Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу.
В итоге решили понять в чем причина, так как какой то связи пока проследить не получается. Запустил на день трейс на эскалации и блокированные процессы. На двух таблицах были эскалации, но блокировки возникали на той что привел в первом посте. Поэтому эскалации оставил на потом, считая что дело не в них. Пока решил попробовать разобраться с блокировками.
С бд работают около 10 серверов веб приложения. Через веб подключаются пользователи.- А вы отследили цепочку блокировок, когда у пользователя "всё встаёт"?
- Исходной точкой является обращение к SEQUENCES?
- Обращение, на котором блокируется, всегда один и тот же запрос?
- Почему проблема не постоянная, а проявляется периодически? Что меняется в запросах, когда она возникает?
- И на какое время блокируется SEQUENCES? На работу с ней, или в общей транзакции?
- Когда появились эти проблемы? Что то менялось, кто либо полдключался кк серверу для проведения каких то действий (например, для апдэйта софта)?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744879
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizzassedovесли ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?

Примерно вот так

ssedov ежедневно практически в одно и тоже время ( указать время и конкретные дни ). Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч.

у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу

Разработчик знает лучше свою архитектуру и быстрее может сказать в чем косяк.В общем да, либо надо самим глубоко влезать в приложение, а не смотреть какие то "показатели", или обратиться к разработчику.
Это уж вам решать, что будет быстрее и/или дешевле.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39744885
ssedov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть сейчас для меня ряд вопросов на которые пока не могу ответить, т.к. не все данные имею. Похоже что наметил для себя ряд действий по поиску дополнительной информации о проблеме и по запросу к разработчику. Позже продолжу эту тему, пока же возьму перерыв на проработку полученных сведений.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745236
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedov,

с таблицей глобального счетчика иначе нельзя работать - только сериализируемая блокировка. Иначе процессы при одновременном доступе получат/кстановят недостоверные идентификаторы. Разумеется, при этом выстроится очередь доступа к счетчику. Какого-то улучшения можно добиться лишь изменением логики и архитектуры данных.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745316
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssedovГавриленко Сергей Алексеевич,

Проблемы ежедневно практически в одно и тоже время. Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу.
В итоге решили понять в чем причина, так как какой то связи пока проследить не получается. Запустил на день трейс на эскалации и блокированные процессы. На двух таблицах были эскалации, но блокировки возникали на той что привел в первом посте. Поэтому эскалации оставил на потом, считая что дело не в них. Пока решил попробовать разобраться с блокировками.
С бд работают около 10 серверов веб приложения. Через веб подключаются пользователи.
Какая-то ещё нужна информация?

Вот тут самое оно перевести таблицу в InMemory и такое понятие как блокировка вообще исчезнет как класс, но вы версию не указали.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745512
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninВот тут самое оно перевести таблицу в InMemory и такое понятие как блокировка вообще исчезнет как класс, но вы версию не указали.Ээээ, "исчезнет как класс"?
Блокировка - это не какая то "бага", которую поправили внедрением функционала InMemory, это фцнуциорал СУБД, гарантирующий атомарность изменения данных. Разумеется, для InMemory таблиц блокировки точно такие же, разве что реализованы другим кодом. Иначе были бы перекорёженные записи, где половина полей изменены одним процессом, а половина другим.

ТС нужно просто делать блокировки короче, если это возможно. Например, без внешней транзакции, внутри простого апдэйта.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745551
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninВот тут самое оно перевести таблицу в InMemory и такое понятие как блокировка вообще исчезнет как класс, но вы версию не указали.Самое оно - читать вопросы внимательно и думать перед ответом.
Как in-memory поможет ТС'у, у которого конкурентные обновления одной и той же строки?alexeyvgЭэээ, "исчезнет как класс"?Исчезнет. In-memory таблицы lock-free - применяются оптимистические блокировки. Соответственно, при конкурентном изменении одних и тех же строк, возникает конфликт и одна из транзакций откатывается.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745569
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot invm]a_voronin Исчезнет.

In-memory таблицы lock-free - применяются оптимистические блокировки .

Соответственно, при конкурентном изменении одних и тех же строк, возникает конфликт и одна из транзакций откатывается.

Кто на ком стоял?

ЗЫ. Интересно, как "возникает конфликт", если "блокировки нет"?

ЗЗЫ. Тредстартеру In-Memory помогут как мертвому припарки.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745574
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmalexeyvgЭэээ, "исчезнет как класс"?Исчезнет. In-memory таблицы lock-free - применяются оптимистические блокировки. Соответственно, при конкурентном изменении одних и тех же строк, возникает конфликт и одна из транзакций откатывается.А, точно.

Просто это как бы базовое ограничение - "необходимо обеспечить атомарность". Так что не поможет, даже можно не читать про InMemory, что бы это понять. А то, что там откатывается, а не ждёт, я не помнил, не работаю с InMemory, но это уже детали
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745578
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Кто на ком стоял?

ЗЫ. Интересно, как "возникает конфликт", если "блокировки нет"?Ну, не придирайтесь к словам :-)
Блокировки нет, но ждать прога не будет, просто отвалится с ошибкой.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745582
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Интересно, как "возникает конфликт", если "блокировки нет"?Тебе уже неоднократно говорилось - если не можешь что-то осознать, то это не означает, что этого не существует.
При должном усердии, сможешь восполнить пробел в знаниях из статей и литературы.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745703
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmaleks222Интересно, как "возникает конфликт", если "блокировки нет"?Тебе уже неоднократно говорилось - если не можешь что-то осознать, то это не означает, что этого не существует.
При должном усердии, сможешь восполнить пробел в знаниях из статей и литературы.

Если чего-то нет - этого нет.

Если конфликт возникает => есть блокировка.

Если гуру называет блокировку неблокировкой - это проблемы гуру.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745789
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Если чего-то нет - этого нет.

Если конфликт возникает => есть блокировка.

Если гуру называет блокировку неблокировкой - это проблемы гуру.Для желающих поумничать и пожонглировать определениями: если чего-то нет, но некоторым особо одаренным кажется, что оно таки есть, то это проблемы особо одаренных...
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745832
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересное решение оптимистической блокировки... На разрешение записи оптимистическая предполагает два настраиваемых исхода - ожидание окончания блокирующей вставки или завершение с ошибкой. Вы пишете, что MS использует только вариант с ошибкой?

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

Автору версионирование категорически воспрещено. У него, похоже, проблема в том, что эта таблица - счетчик держится транзакциями процедуры, которая массово вызывается, а сами транзакции достаточно длительные, чтобы создавать очередь. Там дело не в таблице, а в архитектуре, создавшей бутылочное горлышко в виду этой таблицы.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745856
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовВы пишете, что MS использует только вариант с ошибкой?Вас не смущает, что при варианте с ожиданием будет нарушение уровня изоляции?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39745964
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

не пойму вопрос. Откуда появится нарушение?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746012
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Изоляция транзакций для in-memory таблиц основана на версиях строк. Самый низкий TIL для таких таблиц - SNAPSHOT.
Следовательно, если реализовать механизм ожидания для конкурентных update'ов, то невозможно гарантировать, что мы изменяем то же самое значение, что было на момент начала транзакции.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746041
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовinvm,

не пойму вопрос. Откуда появится нарушение?Две транзакции сделали обновление строки, изменили поле field = field + 1

Значение field было равно 100
Каждая транзакция в своей копии строки установила значение поля 101.
Далее первая записала 101, второй что записывать, тоже 101? Это нарушение целостности данных. Потому что выполнение двух запросов field = field + 1 должно увеличить field на 2, а не на 1.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746043
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746056
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgВладислав Колосовinvm,

не пойму вопрос. Откуда появится нарушение?Две транзакции сделали обновление строки, изменили поле field = field + 1

Значение field было равно 100
Каждая транзакция в своей копии строки установила значение поля 101.
Далее первая записала 101, второй что записывать, тоже 101? Это нарушение целостности данных. Потому что выполнение двух запросов field = field + 1 должно увеличить field на 2, а не на 1.

Одна транзакция валиться, делает retry, обновляет на 102 . Скажем так, побыстрее это шуршать будет, чем то, что сейчас имеем на физической таблице.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746059
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, понятное разъяснение. При оптимистическом накатывании кто последний обновил - тот и прав. Не имеет значения, что было до этого. По крайней мере, я сталкивался с такой реализацией оптимистического обновления в других системах. Это вариант Б, о котором я писал.

Логика понятна в целом - во избежание претензий со стороны эксплуатации лучше перебдеть, чем недобдеть и вариант Б не реализовывать.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746096
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninОдна транзакция валиться, делает retry, обновляет на 102 . Скажем так, побыстрее это шуршать будет, чем то, что сейчас имеем на физической таблице.О, какая круть.
Оказывается долбать сервер повторами транзакций (причем не важно, что было в этой транзакции до проблемного момента), оказывается выгоднее ожидания блокировки...

Наверное у вас даже есть экспериментальные подтверждения этому?
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746220
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninalexeyvgпропущено...
Две транзакции сделали обновление строки, изменили поле field = field + 1

Значение field было равно 100
Каждая транзакция в своей копии строки установила значение поля 101.
Далее первая записала 101, второй что записывать, тоже 101? Это нарушение целостности данных. Потому что выполнение двух запросов field = field + 1 должно увеличить field на 2, а не на 1.

Одна транзакция валиться, делает retry, обновляет на 102 . Скажем так, побыстрее это шуршать будет, чем то, что сейчас имеем на физической таблице.Разве быстрее второй транзакции делать всё заново, после того, как завершиться первая, чем подождать до конца первой? Ведь ожидание-то одинаковое, в любом случае второй траназкции придётся ждать окончания первой, она же раньше не сможет продолжиться.

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

Но в данном конкретном случае выгоды не будет, потому что речь об одной и той же строке таблицы.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746222
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовПри оптимистическом накатывании кто последний обновил - тот и прав. Не имеет значения, что было до этого.При "оптимистическом накатывании" первый и есть последний. Остальные ничего накатить не смогут, ибо данные уже изменены.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746579
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvga_voroninпропущено...


Одна транзакция валиться, делает retry, обновляет на 102 . Скажем так, побыстрее это шуршать будет, чем то, что сейчас имеем на физической таблице.Разве быстрее второй транзакции делать всё заново, после того, как завершиться первая, чем подождать до конца первой? Ведь ожидание-то одинаковое, в любом случае второй траназкции придётся ждать окончания первой, она же раньше не сможет продолжиться.

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

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

В данном случае надо было задействовать sequence и непонятно почему это было не сделано. Если это невозможно из-за низкой версии, то надо предгенерить значения или использовать очередь в брокере, что возможно уже давно и дает параллельность.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746628
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmВладислав КолосовПри оптимистическом накатывании кто последний обновил - тот и прав. Не имеет значения, что было до этого.При "оптимистическом накатывании" первый и есть последний. Остальные ничего накатить не смогут, ибо данные уже изменены.

Да, это понятно, по варианту А - кто первый встал, того и тапки.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39746792
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninВ данном случае надо было задействовать sequence и непонятно почему это было не сделано. Если это невозможно из-за низкой версии, то надо предгенерить значения или использовать очередь в брокере, что возможно уже давно и дает параллельность.Да, или IDENTITY
Но это уже другой вопрос.
Может, у них какой то особый алгоритм формирования этого номера, определяемый, скажем, внешними правилами (скажем, государственными нормативными актами, или давно принятыми локальными нормативными актами).
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39747002
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvga_voroninВ данном случае надо было задействовать sequence и непонятно почему это было не сделано. Если это невозможно из-за низкой версии, то надо предгенерить значения или использовать очередь в брокере, что возможно уже давно и дает параллельность.Да, или IDENTITY
Но это уже другой вопрос.
Может, у них какой то особый алгоритм формирования этого номера, определяемый, скажем, внешними правилами (скажем, государственными нормативными актами, или давно принятыми локальными нормативными актами).

Или про identity, @@identity и scope_identity() и не слышали.
...
Рейтинг: 0 / 0
Aggressive Under-Indexing
    #39747041
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял автора, то эта таблица не решает задачу раздачи идентификаторов. Так что не совсем понятно каким образом тут поможет SEQUENCE, IDENTITY и т.д.

Как уже написали в одном из первых постов - тут явно нужен анализ архитектуры. Судя по всему автор темы еще даже не исследовал что же именно происходит на сервере в моменты "когда все тормозит".
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Aggressive Under-Indexing
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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