powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как работает менеджер блокировок?
25 сообщений из 31, страница 1 из 2
Как работает менеджер блокировок?
    #37888947
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь сталкивался с укрупнением блокировок в менеджере блокировок сервера 1С?
Поясню на примере регистра накопления. Создадим 2 набора записей, не пересекающихся по набору измерений, в 2 разных сеансах. Затем явно откроем транзакцию в сеансе 1 и запишем первый набор, но завершать транзакцию пока не станем. В сеансе 2 попытаемся записать второй набор записей и столкнемся с любопытным ограничением менеджера блокировок. Оказывается при достижении определенного количества записей в одном из наборов, сервер 1С блокирует весь регистр. Как ни странно, эта фича проявляется только в управляемом режиме. В автоматическом режиме увеличение количества записей приводит к блокировкам на сервере БД – это нормально. В управляемом режиме запрос к серверу БД даже не формируется, сессия просто отваливается по таймауту на уровне сервера приложений.
Проверялось на платформе 8.2.15. Для чистоты эксперимента, эскалация блокировок в MS SQL сервере отключена принудительно. Аналогичный эффект в управляемом режиме наблюдается и при использовании СУБД Oracle 11.2 (в автоматическом режиме на Оракле не проверялось по понятной причине).
Собственно вопрос: не попадались ли кому-нибудь комментарии разработчиков на эту тему? Хотелось бы знать, от чего зависит укрупнение блокировки, и нет ли каких-либо настроек сервера, позволяющих увеличить лимит.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37889175
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарегался, код установки управляемой блокировки приведите.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37889398
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitriyZЗарегался, код установки управляемой блокировки приведите.

Управляемую блокировку явным образом не устанавливаю. Неявная блокировка устанавливается при записи набора. При этом абсолютно не важно записывается набор из модуля проведения документа или внешней обработкой в транзакции, поведение менеджера блокировок в обоих случаях одинаково.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37890038
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗарегалсяDmitriyZЗарегался, код установки управляемой блокировки приведите.

Управляемую блокировку явным образом не устанавливаю. Неявная блокировка устанавливается при записи набора. При этом абсолютно не важно записывается набор из модуля проведения документа или внешней обработкой в транзакции, поведение менеджера блокировок в обоих случаях одинаково.
1) Укажете релиз платформы.
2) Укажите количество записей в регистре.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37890424
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitriyZ,

1) Проверял на 8.2.15.289 и 8.2.15.310.
2) Проверял на типовом регистре "УчетЗатратРегл" из УПП с 30 миллионами записей и на тестовом регистре с 1 измерением ссылочного типа, заполненным 11 миллионами уникальных значений. В первом случае блокировка возникает при 30 тысячах записей в наборе, во втором 30 тысяч отрабатывают нормально, а на 90 регистр блокируется.
Тестировал в 2 сеансах обработкой с простейшим кодом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	Набор = РегистрыНакопления.ПростоРегистр.СоздатьНаборЗаписей();
	Набор.Отбор.Регистратор.Установить(Регистратор);
	Набор.Прочитать();
	
	Для каждого Запись Из Набор Цикл
		Запись.Количество = Запись.Количество + 1;
	КонецЦикла;
	
	НачатьТранзакцию();
		Набор.Записать();
		Ответ = Вопрос("Зафиксировать транзакцию?", РежимДиалогаВопрос.ОК);
	ЗафиксироватьТранзакцию();
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37890855
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарегался, а если, ради эксперимента, перед чтением набора установить управляемую блокировку по регистратору?
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37891105
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitriyZЗарегался, а если, ради эксперимента, перед чтением набора установить управляемую блокировку по регистратору?

Сделал так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	Блокировка = Новый БлокировкаДанных;
	ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ПростоРегистр.НаборЗаписей");
	ЭлементБлокировки.УстановитьЗначение("Регистратор", Регистратор);
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	
	НачатьТранзакцию();
		Блокировка.Заблокировать();
		
		Набор = РегистрыНакопления.ПростоРегистр.СоздатьНаборЗаписей();
		Набор.Отбор.Регистратор.Установить(Регистратор);
		Набор.Прочитать();
		
		Для каждого Запись Из Набор Цикл
			Запись.Количество = Запись.Количество + 1;
		КонецЦикла;
	
		Набор.Записать();
		Ответ = Вопрос("Зафиксировать транзакцию?", РежимДиалогаВопрос.ОК);
	ЗафиксироватьТранзакцию();



К сожалению, начать транзакцию пришлось переставить немного пораньше, вследствие чего теперь скуль ругается на блокировку при выполнении Набор.Прочитать(). Оракла под рукой сейчас нет, так что для продолжения эксперимента видимо придется еще немного вправить мозги богомерзкому отродью MS.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37891186
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался в чем проблема с блокировкой чтения. Оказывается после переключения режима блокировки у конфигурации с управляемого на автоматический и обратно, у базы данных сбросился параметр READ_COMMITTED_SNAPSHOT.
В общем код с явной блокировкой по регистратору работает так же как и без нее. На 90 тысячах записей тестового регистра блокируется всё.
Это явная дискриминация пользователей Оракла и, возможно, ПГ. В автоматическом режиме блокировок эти базы неюзабельны, а в управляемом разработчики платформы сделали такую "оптимизацию". При чем, скорее всего, те кто юзает MS SQL даже не замечают этот баг, т.к. на уровне СУБД при дефолтных настройках эскалация блокировок настигает их еще раньше.
Остается только уповать на 8.3, в ближайшее время попробую провести тесты на ней, но надежда слабая.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37891564
olegves
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарегался,
а разве ты не читал, что 1С в Оракле блокирует всю таблицу (как было в 77), а не конкретные записи.
Потому для оракула только управляемые блокировки.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37891622
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olegvesЗарегался,
а разве ты не читал, что 1С в Оракле блокирует всю таблицу (как было в 77), а не конкретные записи.
Потому для оракула только управляемые блокировки.

В общем-то про это и топик. Но все равно спасибо за up.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37891815
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарегался, как именно работатет мнеджер блокировок информации нет (черный ящик). Видимо, при достижении некого порогового значения, система считает, что проще заблокировать всю таблицу. Если есть возможность, лучше отправить описание проблемы на v8@1c.ru есть вероятность, что они ответят и посоветуют решение. Пару раз мне рекомендовали решения, которые устроили (как раз проблема была связана с управляемыми блокировками).
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37899667
saaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как ты умудрился в регистратор 30 миллионов записей запихать?
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37899993
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saakenа как ты умудрился в регистратор 30 миллионов записей запихать?

Вообще-то 30 миллионов - это всего в регистре, а у одного регистратора записей поменьше (в моем примере 90 тысяч). Но ничто не должно мешать сделать сколь угодно большое число записей и у одного регистратора.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37906205
Walkabout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас та же фигня. До этого жили на релизе 8.2.14.533 уперлись во всеобъемлющую блокировку таблицы при записи больше 20000 записей в наборе регистра бухгалтерии. При этом если записи дописывать частями по 19999 штук, то регистр не блокируется. Но вот чтобы отменить проведение документа с таким количеством записей никуда не денешся уже.

С релизом 8.2.15.319 что-то стало работать по другому. Даже порционная запись стала блокировать всю таблицу.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37906730
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WalkaboutУ нас та же фигня. До этого жили на релизе 8.2.14.533 уперлись во всеобъемлющую блокировку таблицы при записи больше 20000 записей в наборе регистра бухгалтерии. При этом если записи дописывать частями по 19999 штук, то регистр не блокируется. Но вот чтобы отменить проведение документа с таким количеством записей никуда не денешся уже.

С релизом 8.2.15.319 что-то стало работать по другому. Даже порционная запись стала блокировать всю таблицу. настоятельно рекомендую написать на v8@1c.ru иначе разарботчики из 1С будут думать, что у них все хорошо и ничего исправлять не будут. Скорее всего на ваших данных проявляется эта особенность.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37907407
Walkabout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поэкспериментировали сегодня, получается, что начиная с 8.2.15 релиза полностью блокируется таблица регистра бухгалтерии при записи набора с количеством проводок больше 10000 (в 8.2.14 было 20000). Т.е. если писать порциями по 9999 штук, то все ок.

Мы предусмотрительно вынесли это количество параметром в константу. Так что осталось просто поменять его с 20000 на 10000
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37907416
Walkabout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кто экспериментировал с регистрами накопления/сведений/расчета напишите плиз есть ли на них такие ограничения и какие они?
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37907553
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не связано ли это с режимом разделяемых итогов?
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37908046
Walkabout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не думаю, без них в принципе сложно что либо параллельно записывать в базу. Поэтому при сильно большой пользовательской нагрузке он как бы по умолчанию уже включен
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37908048
Walkabout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще как оказалось в 8.2.15 количество проводок, которое при записи в транзакции укрупняет блокировку нужно считать с учетом удаляемых в этой же транзакции записей. Т.е. Если перепроводится документ в котором например до перепроведения уже было 6000 проводок, то при записи 4000 новых в процессе проведения, даже если записи дописываются частями, регистр полностью заблокируется. Т.е. Считается суммарное количество ключей блокировки в одной транзакции на менеджере блокировок
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37908159
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WalkaboutНе думаю, без них в принципе сложно что либо параллельно записывать в базу. Поэтому при сильно большой пользовательской нагрузке он как бы по умолчанию уже включен Без них, это без кого?

WalkaboutЕще как оказалось в 8.2.15 количество проводок, которое при записи в транзакции укрупняет блокировку нужно считать с учетом удаляемых в этой же транзакции записей. Т.е. Если перепроводится документ в котором например до перепроведения уже было 6000 проводок, то при записи 4000 новых в процессе проведения, даже если записи дописываются частями, регистр полностью заблокируется. Т.е. Считается суммарное количество ключей блокировки в одной транзакции на менеджере блокировок Что-ли или у меня утро не доброе или... не пойму я о чем вы.

"записи дописываются частями" - ?

"Считается суммарное количество ключей блокировки в одной транзакции на менеджере блокировок" - о каком менеджере блокировок идет речь: о том, что работает в MS SQL(тогда, это вопрос эскалации блокировок) или о том, что в сервере приложений(он такое умеет, где прочли?).

"Еще как оказалось в 8.2.15 количество проводок, которое при записи в транзакции укрупняет блокировку нужно считать с учетом удаляемых в этой же транзакции записей. "
Это не в 8.2.15 а в самом ядре MS SQL. Опять же, это эскалация блокировок. На это 1С никак не может повлиять, это определяется самим MS SQL Server`ом. Зависит от многих причин - индексов, расмазанности данных по страницам... объема данных.


В документации (к MS SQL) механизм эскалации описан "не прозрачно". Где-то говорится о том, что эскалация с записи до страницы происходит при 5 000 блокировок, где-о говорится, что не 5 тыс. а больше... где-то, говорится, что эскалация сразу со страницы поднимается на таблицу...
Так же, эскалация будет тогда, когда заканчивается буфер для блокировок. Тогда будет эскалация до таблицы.
Это ситуации, когда уровень блокировки может повышаться в процессе выполнения запроса. Не транзакции, а запроса.
Ну и естественно, многое зависит от того, как MS SQL сформирует план выполнения запроса - это определяет уровень изоляции до выполнения запроса.
В принципе, можно запретить повышать уровень блокировки при эскалации(через флаги трассировки) но сама MS этого очень не рекомендует делать, т.к. в таком случае высока вероятность постоянных дэдлоков.



P.S.
Для того, что бы эта тема не превратилась в ПТ, нужно описывать конфигурацию вашего SQL сервера и базы данных в нем (режим востановления базы данных, наличие планов обслуживания, состояние данных в MS SQL на момент опытов... )

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

Как сконфигурирована база 1С, включен ли полнотекстный поиск, RLS, версионирование...

Было бы не плохо описать что происходит при работе с клиента и с сервера. Что бы понимать влияние канала связи...


А так, это сравнение сферичеких баз в вакууме.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37908163
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, еще было бы хорошо видеть состояние свопа, обмена с жестким диском(среднюю длинну очереди) и иметь информацию о конфигурации дисковой подсистемы.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37908511
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The Dim!wall of text

Ответы на большую часть ваших вопросов написаны в постах выше, начиная с первого. Может быть стоит сначала внимательно почитать? Особое внимание советую обратить на первый пост. Например "эскалация отключена принудительно" и "Oracle" - это явно подразумевает, что стену текста о том как работает эскалация на уровне СУБД можно было опустить.
Кстати в документации очень четко описано как она работает в MS SQL, и как её можно поднастроить или отключить вовсе.
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37908538
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да.. ну да... только вот, наверное, читать нужно было между строк и с ХШ...
Удачи в изысканиях.

P.S.
Прежде чем говорить кому-то, что стоит внимательно читать, может самому стоит последовать своему же совету , а ;)
...
Рейтинг: 0 / 0
Как работает менеджер блокировок?
    #37910583
Walkabout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема про эскалацию блокировок именно на сервере приложений 1С. Когда менеджер блокировок сервера 1С повышает уровень блокировки на всю таблицу, то запросы на сервер баз данных даже не передаются. И тогда уже совсем не важно Oracle там или SQL
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Как работает менеджер блокировок?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]