Транзакция и память

1. user1166203 20.08.19 15:12 Сейчас в теме
Добрый день.
Есть код

Таблица = Запрос.Выполнить().Выгрузить();//Тут запрос для получения обрабатываемых данных, строк от 100 000
	
Для каждого Строка из Таблица Цикл
		
	НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
	ПровестиДокументПоРегиструВзаиморасчетовПоСчетам(Строка.Ссылка);//Обработка строки данных. Допустим, запись регистра
	ЗафиксироватьТранзакцию();
		
КонецЦикла;
Показать


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

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

Вопрос: что происходит с памятью (и с памятью ли) без транзакции, а что фиксация транзакции заставляет сервер сделать с памятью или каким-то счетчиком?
PS Таблица или выборка - не вопрос данной темы.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dmurk 20.08.19 15:18 Сейчас в теме
(1) Добавьте скриншоты:
а) свойств кластера
б) свойств рабочего сервера
5. user1166203 20.08.19 15:41 Сейчас в теме
(3)
ПРикрепил.
Прикрепленные файлы:
14. dmurk 20.08.19 17:50 Сейчас в теме
(5) За прекращение выполнения не внутри транзакции в вашем случае отвечает параметр "Безопасный расход памяти за один вызов". Одним вызовом считается последовательность действий любой длительности, которая передана с клиента на сервер и не возвращена на клиент. Для обращений к серверу, у которых функция ТранзакцияАктивна() возвращает Истина, параметр безопасного расхода игнорируется. Высвобождение памяти сервером происходит только после возврата вызова на клиент.

Варианты решений.
1. Получить на клиент общий план выполнения, затем выполнять обработку данных порционно, передавая с клиента на сервер ту часть задачи, которую необходимо обработать
2. Создать регистр сведений либо последовательность, в которой будет отражаться состояние проведения цепочек документов (лучше РС), после чего выполнять проведение документов итеративно без передачи плана обработки на клиент, опираясь на данные регистра / последовательности
3. Вернуть параметр "Безопасный расход памяти за один вызов" в дефолтное значение (плохой вариант)
Дмитрий74Чел; +1 Ответить
4. nomad_irk 81 20.08.19 15:19 Сейчас в теме
(1)ТЖ по событиям EXCP чего говорит, когда "сервер отцепляет сеанс"?
7. user1166203 20.08.19 15:54 Сейчас в теме
(4)

'src\VResourceInfoBaseImpl.cpp(1176):580392e6-ba49-4280-ac67-fcd6f2180121: Неспецифицированная ошибка работы с ресурсомОшибка при выполнении запроса POST к ресурсу /e1cib/logForm:e0417abc-63b4-461b-b1b6-01d2d2b0cca5: На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто''src\VResourceInfoBaseImpl.cpp(1176):580392e6-ba49-4280-ac67-fcd6f2180121: Неспецифицированная ошибка работы с ресурсомОшибка при выполнении запроса POST к ресурсу /e1cib/logForm:e0417abc-63b4-461b-b1b6-01d2d2b0cca5: На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто'

03:27.124021-0,EXCP,2,process=rphost,p:processName=t2019,OSThread=13236,t:clientID=66,t:applicationName=1CV8C,t:computerName=1C1,t:connectID=54042,SessionID=1234,Usr=ГолевВМ,AppID=1CV8C,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src\VResourceInfoBaseImpl.cpp(1176):580392e6-ba49-4280-ac67-fcd6f2180121: Неспецифицированная ошибка работы с ресурсомОшибка при выполнении запроса POST к ресурсу /e1cib/logForm:e0417abc-63b4-461b-b1b6-01d2d2b0cca5: На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто'
13. nomad_irk 81 20.08.19 17:50 Сейчас в теме
(7) в качестве бреда, конечно, но все же: Тестирование и исправление выполняли?
Битые ссылки/логическая целостность/итоги - все это в норме?

Почему вы ищите проблемы именно с памятью?
15. user1166203 21.08.19 08:52 Сейчас в теме
(13)
Не выполняли. База свежая с января. Ошибка возникала и в самом начале на абсолютно других данных (регистра, который обрабатывали в этот раз еще даже не существовало)
Почему в памяти - на копии ошибка не воспроизводится ввиду отсутствия пользователей. Подумаем над ТиИ.
16. DJDUH 17 21.08.19 10:22 Сейчас в теме
(1)
Таблица = Запрос.Выполнить().Выгрузить();
//Тут запрос для получения обрабатываемых данных, строк от 100 000

Скорее всего память сыпится на этом месте!

переделайте на:

Выборка = Запрос.Выполнить().Выбрать();
//и транзакцией обернуть цикл, а не в цикле

17. user1166203 21.08.19 10:43 Сейчас в теме
(16)
Прочитайте, пожалуйста, постскриптум в вопросе.
С транзакцией в цикле все отлично отрабатывает.
2. VmvLer 20.08.19 15:16 Сейчас в теме
транзакция вне цикла "пухнет".
что происходит, когда надувать грелку?
лопнет либо грелка, либо легкие.

посему рационально использовать насос.

а память/не память - от лукавого
6. user1166203 20.08.19 15:46 Сейчас в теме
(2)
Не понял вас.
collider; nomad_irk; +2 Ответить
8. nomad_irk 81 20.08.19 16:07 Сейчас в теме
В свойствах конфигурации какой режим управления блокировками установлен?
9. user1166203 20.08.19 16:51 Сейчас в теме
(8)
Управляемый, конечно. Только они тут причем? Вне транзакции ошибка вылазит.
10. nomad_irk 81 20.08.19 16:56 Сейчас в теме
(9)при том, что если в конфигурации установлено в Авто, то будет в Авто, если не указывать параметр транзакции, а если установлено Управляемый, но при этом не устанавливать сами блокировки, то будет равносильно режиму Авто.
11. user1166203 20.08.19 17:36 Сейчас в теме
(10)
И как это влияет на отключение сеанса вне транзакции?
12. nomad_irk 81 20.08.19 17:38 Сейчас в теме
(11) в вашем случае - никак, т.к. в обоих случаях управление блокировками управляемое.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот