|
Транзакции и Для изменения | ☑ | ||
---|---|---|---|---|
0
wladimir90
04.10.12
✎
09:35
|
Добрый день.
Есть некий независимый регистр сведений в который записывают данные ряд документов. Раз в минуту данные регистра считываются и модифицируются во время обмена данными. Однажды во время исполнения запроса на считывание данных (во время Выполнить()) вышла ошибка "Конфликт блокировок при выполнении транзакции... Не удалось продолжить просмотр с NOLOCK вследствие перемещения данных.". Как я понимаю ошибка возникла из за того что считывания данных из регистра пошло в тот самый момент когда некий документ производил в него запись. Если я в текст запроса обмена вставлю Для изменения - решит ли это проблему? Или если я включу транзакцию на время выполнения обмена? |
|||
1
МихаилМ
04.10.12
✎
09:46
|
||||
2
wladimir90
04.10.12
✎
09:51
|
(1) Будет ли выходом применить такую конструкцию прямо перед выполнением запроса?:
Пока ТранзакцияАктивна() Цикл КонецЦикла; |
|||
3
МихаилМ
04.10.12
✎
09:58
|
(2)
не знаю. я бы сначала воспользовался советом в (1) |
|||
4
pavig
04.10.12
✎
10:03
|
(0) Для Изменения не решит проблему, так как Для Изменения срабатывает только если запрос выполняется во время транзакции записи
|
|||
5
1Страх
04.10.12
✎
10:04
|
(4) просто транзакции, разве нет?
|
|||
6
wladimir90
04.10.12
✎
10:05
|
(3) Там сказано "отправьте запрос повторно" - то что я написал в (2) делает нечто подобное. Не отправляет заново, но ждет завершения всех транзакций на сервере. С другой стороны можно в цикл "пока" с обработкой исключения включить выполнить().
Фраза "удалите подсказку блокировки NOLOCK" непонятна вообще. |
|||
7
pavig
04.10.12
✎
10:10
|
(6) а вот это может и прокатить
|
|||
8
pavig
04.10.12
✎
10:11
|
(7) хотя.... транзакции могут происходиьт постоянно, необходимо чтобы они становились в очередь если я правильно понимаю....
|
|||
9
pavig
04.10.12
✎
10:16
|
(5) если не в транзакции записи, то заблокируется исключительно на время выполнения запроса; если в транзакции записи, то на все время выполнения транзакции...
(0) выход - перевод на упр блокировки плана обмена, выполнение записи в этот регистр порциями по немногу записей чтобы ожидание транзакцией чтения транзакции записи не превышало допустимый временной интервал |
|||
10
wladimir90
04.10.12
✎
10:23
|
(8) Тоже об этом подумал - если организация разрастется до нормального количества пользователей, то 1с из транзакций будет выходить в лучшем случае только во время обеда.
(9) Т.е. включить код обмена в транзакцию с управляемым режимом блокировок? |
|||
11
pavig
04.10.12
✎
10:30
|
(10) для начала все же попробуй разбить записываемые наборы на пачки по нескольку записей (несколько сот, несколько тысяч - я не могу кнкретно подсказать по скольку разбивать, надо анализировать опытным путем), потом - в упр режим блокировок (это гораздо более трудоемко чем первая часть, потому что просто НачатьТранзакцию(УпрРежим) не прокатит, выдаст ошибку: надо будет переводить регистр, а вместе с регистром - документы, которые делают записи в этот регистр, а еще перед этим изменить свойство конфы в Автом и Упр Режим, кроме этого, скорее всего, придется перевести план обмена (если используете его) в упр режим, а если переводим план обмена, то и все участвующие в нем объекты тоже должны быть в упр режиме. чтобы весь обмен заработал в упр режиме - и все это ради одного регистра...)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |