Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
Есть очень маленькая таблица с большим количеством апдейтов и на ней возникают постоянные блокировки. Что потенциально можно сделать в таком случае, подскажите, пожалуйста?

spBlitz про нее:
Lock Waits
dbo.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 Stats
Reads: 46,954,297 (46,954,289 seek 8 scan) Writes:15,726,100

Op Stats
46,954,289 singleton lookups; 26 scans/seeks; 0 deletes; 15,725,898 updates;

Size
171 rows; 0.1MB


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]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
ssedov,

Добавлю, при разборе блокировок видно что удерживается индекс PK_SEQUENCES в режиме X. Работа идет по сути только с 2мя записями в этой таблице, во всяком случае в блокировках фигурируют только они. Эти записи что-то типа счетчика, каждый коннект к БД его увеличивает, дисконнект уменьшает. Коннектов до 1000 одновременно работающих.
8 дек 18, 10:30    [21757780]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
ssedov
Что потенциально можно сделать в таком случае
В случае конфликта писатель-писатель - ничего.
При конфликте читатель-писатель - грязное чтение, RCSI, snapshot isolation.
8 дек 18, 11:16    [21757790]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
ssedov
Что потенциально можно сделать в таком случае
Добавлю к ответу invm, старайтесь блокировать на максимально короткое время, если это возможно.
invm
При конфликте читатель-писатель - грязное чтение, RCSI, snapshot isolation.
Гразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.
8 дек 18, 13:10    [21757827]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
alexeyvg
Гразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.
Зависит от предназначения читаемого. А оно нам неведомо.
8 дек 18, 13:25    [21757836]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
invm
alexeyvg
Гразное чтение или snapshot isolation ТС вряд ли подойдёт, это же получение счётчика.
Зависит от предназначения читаемого. А оно нам неведомо.
Вангую, что это самодельный идентити.
8 дек 18, 13:33    [21757839]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
alexeyvg
Вангую, что это самодельный идентити.
Зависящий от числа коннектов?
Очень странный иднентити :)
8 дек 18, 14:09    [21757843]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
aleks222
Member

Откуда:
Сообщений: 851
ssedov
Есть очень маленькая таблица с большим количеством апдейтов и на ней возникают постоянные блокировки. Что потенциально можно сделать в таком случае, подскажите, пожалуйста?


1. Критическая секция и sp_getapplock.
2. Самый ленивый вариант: update with(tablockx).
8 дек 18, 14:54    [21757859]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
Помещение таблицы в память в таком случае могло бы помочь? Хотя ФС на сервере внешняя СХД и сама по себе очень быстрая.
8 дек 18, 18:05    [21757968]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
ssedov
Помещение таблицы в память в таком случае могло бы помочь? Хотя ФС на сервере внешняя СХД и сама по себе очень быстрая.
Мог бы помочь анализ архитектуры вашего приложения.
8 дек 18, 18:10    [21757974]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
aleks222,

Читал про sp_getapplock, но так и не понял чем она поможет. Как понимаю это тоже блокировка на запись, но наложенная приложением. Остальные коннекты так же будут висеть и ждать её? Верно понимаю?
8 дек 18, 18:47    [21758022]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
Гавриленко Сергей Алексеевич,

Как это правильно сделать? Есть может какая-то информация на эту тему? Или, если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?
8 дек 18, 19:50    [21758077]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
ssedov
Гавриленко Сергей Алексеевич,

Как это правильно сделать? Есть может какая-то информация на эту тему? Или, если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?
Давайте начнем с простого вопроса -- какие у вас проблемы с перфомансом? Или вы просто скрипт запустили и испугались?
8 дек 18, 20:15    [21758097]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
Гавриленко Сергей Алексеевич,

Проблемы ежедневно практически в одно и тоже время. Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу.
В итоге решили понять в чем причина, так как какой то связи пока проследить не получается. Запустил на день трейс на эскалации и блокированные процессы. На двух таблицах были эскалации, но блокировки возникали на той что привел в первом посте. Поэтому эскалации оставил на потом, считая что дело не в них. Пока решил попробовать разобраться с блокировками.
С бд работают около 10 серверов веб приложения. Через веб подключаются пользователи.
Какая-то ещё нужна информация?
8 дек 18, 20:31    [21758112]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1667
alexeyvg
ssedov
Что потенциально можно сделать в таком случае
Добавлю к ответу 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
8 дек 18, 20:36    [21758120]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
ssedov
если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?


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

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

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


