|
Вопрос про управляемые блокировки | ☑ | ||
---|---|---|---|---|
0
Ryzeman
15.06.22
✎
21:30
|
УТ11. У меня есть обработка, которая по регламенту создаёт заказы на перемещение между складами по потребностям каждые 10 минут.
По схожему алгоритму у меня так же работают две подписки для срочных заказов и при поступлении товара. Регламент отрабатывает не очень быстро - секунд по 5-20 и там не очень хороший алгоритм, который запросом цепляет потребности в таблицу значений и по ней создаёт заказы. Иногда происходят коллизии и задвоения. Я бы мог наколхозить какие нибудь признаки выполнения регламента что б тормозить подписки, но насколько я понимаю правильнее было бы использовать управляемые блокировки. Подскажите как лучше это сделать. Повесить блокировку на регистр по которому потребности читаю? Как правильно сделать что б производительность на ноль не помножить? Рефакторить регламент не предлагать, я в том адовом легаси умру на неделю) |
|||
1
mikecool
15.06.22
✎
21:38
|
ээээ, блокировки в разрезе измерений-значений ставятся
|
|||
2
mikecool
15.06.22
✎
21:41
|
+1 то бишь, ставятся точечно и максимально эффективно
|
|||
3
Ryzeman
15.06.22
✎
21:41
|
Я знаю, просто ни разу не делал по большим таблицам. Вопрос в общем в следующем, я правильно понимаю, если я сделаю блокировку в таблице потребностей по тем заказам, по которым буду делать перемещухи, то другой такой же запрос будет ожидать только эти записи? Если в выборку других запросов эти записи попадать не будут, то и ожидания не будет. + новые записи по другим измерениям так же не будут тормозиться?
|
|||
4
Ryzeman
15.06.22
✎
21:41
|
MS SQL, если это важно.
|
|||
5
mikecool
15.06.22
✎
21:43
|
(3) в общих словах - да
|
|||
6
Ryzeman
15.06.22
✎
21:44
|
Спасибо, тогда попробую. Надеюсь, не накосячу и мне не оторвут бошку за то что "повесил" прод 😃
|
|||
7
H A D G E H O G s
15.06.22
✎
21:45
|
(3) (4) Да, но есть ньюансы
|
|||
8
Ryzeman
15.06.22
✎
21:45
|
(7) ну вот мне подводные камни и нюансы интересны как раз) Поделишься?
|
|||
9
H A D G E H O G s
15.06.22
✎
21:49
|
(8) Если у тебя таблица больше 5000 строк, тебе сам SQL наложит блокировку на всю таблицу, если флаг трассировки -t1211 не включен.
|
|||
10
Ryzeman
15.06.22
✎
21:54
|
(9) Миллион строк в базовой таблице)
Если не сложно, можешь в двух словах объяснить что этот флаг делает? Может как-то негативно повлиять на производительность? |
|||
11
mikecool
15.06.22
✎
21:56
|
(9) этот флаг же если обрабатываешь более 5к строк за раз или нет срабатывает?
|
|||
12
Ryzeman
15.06.22
✎
21:58
|
>>Флаг отключает эскалацию (укрупнение) блокировок во всех случаях, т.е. как по достижению их предельного количества, так и предельного размера памяти, занятой для хранения информации о них в соответствии с настройками SQL Server.
Судя по описанию это о том, что если пытаешься блокировать более 5к строк, или я не правильно понял? |
|||
13
palsergeich
15.06.22
✎
22:02
|
(9) или эскалация на таблице не отключена.
Флаг это из пушки пт воробъям |
|||
14
H A D G E H O G s
15.06.22
✎
22:11
|
(10) Пишут страшные вещи о росте потребления памяти сервером SQL, по факту - ничего такого не заметил. Но речь не про размер таблицы, а про то, сколько строк ты прочитал/записал в транзакции. Если больше 5000 - блокируется таблица.
|
|||
15
H A D G E H O G s
15.06.22
✎
22:12
|
(13) Знаю, что можно в рамках запроса отключить эскалацию. А как отключить по какой то таблице?
|
|||
16
Ryzeman
15.06.22
✎
22:14
|
(14) А, ну тогда это вряд ли грозит. Вряд ли за 10 минут появится заказов на 5000 перемещаемых строк.
|
|||
17
palsergeich
15.06.22
✎
22:45
|
(15) USE [ИмяБазы] ALTER TABLE _ReferenceChngR12526 SET (LOCK_ESCALATION = DISABLE)
|
|||
18
palsergeich
15.06.22
✎
22:47
|
(17) нуи потом контролить
Список таблиц с отключенной эскалацией USE [ИмяБазы] SELECT lock_escalation, lock_escalation_desc, name FROM sys.tables WHERE lock_escalation_desc='DISABLE' |
|||
19
H A D G E H O G s
15.06.22
✎
22:51
|
(17) Это на время сеанса или навсегда?
|
|||
20
palsergeich
15.06.22
✎
22:52
|
Как показала практика - поотрубать на нагруженных таблицах изменений и ещё по результатам работы - и наступает щастье.
У меня где то на 1% от общего числа таблиц наложено, полёт нормальный |
|||
21
palsergeich
15.06.22
✎
22:52
|
(19) навсегда, пока сам не отключишь
|
|||
22
H A D G E H O G s
15.06.22
✎
22:52
|
(17) Ты же понимаешь ,что даже если навсегда, то я не могу это запилить в тиражное решение, особенно Совместимое?
|
|||
23
palsergeich
15.06.22
✎
22:55
|
(22) а речи про это не шло.
Кому это надо - вызывайте гилева/Богачёва за много денег, он сделает то же самое) До этого надо дожить) |
|||
24
H A D G E H O G s
15.06.22
✎
22:58
|
(23) Мы ребята простые, открываем ИТС, читаем статью, ставим рекомендованный флаг -t1211
Но теперь будем давать ссылку на эту ветку, ибо я думал, что эта установка на время сеанса. |
|||
25
palsergeich
15.06.22
✎
23:00
|
можно повесить флаг, спору нет, но надо четко понимать что и зачем.
Если я знаю что ты в теме, то повальная игра с флагами без понимания того, что повесив флаг можно проспать проблему крупнее, того что что то в твоем доме пошло не так, а ты это увидишь слишком поздно. Появляются проблемы с эскалациями - я выясняю причину. Если это нормальный ход событий - таблица становится не эскалируемой. Если это аномальное поведение (говнокод) - он исправляется. И говнокод все же случается чаще, чем запланированное поведение |
|||
26
palsergeich
15.06.22
✎
23:02
|
(25) Иначе лечим проблему втыканием флага, но это не решит проблему, а просто переносит вызов Гилева/Богачева за еще большие деньги на 2недели позже)
|
|||
27
H A D G E H O G s
15.06.22
✎
23:03
|
(25) Ну выявлять проблему через слов таймаута SQL блокировок на продуктиве - это такое себе, можно еще и таймаут ожидания уменьшать потихоньку, тоже метод.
|
|||
28
palsergeich
15.06.22
✎
23:08
|
(27) Как показала практика - ломается не сразу.
Мне вон эксплуатанты сделали в заббиксе триггеры и графики всем показателям, в ТЧ и по числу таймаутов / дедлоков. Появился дедлок в рабочее - время - гого разбираться. Сейчас с 7 до 24 0 дедлоков считается нормой. таймауов - 5 шт. Превышает - у меня загорается лампочка и я иду разбираться |
|||
29
Ryzeman
15.06.22
✎
23:08
|
(18) (17) Спасибо, очень полезно на будущее.
|
|||
30
palsergeich
15.06.22
✎
23:09
|
(28) месяцев 9 да, потел, разгребал конюшни, зато сейчас тишь и благодать
|
|||
31
H A D G E H O G s
15.06.22
✎
23:10
|
(30) Ну че, респект.
|
|||
32
palsergeich
15.06.22
✎
23:12
|
(29) Всегда пожалуйста
|
|||
33
H A D G E H O G s
15.06.22
✎
23:15
|
А я вот уже 3 неделю Java учу.
|
|||
34
palsergeich
15.06.22
✎
23:17
|
(33) эх еще один валит(
Вон у меня Шеф бывший - пол года учил ПХП, потом перевелся в отдел веб разработки, но там его посадили на java, вот недавно, всего через год работы - ушел java сеньором уже в серьезное место |
|||
35
palsergeich
15.06.22
✎
23:18
|
(34) но он упертый, да, если копает то до сути
|
|||
36
H A D G E H O G s
15.06.22
✎
23:23
|
(34) Народ посмеивался, что вот, 1С ник пришел, хехехе, ну типа программист, а потом я спросил, как тут у вас в Java строят трассу выполнения (замер производительности).
А у них и нет этого, смотрели завороженно на пометки в коде, где он выполнился или нет в условиях. Есть только profiler, но учитель им не пользовался. |
|||
37
H A D G E H O G s
15.06.22
✎
23:23
|
(34) Не факт, что свалю. Просто может каких-нибудь новых идей и подходов к коду почерпну.
|
|||
38
palsergeich
15.06.22
✎
23:26
|
(36) ну у нас не так жестко, но да он говорил что наш отдел как разработчики гораздо сильнее.
А уж по работе с СУБД так на 2 головы. Просто мы на другом языке пишем. Я б привел фактов, но не буду) |
|||
39
Ryzeman
15.06.22
✎
23:33
|
(36) У меня друган джавист. Тоже высокомерно к 1сникам относится, но я послушал как он отладку делал... На первой работе по сути никак - тупо маркеры по типу "сообщить()" делал.
|
|||
40
palsergeich
15.06.22
✎
23:35
|
(39) Ну скажем так, сарказм в сторону 1с ников не на пустом месте))
Я тут видел поделия регионалов) ХТТП запросы в транзакции это наверное самое безобидное |
|||
41
Ryzeman
15.06.22
✎
23:38
|
(40) у нас порог вхождения ниже (ИМХО). Как минимум на уровне пользователя если в торговле работал то 90% что сталкивался с 1с. А если в школе\универе учил запросы и математические языки типа паскаля, то вообще изи. Это была основная причина почему я в 1с пошёл... А так криворуких везде хватает, думаю)
|
|||
42
Ryzeman
15.06.22
✎
23:41
|
Самое "крутое" что я от 1сников видел это диалог с пользователем внутри обработки проведения на семёрке) Я тогда её только только начинал изучать, но даже у меня глаза округлились)
|
|||
43
palsergeich
15.06.22
✎
23:53
|
(41) На счет ниже - кмк это заблуждение.
Ниже проще войти только в самописку. Любая типовая - делает порог входа очень высоким. одно дело писать в пустойбазе, другое дело как ориентироваться в типовках и БСП |
|||
44
Злопчинский
16.06.22
✎
01:11
|
(42) ну, это запросто. я такое пару раз встречал. если в базе работают 2-3 человека, то прокатывает...
|
|||
45
Ryzeman
16.06.22
✎
01:16
|
(44) Там была кривущая самописка человек на 150 которая стояла раком) Передо мной пришёл начальник - крутой спец, плюс я со свежим взглядом. Мы там кучу всего на прямые запросы переделали и подобную откровенную дичь убрали) Кстати 7ке я во многом по твоим ответам на мисте учился)
|
|||
46
rudnitskij
16.06.22
✎
06:24
|
(42) я как-то по настоящему охренел, увидев в серверном модуле одной из "доработанных" типовых оператор "Предупреждение"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |