Имя: Пароль:
1C
1С v8
Вопрос про управляемые блокировки
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) я как-то по настоящему охренел, увидев в серверном модуле одной из "доработанных" типовых оператор "Предупреждение"
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс