powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Aggressive Under-Indexing
25 сообщений из 51, страница 1 из 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
25 сообщений из 51, страница 1 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Aggressive Under-Indexing
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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