|
Как создать конфликт блокировок? | ☑ | ||
---|---|---|---|---|
0
Lex_Liven
07.11.12
✎
06:59
|
Всем утро.
Имею в рабочей базе довольно частую ошибку "Конфликт блокировок при выполнении транзакции". Это неудивительно - там работает 50 пользователей, а блокировки автоматические. Вопрос вот в чем: как повторить эту ошибку в тестовой базе, где сижу я один? Тестовая база на том же сервере, что и рабочая - Win 2003x64, SQL 2005, 1C 8.2.15.310. P.S.: (не главный вопрос) Где почитать про управляемые блокировки? Много придется переписывать, чтобы перейти на них? |
|||
1
Wist
07.11.12
✎
07:01
|
(0) а что за база?
|
|||
2
Wist
07.11.12
✎
07:01
|
(1) + в смысле, что за конфа?
|
|||
3
Lex_Liven
07.11.12
✎
07:04
|
(1)(2) Наполовину, если не больше, переписанная УТ 10.
|
|||
4
Zaval
07.11.12
✎
07:05
|
(0) Ставь ЦентрУправленияПроизводительнстью - осторожно, с учетом всех рекомендаций - получишь ответ с точностью до Процедуры()
ЗЫ. Только не умничай( |
|||
5
Lex_Liven
07.11.12
✎
07:13
|
(4) Это совет к чему? К постскриптуму? А по главной теме?
|
|||
6
Рэйв
07.11.12
✎
07:15
|
||||
7
Живой Ископаемый
07.11.12
✎
07:18
|
2(0) Запускаешь два сеанса, ставишь в модуле проведения расходной точку останова, после того как получил остатки для проведения (то есть останавливаешь внутри транзакции)
во втором сеансе (без отладки) тоже пытаешься провести реализацию с теми же товарами с того же склада. Вот она должна споткнуться об блокировку. |
|||
8
Zaval
07.11.12
✎
07:23
|
(5) Епт, а ты сам как думаешь?
При работе юзеров пару минут собираешь данные и видишь, какая процедура конфы(при реальной частоте ее вызовов) больше всего грузит систему. У тебя нет ни малейшего представления, кто тебя трахает, а ты уже с понтами лекарство ищешь. |
|||
9
Живой Ископаемый
07.11.12
✎
07:27
|
2(8) ну и например окажется что больше всего грузит систему Запрос.Выполнить() который выполняется в мониторе руководителя или при открытии какого-нибудь журнала.
Если он не станет выполнять этот код, конфликт блокировок не повторится/станет реже? |
|||
10
Lex_Liven
07.11.12
✎
07:45
|
(8) Я не ищу, кто грузит систему, я точно знаю, где возникает блокировка. Я хочу повторить ее в базе с одним пользователем.
И с понтами здесь только вы один. (7) Пытаюсь. По результатам отпишусь. |
|||
11
Прохожий
07.11.12
✎
07:46
|
(0) Зачем?
|
|||
12
Живой Ископаемый
07.11.12
✎
07:47
|
2(10) с одним не выйдет. Нужно с двумя...
Или с одним и фоновым заданием, которое выполняе т обмен например.. В общем должно быть двое. |
|||
13
Lex_Liven
07.11.12
✎
07:49
|
(12) Ну это понятно, я имею в виду, что с базой работаю я один.
|
|||
14
ДенисЧ
07.11.12
✎
07:57
|
(12) С чого бы? Два сеанса под одним юзверем и ага.
|
|||
15
Живой Ископаемый
07.11.12
✎
08:09
|
(14) ну да, два сеанса, короче. :)
|
|||
16
vde69
07.11.12
✎
08:20
|
делаешь так
1. заводишь константу "Тестовый функционал" 2. в модуле проведения Если Константы.ТестовыйФункционал.Получить() Тогда Вопрос("Остановка в проведении"); конечно все это можно сделать покультурнее и пошустрее, но думаю смысл понятен... самое интересное что констаной можно будет баловатся и на рабочей :) |
|||
17
Fragster
гуру
07.11.12
✎
08:47
|
"а блокировки автоматические"... конфа - адская самописка? тогда не поможет...
|
|||
18
Fragster
гуру
07.11.12
✎
08:48
|
переход на управляемые
|
|||
19
Fragster
гуру
07.11.12
✎
08:48
|
(16) тогда будет не взаимоблокировка, а таймаут
|
|||
20
Fragster
гуру
07.11.12
✎
08:49
|
взаимоблокировка - делаешь запрос на 1 регистр, паузу через предупреждение или там отладчиком, запрос на другой регистр. в другом сеансе - запрос на регистр 2 (в первом сеансе сейчас снимаешь паузу), запрос на регистр 1
|
|||
21
Fragster
гуру
07.11.12
✎
08:50
|
вместо второго запроса - запись набора, да. или второй запрос "для изменения" на автоматических блокировках, а первый - нет
|
|||
22
miklenew
07.11.12
✎
08:55
|
1) Делаеш новый регистр сведений с одним измерением.
Заводиш в него две записи "1" и "2" 2) Две обработки Текст первой Процедура КнопкаВыполнитьНажатие(Кнопка) НачатьТранзакцию(); НаборЗаписей = ВыбратьЗапись("1"); Предупреждение("Остановка", 30, "Остановка"); НаборЗаписей.Записать(); ВыбратьЗапись("2"); ЗафиксироватьТранзакцию(); КонецПроцедуры Функция ВыбратьЗапись(Значение) НаборЗаписей = РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Измерение1.Установить(Значение); НаборЗаписей.Прочитать(); возврат НаборЗаписей; //НаборЗаписей.Записать(); КонецФункции Текст второй Процедура КнопкаВыполнитьНажатие(Кнопка) НачатьТранзакцию(); НаборЗаписей = ВыбратьЗапись("2"); Предупреждение("Остановка", 30, "Остановка"); НаборЗаписей.Записать(); ВыбратьЗапись("1"); ЗафиксироватьТранзакцию(); КонецПроцедуры Функция ВыбратьЗапись(Значение) НаборЗаписей = РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Измерение1.Установить(Значение); НаборЗаписей.Прочитать(); возврат НаборЗаписей; //НаборЗаписей.Записать(); КонецФункции 3) Запускаеш два сеанса. 1 сеанс - 1 обработка 2-сеанс - 2 обработка Выскакивают предупреждения. Жмём ок. Система уходит на несколько секунд в ступор. А потом выкидывает сообщение о блокировки |
|||
23
Lex_Liven
07.11.12
✎
09:56
|
Пардон, Конфликт блокировок происходит не в 1С, а в скуле.
|
|||
24
GANR
10.11.12
✎
19:57
|
(0) В коде сразу после действия БлокировкаДанных.Заблокировать() ставишь точку останова, доводишь программу до нее, запускаешь ещё 1 сеанс в нем делаешь обращение к заблокированным данным и... приплыли
|
|||
25
hohol
10.11.12
✎
21:22
|
а нафиг этот цирк? Итак известно, что партии тормозят.
|
|||
26
lepesha
10.11.12
✎
22:11
|
Как автоматические ни исследуй - толка не будет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |