powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Timeout транзакции ?
21 сообщений из 21, страница 1 из 1
Timeout транзакции ?
    #38031180
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто сталкивался..
внутри транзакции идет формирование документа с кол-вом строк порядка 600 (генерируем строку, привязываем к документу, сохраняем), через некоторое время на очередной строке выполнение прерывается ..ошибка при сохранении. На объеме записей порядка 200 - все ок, транзакция полностью завершается, документ формируется. На больших объемах - падает.
Убираю транзакцию - все 600 строк генерируются, документ формируется без ошибок..
сижу чешу репу..что не так? (могу выложить пример кода)



-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38031218
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка, для начала можете приложить код и текст ошибки
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38031281
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помнится было что то такое, но смысл проблемы вроде сводился к тому что, транзакция была слишком большой, и вся информация по транзакции не умещалась в некий буфер, чтобы потом ее в случае чего откатить.
боролись только уменьшением операций внутри одной транзакции.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38031370
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка ,

Попробуйте:
увеличить таймаут блокировок: Lock Timeout ;

увеличить предел блокировок: Lock Threshold ;

увеличить память для блокировок: locksiz .
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38033994
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorтранзакция была слишком большой, и вся информация по транзакции не умещалась в некий буфер, чтобы потом ее в случае чего откатить.
очень на это похоже

DAiMorборолись только уменьшением операций внутри одной транзакции.
какие именно операции вы имеете ввиду? сохранения?

у меня в этом смысле код примитивный: генерим документ, в цикле создаем строки с привязкой к документу

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
ClassMethod CreateJobCostingWBG(waybillLineIds As %String, companyId As %String, dateOf As %String, contractId As %String, documentId As %String = "") As %String
{
	set sc = $$$OK
	set errMsg = "Ошибка!(CreateJobCostingWBG): "

	quit:waybillLineIds="" errMsg_"отсутствует список путевых листов."
	
	TSTART
	
	if documentId="" {
		quit:companyId="" errMsg_"не указан заказчик(клиент)." 
		quit:contractId="" errMsg_"не указан договор."
		quit:dateOf="" errMsg_"не указана дата расчета."  

		;создаем шапку документа
		set res = ##class(doc.calc.JobCostingWBG).CreateDocument(companyId, dateOf, contractId, .Document)
		quit:$get(res)'="" errMsg_$c(13)_$c(10)_res
	
	} else {
		set Document = ##class(doc.calc.JobCostingWBG).%OpenId(documentId)
		quit:$get(res)'="" errMsg_$c(13)_$c(10)_"Не удалось открыть документ."
		set dateOf = Document.CalcDate
		quit:dateOf="" errMsg_"не указана дата расчета."  
	}
	
	for k = 1:1:$LENGTH(waybillLineIds,",") {
		set waybillId = $PIECE(waybillLineIds,",",k)
		if waybillId'="" {
			set res2 = ##class(doc.calc.JobCostingWBG).CreateDocLine(Document,waybillId,dateOf)
			set:$get(res2)'="" errMsg = errMsg_$c(13)_$c(10)_res2
			goto:$get(res2)'="" errCreateJobCostingWBG
		}
	}
	
	TCOMMIT
	quit ""

errCreateJobCostingWBG
	TROLLBACK
	quit errMsg
}

...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38034000
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit
Попробуйте:
увеличить таймаут блокировок: Lock Timeout ;

увеличить предел блокировок: Lock Threshold ;

увеличить память для блокировок: locksiz .


попробую, только непонятно до каких размеров увеличивать значения.
сейчас видимо выставлено все по умолчанию:
Lock Timeout = 10
Lock Threshold = 1000
locksiz = 1179648
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38034063
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно могло упереться в максимальное количество блокировок, но должно быть сообщение в cconsole.log
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38034167
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аленочка,

GenericHeapSize (gmheap) тоже можно попробовать увеличить.
locksiz
Size (in bytes) of memory allocated for locks. The system rounds up the value to the next multiple of 64 kilobytes. The default is 1179648 bytes. (On the HP platform, the default is four times the usual default – 1179648*4 (4718592 bytes).) The range is 65536 bytes up to the gmheap size. If you need more room for the lock table, increase the GenericMemoryHeap size as well .
If you edit this setting, you must restart Caché to apply the change.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38034849
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много лет назад проблема ограниченной памяти под блокировки уже обсуждалась с сотрудниками IS. Сначала c их стороны был контраргумент: плохо проектируете БД:) Вероятно, и Вам они сейчас сказали бы то же самое. То есть, в данном примере - блокируйте документ, а не записи, например (ведь записей может быть и 6000, и Ваши манипуляции с настройками ничего не дадут). Но, когда были приведены практические примеры, они пообещали увеличить максимальный размер оперативной памяти под блокировки. Это один из типичных примеров борьбы за производительность:) Размещать блокировки в глобали они категорически отказались, даже в режиме настройки.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38035374
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хрен бы с ним, документы и проектирование базы. Но апдейт больших таблиц без %nolock вообще не проходит.
Тут уже вопрос к проектированию каше.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38035443
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Хрен бы с ним, документы и проектирование базы. Но апдейт больших таблиц без %nolock вообще не проходит.
Тут уже вопрос к проектированию каше.
Если Вы под Cache понимаете, в данном случае, систему, управляющую "таблицами", то разработчику этой системы, конечно, уже труднее сказать "не правильно проектируете". Но он скажет, вероятно, "не правильно используете: блокируйте всю таблицу, а не каждую запись":)
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38035588
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update через sql автоматически блокирует каждую запись, если это принудительно не отключить.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38035638
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если расшифровать текст ошибки, то вот что пишет:

---------------------------
Сообщение с веб-страницы
---------------------------
Ошибка!(CreateJobCostingWBG):

ОШИБКА #5803: Не удалось получить эксклюзивную блокировку
---------------------------
ОК
---------------------------
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38035653
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас по этой ошибке предпринимали:

GenericHeapSize (gmheap) * 3
LockTableSize (locksiz) * 3

Попробуйте
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38035892
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.update через sql автоматически блокирует каждую запись, если это принудительно не отключить.
Все это мало кого интересует. Автору темы важно, чтобы в данном конкретном случае как-то проскочило:)
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38036065
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и необязательно речь идет об sql update. Можно получить ту же ошибку, например, просто сохраняя объекты в транзакции
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38036600
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БредятинаВсе это мало кого интересует. Автору темы важно, чтобы в данном конкретном случае как-то проскочило:)
Ну собственно, ответ ясен - менять логику программы. Создание документа должно быть основано не на транзакции, а на статусах.
Т.е. присваиваем документу "черновой" статус, лочим документ и вперед, без всяких транзакций. Если вдруг документ остался в неправильном статусе - значит с ним ошибка и надо откатывать.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38036897
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.БредятинаВсе это мало кого интересует. Автору темы важно, чтобы в данном конкретном случае как-то проскочило:)
Ну собственно, ответ ясен - менять логику программы. Создание документа должно быть основано не на транзакции, а на статусах.
Т.е. присваиваем документу "черновой" статус, лочим документ и вперед, без всяких транзакций. Если вдруг документ остался в неправильном статусе - значит с ним ошибка и надо откатывать.
Почему создание. И редактирование тоже.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38037304
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.БредятинаВсе это мало кого интересует. Автору темы важно, чтобы в данном конкретном случае как-то проскочило:)
Ну собственно, ответ ясен - менять логику программы. Создание документа должно быть основано не на транзакции, а на статусах.
Т.е. присваиваем документу "черновой" статус, лочим документ и вперед, без всяких транзакций. Если вдруг документ остался в неправильном статусе - значит с ним ошибка и надо откатывать.
Потом понадобится удалить документ, и, возможно, выпадет та же ошибка
Например, если Аленочка использует RelationShip типа Parent-Children
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38040827
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.update через sql автоматически блокирует каждую запись, если это принудительно не отключить.
Каше блокирует одиночные записи до определенного значения (threshold), после которого блокирует весь глобал.
Управляется через
Код: sql
1.
d $system.SQL.SetLockThreshold(sqlLockTreshhold, .oldSqlLockTreshhold)


По умолчанию если через sql или объектный доступ обновляется более 1000 записей, то блокируется весь глобал.
Единственное эта система плохо работает с наследованием, специалисты IS предложили в том случае отказаться от использования блокировок и вручную блокировать самим записи.
...
Рейтинг: 0 / 0
Timeout транзакции ?
    #38040956
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosБлок А.Н.update через sql автоматически блокирует каждую запись, если это принудительно не отключить.
Каше блокирует одиночные записи до определенного значения (threshold), после которого блокирует весь глобал.
Управляется через
Код: sql
1.
d $system.SQL.SetLockThreshold(sqlLockTreshhold, .oldSqlLockTreshhold)


По умолчанию если через sql или объектный доступ обновляется более 1000 записей, то блокируется весь глобал.
Единственное эта система плохо работает с наследованием, специалисты IS предложили в том случае отказаться от использования блокировок и вручную блокировать самим записи.
Небольшая путаница:) Между MUMPS (таблица блокировок относится именно к MUMPS) и одной из систем обработки и хранения данных (Cache), написанной на MUMPS.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Timeout транзакции ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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