Разработчик знает лучше свою архитектуру и быстрее может сказать в чем косяк.
8 дек 18, 21:02    [21758142]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
ssedov
Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы.
Вот когда такое случится, смотрите в sys.dm_os_waiting_tasks кто кого ждет.
Или sp_who2.
Или скачайте себе sp_whoisactive и смотрите ей.
8 дек 18, 21:44    [21758169]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 760
ssedov
ssedov,
каждый коннект к БД его увеличивает, дисконнект уменьшает. Коннектов до 1000 одновременно работающих.


А каким образом отлавливается коннект/дисконнект? Триггер on logon/logoff? И если триггер - update тоже выполняется этим же триггером?
9 дек 18, 00:17    [21758246]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
flexgen,

Если верно все понимаю, то вся работа с БД происходит через АПИ. Оно при входе/выходе дёргает хранимку, которая обращается к указанной таблице. Далее в этой таблице есть счётчик связанный с заявками, он тоже дёргается каждый раз когда с заявкой выполняется действие. В итоге эта таблица получается самая активная на апдейты.
9 дек 18, 08:06    [21758313]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
invm,

Как понимаю кто кого ждёт я посмотрел. Смотрел разными скриптами и профайлером до кучи. В итоге выводы об ожиданиях в первом посте привёл.
9 дек 18, 08:08    [21758314]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
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 строка. Верно понимаю что это и есть блокировка на строку и здесь нет расширения блокировки на таблицу или страницу?
9 дек 18, 08:41    [21758320]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
ssedov
В итоге выводы об ожиданиях в первом посте привёл.
Суммарная информация об ожиданиях - это как "средняя температура по больнице".
Надо найти причину происходящего. Например, в "час Х" резко возрастает количество коннектов/дисконнектов. Или просто запускается длительная транзакция, и остальные ждут ее окончания. И т.п.
9 дек 18, 11:02    [21758350]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
ssedov
Проблемы ежедневно практически в одно и тоже время. Количество блокированных процессов вырастает от нескольких сотен, до почти двух тысяч. При этом у пользователей все встаеет, начинаются звонки и жалобы. Порой это чаще, раз 5-10 в день, порой 1 раз или редкие дни что ни разу.
В итоге решили понять в чем причина, так как какой то связи пока проследить не получается. Запустил на день трейс на эскалации и блокированные процессы. На двух таблицах были эскалации, но блокировки возникали на той что привел в первом посте. Поэтому эскалации оставил на потом, считая что дело не в них. Пока решил попробовать разобраться с блокировками.
С бд работают около 10 серверов веб приложения. Через веб подключаются пользователи.
- А вы отследили цепочку блокировок, когда у пользователя "всё встаёт"?
- Исходной точкой является обращение к SEQUENCES?
- Обращение, на котором блокируется, всегда один и тот же запрос?
- Почему проблема не постоянная, а проявляется периодически? Что меняется в запросах, когда она возникает?
- И на какое время блокируется SEQUENCES? На работу с ней, или в общей транзакции?
- Когда появились эти проблемы? Что то менялось, кто либо полдключался кк серверу для проведения каких то действий (например, для апдэйта софта)?
9 дек 18, 11:49    [21758373]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
PizzaPizza
ssedov
если ПО от стороннего разработчика, то как верно адресовать ему этот вопрос?


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

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

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


Разработчик знает лучше свою архитектуру и быстрее может сказать в чем косяк.
В общем да, либо надо самим глубоко влезать в приложение, а не смотреть какие то "показатели", или обратиться к разработчику.
Это уж вам решать, что будет быстрее и/или дешевле.
9 дек 18, 11:53    [21758374]     Ответить | Цитировать Сообщить модератору
 Re: Aggressive Under-Indexing  [new]
ssedov
Member

Откуда:
Сообщений: 10
Есть сейчас для меня ряд вопросов на которые пока не могу ответить, т.к. не все данные имею. Похоже что наметил для себя ряд действий по поиску дополнительной информации о проблеме и по запросу к разработчику. Позже продолжу эту тему, пока же возьму перерыв на проработку полученных сведений.
9 дек 18, 12:14    [21758383]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить