gifts2017

Как я победил блокировки (deadlock)

Опубликовал Андрей Пастухов (Minotavrik) в раздел Программирование - Теория программирования

Статья о том, как сделать работу нормальной, комфортной для пользователей, в большой базе с большим количеством пользователей.

Скачать файлы

Наименование Файл Версия Размер
Блокировки статья 1571
.doc 441,00Kb
28.09.09
1571
.doc 441,00Kb Скачать
Блокировки 433
.epf 5,34Kb
28.09.09
433
.epf 5,34Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Ожерельев (Поручик) 28.09.09 11:02
Навскидку интересно. Надо бы опробовать.
2. Tiger77 (Tiger77) 28.09.09 11:19
Очень хорошее описание, однозначно плюс
3. kazah (kazah) 28.09.09 12:52
Какой программой открывать статью?
4. Станислав Шепталов (sCHTASS) 28.09.09 13:04
За статью плюс!!! Будет полезной.
5. Андрей Пастухов (Minotavrik) 28.09.09 13:22
6. Александр Медведев (anig99) 28.09.09 13:39
Статья хорошая, но однобокая... Всё-таки, блокировки лучше начать лечить с SQL - нормальное отлаживание регламентных заданий, оптимизированые скрипты, разделение файлов БД по разным дискам и т.д... Поэтому советую переименовать статью, точнее уточнить - режим управляемых блокировок
7. Андрей Пастухов (Minotavrik) 28.09.09 13:51
anig99 - у меня все регламентные задания настроены. Базы и логи на разных дисках. Серваки новые на каждом 16 гб. ОЗУ. Все как положено, только от блокировок deadlock это не спасает в часы пик юзеры вообще работать не могут. Просто по одной простой причине - последовательная выполнение транзакций, полная изоляция транзакций друг от друга. так что крути не крути а с блокировками в первую очередь нужно через 1с разбираться. Это я сам лично опробывал и имею хорошие результаты.
8. Александр Медведев (anig99) 28.09.09 13:55
(7) сам себе противоречишь... сначала всё настроил для SQL, а потом уже за управляемые взялся... Как ни крути, но то, что при времени проведения документа в несколько минут не вылетает блокировка, пользователя не радует, а просто угнетает в меньшей степени. Просто по твоей статье все начнут врубать управляемые блокировки, хотя можно обойтись и SQL... По моему мнению управлеяемые блокировки - последнее средство, когда SQL достигает предела производительности.
9. Андрей Пастухов (Minotavrik) 28.09.09 14:09
Да нифига в режиме автоматических блокировок 1с 8.1 работает как 1с 8.0. Т.е. по сути платформу 8.1 разработали для того, чтобы в ней могли работать одновременно много пользователей и колотить документы. Ты почитай книжку "1с предприятие от 8.0 к 8.1"

Проблема в том, что при проведении в автоматических блокировках накладывается режим блокировки разделяемый и если две транзакции пытаются захватить одни и те же данные у них это получается, после их обработки каждой из транзакций необходимо выполнить исключительную блокировку транзакций для записи этих данных. В итоге ни одна ни другая этого не может сделать без принудительного прекращения одной из них вот это и есть deadlock. В управляемых блокировках, это решается путем наложения исключительной блокировки данных. Я сам до последнего момента сомневался и поразился результатам. Про SQL я не спорю если у тебя не настроены регламентные задания это увеличит блокировки, но как бы ты их не настраивал ты их не решишь одим sql. У меня с 5 - 7 вечера 40 операторов колотят накладные по 50 - 200 позиций в каждой. А у тебя база какого размера? Сколько юзеров работают?
10. Андрей Пастухов (Minotavrik) 28.09.09 14:09
а за управляемые я взялся потому, что результата не было.
11. Герман (German) 28.09.09 14:21
Пересказ(Ctrl+C-Ctrl+V) Книги от 8.0 к 8.1.
Не рассмотрена проблема эскалации.

P.S. Блокировка на удаление движений нафиг не нужна.
Login2222222; vadver; MSensey; +3 1 Ответить
12. Андрей Пастухов (Minotavrik) 28.09.09 14:32
Ну насколько помню я ссылки на книгу дал. И во всей статье на нее ссылаюсь.

Не рассмотрена проблема эскалации - я что то не понял там, что в заголовке статьи написано ЭСКАЛАЦИЯ БЛОКИРОВОК.

Это вообще отдельная большая тема.

Пишешь, на русский язык для людей переводишь, с примерами код готовый выкладываешь, а народ еще фукает и говрит не рассмотрена проблема такая то, я что к тебе на защиту диплома пришшел, не нравится не бери.
ybatiaev; kernst; +2 1 Ответить 2
13. Александр Медведев (anig99) 28.09.09 14:39
120 гБ - 30-50 пользователей.
Проблем с текущим проведение нет никаких. Проблемы начинаются, когда начинают перепроводить задним числом, тогда начинает решать тюнингованность sql.
А вообще я и не говорю о том, что всё можно решить одним sql. Я говорю о том, что сначала нужно решить проблемы с sql, а потом уже делать управляемые блокировки...ну по крайней мере сделать управляемые, но не забыть про sql.
(10) другой вопрос... сколько времени на проведение одного документа уходит?
14. Андрей Пастухов (Minotavrik) 28.09.09 14:48
Мало, ожидание на блокировках по времени значительно снизилось, замерял по конфигурации ЦУП. Да и потом, ожидание возникает в случае, если один склад одна номенклатура. Ну по словам операторов, им настало счастье.
15. Герман (German) 28.09.09 14:53
(12)
В статье только сказано:
Поискав литературу в нете, нашел только книгу «1с предприятие от 8.0 к 8.1» начинаю судорожно изучать драгоценную главу «блокировки данных».

Вы очень не глубоко изучили этот вопрос и уже пишите слово "победил".
Вас почитают многие люди и сядут в лужу, то что у Вас все (3!!! документа) заработало просто счастливое стечение обстоятельств (мало данных и хорошее железо).
Не слово про измерения и индексы. Про разделяемый режим.




userwar; rayastar; vadver; +3 1 Ответить 1
16. Герман (German) 28.09.09 15:00
(12) Я выразил свое мнение, нужно было поставить минус без комментариев? - тогда бы Вы еще больше расстроились.

я что к тебе на защиту диплома пришшел, не нравится не бери.

Вашу статью закачал обратно на IS. :D
17. Андрей Пастухов (Minotavrik) 28.09.09 15:06
Ну если 7 000 документов "Реализация товаров и услуг" в день это мало, тогда я не могу представить много.

А за основу я взял типовую конфигурацию 1с, насколько я знаю там оптимально это дело настроено (я про индексы говорю). Да и потом, про сядут в лужу, мне это помогло я решил поделится, еще никто не запрещал перед глобальными изменениями делать бекап.

Этот вопрос я изучал около 2-х месяцев и многое перепробывал с настройками sql, ощутимых результатов я не увидел.

3 документа это чудо?

1 - случайность
2 - свопадение
3 - закономерность.

Да и никого я не заставляю это делать. А инфы про управляемые блокировки в нете действительно мало. Книги 1с в свободное скачивание тоже не предостовляются.
18. Александр Рытов (Арчибальд) 28.09.09 15:07
(15) Автор не пишет "как победить". Он делится информацией о том, как "он победил" в конкретной ситуации. Так что дезинформацией здесь и не пахнет.
Но конечно же, право на минус у Вас имеется...
19. Герман (German) 28.09.09 15:17
(17) забейте если для Вас это критично я могу аннулировать свой минус.
вы просто не описали достаточно Важные вещи, о которых вы наверняка знаете. Просто могли упомянуть о них в статье для затравки, а более подробно описать потом. И Ваши читатели бы знали что не все так просто.
20. Андрей Пастухов (Minotavrik) 28.09.09 15:26
Я не стал читателей уводить в дебри, я сам, когда читал про эскалацию блокировок чуть мозг не сломал. Про это можно почитать тут http://www.gilev.ru/1c/81/lock/lock.htm но там не написано, конкретно если вы сделаете это, то настанет вам счастье.
21. gilv (Gilev.Vyacheslav) 28.09.09 17:24
21 Неодназначное впечатление

1. Статья начиналась как собственное понимание, а закончилась как ЖКК, т.е. нечитаемо, ну или я лично не осилил.

2. Способ помещения задач на проведения под одного пользователя практикуется в УПП давно. Я так понял, вы работали только с УТ и поэтому об этом либо не знали, либо вводите нас в заблуждение

3. Раз уж упомянули мою статью, отвечу:
лучше всего бороться с эскалацией в MS SQL Server 2008, без всяких управляемых блокировок
КАК БОРОТЬСЯ - это мой хлеб, за деньги готов продать свои знания

4. Почему вы не разложили действия этого пользователя по нескольким фоновым процедурам для НЕПЕРЕСЕКАЕМЫХ данных?

5. Радует одно, вы пишите за бесплатно, тем самым заполняя информационный вакуум
я не считаю, раз есть книжки от 1С, значит их дублировать не надо
но пожалуйста не копипастите их, а пишите полностью СВОИ мысли
пусть они буду с ошибками, но Вы же сами и научитесь в результате

по крайней мере, у меня получается учиться таким образом

рейтинговать не буду ввиду изложенного
надеюсь без обид
22. Андрей Пастухов (Minotavrik) 28.09.09 18:29
4. Почему вы не разложили действия этого пользователя по нескольким фоновым процедурам для НЕПЕРЕСЕКАЕМЫХ данных? вот эта интересная мысль.

2. Я работаю под SQL server 2005.
А Управляемыми блокировками решил воспользоваться, т.к. мне интересно показалось. А они чем то плохи? Просто не каждый знает все тонкости SQL server.

23. gilv (Gilev.Vyacheslav) 28.09.09 22:21
(22) дело не в том, хороши они или плохи.
В УПП все Вами сказанное есть, в том числе управлемые блокировки.
С другой стороны, заново изобретать велосипед не зазорно, мысли не могут иметь копирайта.

Про эскалацию - управляемые блокировки не могут спасти от эскалации, просто эскалация будет не на субд, а на кластере 1С.
Не правильный, но самый простой метод, который могу озвучить бесплатно - дробление количества движений на более мелкие порции.
24. Сергей (Che) Коцюра (CheBurator) 29.09.09 03:05
Софтпоинт недавно проводил семинар по гибким блокировкам и дедлокам, также они обещали выложить материалы семинара в открытый доступ - нудо бы их пнуть (?) за обещанное...
http://www.softpoint.ru/info_id103.htm
25. Сергей (Che) Коцюра (CheBurator) 29.09.09 03:11
ууу. начал читать статью.. на первых же шагах - "траблы"
.."нарисовалась такая проблема как блокировки (deadlock), собственно о них в дальнейшем и пойдет речь. Блокировка - это информация о том, данный ресурс захвачен "кем то" для выполнения какого-то действия."
.
ну... из того, что я "усвоил" ;-) блокировки и дедлоки - это не одно и то же... Условно: блокировка - рано или поздно кончается, дедлок - это навсегда... ;-)
26. gilv (Gilev.Vyacheslav) 29.09.09 15:26
народ, только не пинайте человека
он же СТАРАЛСЯ, а не продает что-то
27. Сергей (Che) Коцюра (CheBurator) 29.09.09 18:13
(26) ни в коем же случае! любой кто знает больше чем "я" - уже вызывает уважение...
29. Сергей Толмачев (sss999) 30.09.09 07:00
а я могу и просто так плюсы ставить,а корифеи зазнались уже :o ,там кто то написал что плюст а сам не поставил вот идиот
30. Sensey Master (MSensey) 30.09.09 10:03
Цитата "нарисовалась такая проблема как блокировки (deadlock)"
Блокировки это не проблема.
Ожидание на блокировках это пробема и дедлоки это проблема.
Кроме того не понятно почему deadlock написано в скобках к словку "блокировки", дедлок и блокировка это разные вещи.
31. Sensey Master (MSensey) 30.09.09 10:19
"... нам необходимо сохранить целостность данных, поэтому при проведении и обработки удаления проведения необходимо указать какие записи регистров блокировать".

Не понятно зачем при удалении проведения ставить УБ?
Рекомендую ознакомиться как сделаны УБ в УПП - она полностью переведена на УБ.
32. Sensey Master (MSensey) 30.09.09 10:20
Вот цитата К. Рупосова (1С):
Если очень коротко, то ответ такой: все будет в порядке, платформа автоматически позаботиться обо всем, кроме одного – чтения данных в транзакции. Если вы хотите, чтобы до конца транзакции никто не смог изменить данные, которые вы прочитали, то вам нужно установить на них блокировку. Классический пример – контроль остатков. Вы прочитали остатки, приняли решение и начали записывать движения (в том числе списывать остатки). Если это происходит в автоматическом режиме, то все будет хорошо. Если в управляемом, то ваше чтение не защищено и кто-нибудь может списать ваши остатки после того, как вы приняли решение, но до того, как вы записали движения. В этом случае, ваши проводки могут оказаться некорректными (остатков, на которые вы рассчитывали, может уже не быть).
33. Sensey Master (MSensey) 30.09.09 10:25
В итоге ставлю статье "минус" - все было сведено к переводу на УБ и при этом присутствуют неверные решения.
34. mosAdm (mosAdm) 30.09.09 11:54
(31)
>Рекомендую ознакомиться как сделаны УБ в УПП - она полностью переведена на УБ

Я что-то пропустил? Или речь идет о: "ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ,,истина,РежимПроведения);"

Вся типовая конфигурация УПП с работает в режиме блокировок "Автоматический"
35. Sensey Master (MSensey) 30.09.09 12:03
(34) Нет речи о "ОбщегоНазначения.УдалитьДвиженияРегистратора". Причем оно здесь?

>> Вся типовая конфигурация УПП с работает в режиме блокировок "Автоматический"

По умолчанию да. Но с версии 1.2.15 появилась возможность включить управляемый режим.
36. mosAdm (mosAdm) 30.09.09 12:08
(35)
то что появилась возможность совсем не означает "она полностью переведена на УБ ".
Для перевода корпеть и корпеть программисту ручками.
Да и режим блокировок не зависит от релизов конфигурации.

Или о чем речь идет? может прямо пример из текста типовой УПП?
37. Sensey Master (MSensey) 30.09.09 12:35
(36) Не понимаю, что я должен написать, чтобы Вы восприняли "она полностью переведена на УБ"?
В описании нового и в конференции написано, что можно установить режим управления блокировкой - "Управляемый".

Или Вы не верете тому, что она полностью переведена на УБ?
Ну что же оставайтесь при своем, а в тоже время многие уже установили в УПП этот режим и довольны.
38. mosAdm (mosAdm) 30.09.09 12:54
(37)
Действительно пропустил, спасибо.

Речь идет о процедуре общего модуля "УстановитьУправляемуюБлокировку", которая вызывается если изменён соответствующий флаг свойств конфигурации.
39. Андрей Пастухов (Minotavrik) 30.09.09 16:56
Спасибо за совет! я про УПП говорю. А в статье возможно где-то не так выразился. На критику каждый имеет право.
40. Герман (German) 30.09.09 22:22
(34) не полностью только склад(партии) и взаиморасчеты ну и еще по мелочи, к сожалению на производство у них сил не хватило.
41. mosAdm (mosAdm) 01.10.09 08:56
(40) Да, полностью согласен. И утверждение "она полностью переведена на УБ" будет соответствовать действительности когда в типовой демке в свойствах конфигурации будет установлен флаг "Управляемый".
Хотя должен признать, что программисту здорово облегчена работа и вместо "корпеть и корпеть" больше подходит "делай как я".
42. Sensey Master (MSensey) 01.10.09 13:45
(40) А мог бы ты сказать в каком месте производства не хватает УБ?
43. Герман (German) 01.10.09 14:14
(42) Да все производственные регистры.
Может напишу расширенную статью по этому поводу в своем блоге.
44. Сергей (Che) Коцюра (CheBurator) 02.10.09 04:09
из того что я себе представляю: не может быть универсального решения на управляемых блокировках. все зависит от частностей - от темпов проведения доков, от характера самих доков и от много другого.. то есть чтобы сделать эффективные УБ - надо на живой базе или на тестовом стенде на объемах данных близким к реальным погонять и померять...
????
45. Sensey Master (MSensey) 02.10.09 09:04
(44) есть общие правила по которым можно определить необходимость управляемой блокировки
46. Дмитрий Герасименко (Winston) 02.10.09 09:29
Статья очень хорошая. Спасибо, помогла.
47. Сергей (Che) Коцюра (CheBurator) 02.10.09 10:41
(45) речь не про это, а про то, что сам код упр.блокировок - будет зависеть от многих причин. т.е. упрощенно может потребоваться перетасовка порядка проведения по разным регистрам...
48. Андрей Пастухов (Minotavrik) 03.10.09 12:46
Статья очень хорошая. Спасибо, помогла.
очень рад, что пригодилась.
ybatiaev; +1 Ответить
49. Андрей Пастухов (Minotavrik) 03.10.09 12:49
из того что я себе представляю: не может быть универсального решения на управляемых блокировках. все зависит от частностей - от темпов проведения доков, от характера самих доков и от много другого.. то есть чтобы сделать эффективные УБ - надо на живой базе или на тестовом стенде на объемах данных близким к реальным погонять и померять... 
????


Категорически согласен. Каждую конфигурацию надо рассматривать отдельно.
50. Виктория (vika64) 20.10.09 16:26
хочу попробовать воспользоваться вашим опытом. У нас терминальный режим, СКЛ 2000, управление торговлей 8.1. для беларуси. 20 пользователей. Документы заказ покупателя и реализация. и куча регистров к ним. Реализация проводится на завтра. Помогут ли здесь управляемые блокировки и могу ли я испортить базу, например остатки по минусу пойдут?
51. Сергей (Sergant) 09.06.10 10:32
Спасибо автору за статью. Спасибо за расширенеи моего кругозора.
Побольше бы подобных статей где вы будете делится своими успехами и неудачами. Плюс.
52. Василий Петров (expert.1c8) 23.09.10 21:44
Интересна как сама статья, так и комменты к ней, причем даже негативные..
надо больше таких статей, которые пусть и с какими-то недостатками, но описывают реальный опыт внедрения...
53. Олег Бондаренко (legawww) 26.09.11 16:49
Интересная статья, спасибо
54. Олег Бондаренко (legawww) 26.09.11 16:54
Я так понимаю что управляемые блокировки плюс установка исключительной блокировки в транзакции убирают возникновение ошибки deadlock, но у меня она все равно появляется при проведении двух разных документов Заказ покупателя, которые резервируют товар и в которых одинаковые товары
55. Елена (elena_77) 24.10.11 08:26
Статья полезная. Спасибо.
56. nnurik (nnurik) 08.11.11 15:24
Много полезного узнала. Спасибо.
58. Pavel Osipov (cannabis_86) 15.11.11 11:38
Я новичок в 1спрограммировании. Для меня оказалось полезным.
59. Иван (Sairys) 19.12.11 17:39
Интересная статья, я так понимаю блокировки которые выставлены в автоматическом режиме выполнаются на стороне СУБД. А управляемые на стороне платформы 8
60. Александр Топольский (AlexanderKai) 17.01.12 10:49
Не все конечно удалось исправить, но некоторые моменты из статьи для себя почерпнул.
61. Марат Мулин (kernst) 19.01.12 11:54
Мне для общего развития не лишнее. Хотя конечно все поверхостно. С блокировками нужно читать полноценные статьи, чтобы в них разобраться.
62. Александр (AlexandrRo) 01.02.12 00:22
Посоветуйте, пожалуйста, как отловаить дедлок, в профайлере 5-6 раз в день вылезает, журнале регистрации видно что транзакция отваливается, поделитесь опытом как вы определяете где копать ?
63. Александр Са (trade85) 01.02.12 01:26
64. Вася Пупкин (Smart_Fox) 15.11.13 01:12
Статья тупо слизана из книжки "Профессиональная разработка"!!!
И не стыдно за такой плагиат еще и "СтарМани" требовать?!
Ничего нового в статье на две страницы текста не почерпнул :(
Не советую это качать не тратьте время и деньги. вот такая же статья но на халяву :)
http://1cexpo.ru/informacziya/27-blokirovki-dannyx-v-1spredpriyatii-8.html
Brook; rayastar; +2 Ответить