Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
ssedov Member Откуда: Сообщений: 10 |
Есть очень маленькая таблица с большим количеством апдейтов и на ней возникают постоянные блокировки. Что потенциально можно сделать в таком случае, подскажите, пожалуйста? spBlitz про нее:
spBlitz про индекс на ней:
SQL для создания таблицы: 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] |
||||||||
8 дек 18, 10:16 [21757776] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
ssedov, Добавлю, при разборе блокировок видно что удерживается индекс PK_SEQUENCES в режиме X. Работа идет по сути только с 2мя записями в этой таблице, во всяком случае в блокировках фигурируют только они. Эти записи что-то типа счетчика, каждый коннект к БД его увеличивает, дисконнект уменьшает. Коннектов до 1000 одновременно работающих. |
8 дек 18, 10:30 [21757780] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9638 |
При конфликте читатель-писатель - грязное чтение, RCSI, snapshot isolation. |
||
8 дек 18, 11:16 [21757790] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||
8 дек 18, 13:10 [21757827] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9638 |
|
||
8 дек 18, 13:25 [21757836] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||
8 дек 18, 13:33 [21757839] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9638 |
Очень странный иднентити :) |
||
8 дек 18, 14:09 [21757843] Ответить | Цитировать Сообщить модератору |
aleks222 Member [заблокирован] Откуда: Сообщений: 1240 |
1. Критическая секция и sp_getapplock. 2. Самый ленивый вариант: update with(tablockx). |
||
8 дек 18, 14:54 [21757859] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
Помещение таблицы в память в таком случае могло бы помочь? Хотя ФС на сервере внешняя СХД и сама по себе очень быстрая. |
8 дек 18, 18:05 [21757968] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
8 дек 18, 18:10 [21757974] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
aleks222, Читал про sp_getapplock, но так и не понял чем она поможет. Как понимаю это тоже блокировка на запись, но наложенная приложением. Остальные коннекты так же будут висеть и ждать её? Верно понимаю? |
8 дек 18, 18:47 [21758022] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
Гавриленко Сергей Алексеевич, Как это правильно сделать? Есть может какая-то информация на эту тему? Или, если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос? |
8 дек 18, 19:50 [21758077] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
8 дек 18, 20:15 [21758097] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
Гавриленко Сергей Алексеевич, Проблемы ежедневно практически в одно и тоже время. Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу. В итоге решили понять в чем причина, так как какой то связи пока проследить не получается. Запустил на день трейс на эскалации и блокированные процессы. На двух таблицах были эскалации, но блокировки возникали на той что привел в первом посте. Поэтому эскалации оставил на потом, считая что дело не в них. Пока решил попробовать разобраться с блокировками. С бд работают около 10 серверов веб приложения. Через веб подключаются пользователи. Какая-то ещё нужна информация? |
8 дек 18, 20:31 [21758112] Ответить | Цитировать Сообщить модератору |
DaniilSeryi Member Откуда: Сообщений: 1764 |
Если запросы работают с малым числом строк, то может быть, имеет смысл использовать подсказку ROWLOCK? https://docs.microsoft.com/ru-ru/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017 |
||||||
8 дек 18, 20:36 [21758120] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 416 |
Примерно вот так
Разработчик знает лучше свою архитектуру и быстрее может сказать в чем косяк. |
||||
8 дек 18, 21:02 [21758142] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9638 |
Или sp_who2. Или скачайте себе sp_whoisactive и смотрите ей. |
||
8 дек 18, 21:44 [21758169] Ответить | Цитировать Сообщить модератору |
flexgen Member Откуда: Город на песке Сообщений: 832 |
А каким образом отлавливается коннект/дисконнект? Триггер on logon/logoff? И если триггер - update тоже выполняется этим же триггером? |
||
9 дек 18, 00:17 [21758246] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
flexgen, Если верно все понимаю, то вся работа с БД происходит через АПИ. Оно при входе/выходе дёргает хранимку, которая обращается к указанной таблице. Далее в этой таблице есть счётчик связанный с заявками, он тоже дёргается каждый раз когда с заявкой выполняется действие. В итоге эта таблица получается самая активная на апдейты. |
9 дек 18, 08:06 [21758313] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
invm, Как понимаю кто кого ждёт я посмотрел. Смотрел разными скриптами и профайлером до кучи. В итоге выводы об ожиданиях в первом посте привёл. |
9 дек 18, 08:08 [21758314] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
Почитал про нее. Но как понимаю у меня идет блокировка индекса. В трейсе вижу это так
Если докопаться до значения, то это конкретная запись в таблице, т.е. 1 строка. Верно понимаю что это и есть блокировка на строку и здесь нет расширения блокировки на таблицу или страницу? |
||||
9 дек 18, 08:41 [21758320] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9638 |
Надо найти причину происходящего. Например, в "час Х" резко возрастает количество коннектов/дисконнектов. Или просто запускается длительная транзакция, и остальные ждут ее окончания. И т.п. |
||
9 дек 18, 11:02 [21758350] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
- Исходной точкой является обращение к SEQUENCES? - Обращение, на котором блокируется, всегда один и тот же запрос? - Почему проблема не постоянная, а проявляется периодически? Что меняется в запросах, когда она возникает? - И на какое время блокируется SEQUENCES? На работу с ней, или в общей транзакции? - Когда появились эти проблемы? Что то менялось, кто либо полдключался кк серверу для проведения каких то действий (например, для апдэйта софта)? |
||
9 дек 18, 11:49 [21758373] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Это уж вам решать, что будет быстрее и/или дешевле. |
||||||
9 дек 18, 11:53 [21758374] Ответить | Цитировать Сообщить модератору |
ssedov Member Откуда: Сообщений: 10 |
Есть сейчас для меня ряд вопросов на которые пока не могу ответить, т.к. не все данные имею. Похоже что наметил для себя ряд действий по поиску дополнительной информации о проблеме и по запросу к разработчику. Позже продолжу эту тему, пока же возьму перерыв на проработку полученных сведений. |
9 дек 18, 12:14 [21758383] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |