Имя: Пароль:
1C
1С v8
Блокировки из-за запроса
0 kisskiss
 
25.02.13
11:43
Есть отчет. Если его запускают несколько пользователей, то возникает конфликт блокировок. В отчете нигде нет явных транзакций и блокировок. Если запустить отчет в консоли запросов, то SQL Management Studio в Activity Monitor показывает, что выполняется INSERT, а затем DROP TABLE.
Почему запрос вызывает какие-то инсерты. Как может запрос привести к блокировкам?
Запрос примерно такой:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Таблица.Сценарий КАК ПодСценарий,
   НАЧАЛОПЕРИОДА(Таблица.Период, НЕДЕЛЯ) КАК Период,
   Таблица.Счет,
   Таблица.ДопИзмерение1,
   Таблица.ДопИзмерение2,
   Таблица.Аналитика1,
   Таблица.Аналитика2,
   Таблица.ЦФО,
   Таблица.КорСчет,
   Таблица.СуммаОборотКт КАК Сумма
ИЗ
   РегистрБухгалтерии.Инт_Управленческий.Обороты(&НачГраница, &КонГраница, неделя, Счет В ИЕРАРХИИ (&Счет), КучаУсловийНаИзмерения, ) КАК Таблица
1 mikecool
 
25.02.13
11:44
(0) батюшку вам вызвать надо... ибо это не отчет, а может обработка какая?
2 kisskiss
 
25.02.13
11:45
(1) Нет это отчет. Никакие данные не изменяются. INSER возникает именно при запросе
3 Fragster
 
гуру
25.02.13
11:45
Счет В ИЕРАРХИИ (&Счет) замени на счет в списке
4 Sorm
 
25.02.13
11:46
(2) А после Insert нет ли там значка # ?
5 mikecool
 
25.02.13
11:48
(4) думаешь создание ВТ может наложить блокировки на данные?
6 Maxus43
 
25.02.13
11:49
странно... РЛС тоже не должна влиять на блокировки
7 kisskiss
 
25.02.13
11:50
(3) как это может помочь?
(4) вот это то что я вижу:
http://pikucha.ru/ianhz
Решетки нет, если надо в другом месте глянуть, подскажите плиз где именно
8 Fragster
 
гуру
25.02.13
11:51
(7) закрой активити монитор, открой профайлер
9 Fragster
 
гуру
25.02.13
11:51
а вообще можно затроллить и поставить в шаблоны RLS ДЛЯ ИЗМЕНЕНИЯ :)
10 Maxus43
 
25.02.13
11:52
:)
11 Maxus43
 
25.02.13
11:53
тока ДЛЯ ИЗМЕНЕНИЯ - транзакционная блокировка, в отчетах врятли транзакция открывается
12 kisskiss
 
25.02.13
11:53
(8)Не умею пользоваться профайлером :(
Если можно, расскажи по шагам что в нем нужно делать
13 Sorm
 
25.02.13
11:53
(8)+. Профайлер спасет.
14 kisskiss
 
25.02.13
11:54
(11) в отчете нет транзакций
15 tdm
 
25.02.13
11:54
виртуальная таблица ".Обороты(" - может у вас итоги не подтянуты и приходится их просчитывать ?
16 mzelensky
 
25.02.13
11:54
(0) мне кажется там дело в таблице итогов.
Попробуй убрать "период" из условий виртуальной таблицы. Да и вообще постарайся там оставить ток даты, счет через равенство (а не иерархия) и самые обязательные услвоия (чем меньше, тем лучше)
17 GANR
 
25.02.13
11:56
(0) В какие таблицы идет добавление INSERT-ом ?
18 kisskiss
 
25.02.13
12:00
(15) Управление итогами показывает, что все итоги пересчитаны на конец января
19 kisskiss
 
25.02.13
12:01
(17) как это узнать ?
20 mzelensky
 
25.02.13
12:01
(18) итоги в разрезе НЕДЕЛЬ не хранятся!!! Вот она их тебе и пересчитывает
21 Maxus43
 
25.02.13
12:02
ну пересчитывает, а зачем инсертом то? нафейхуа блокировать? Если инсерт в ВТ идёт - дак и блочить не должно ничего
22 mzelensky
 
25.02.13
12:05
(21) эт уже не ко мне. Сперва нужно разобраться откуда у ошибки ноги ростут, а уже потом пытаться понять почему именно от туда.

(0) ты (16) попробовала?
23 GANR
 
25.02.13
12:07
(19) Кинь запрос(ы) с INSERT в ветку.
24 kisskiss
 
25.02.13
12:08
(22) ага, убрала период , все равно Insert остался
Посмотрела профайлером
Инсерт вот такой, но мне он ни о чем не говорит :(

INSERT INTO #tt438 (_Q_000_F_000_TYPE, _Q_000_F_000_RTRef, _Q_000_F_000_RRRef, _Q_000_F_001RRef) SELECT
T1.Q_001_F_000_TYPE,
T1.Q_001_F_000_RTRef,
T1.Q_001_F_000_RRRef,
T3._Fld14591RRef
FROM (SELECT
T2._Fld14587_TYPE AS Q_001_F_000_TYPE,
T2._Fld14587_RTRef AS Q_001_F_000_RTRef,
T2._Fld14587_RRRef AS Q_001_F_000_RRRef,
MAX(T2._Fld14593) AS Q_001_F_001_
FROM _Reference14448 T2 WITH(NOLOCK)
GROUP BY T2._Fld14587_TYPE,
T2._Fld14587_RTRef,
T2._Fld14587_RRRef) T1
LEFT OUTER JOIN _Reference14448 T3 WITH(NOLOCK)
ON ((T3._Fld14587_TYPE = T1.Q_001_F_000_TYPE AND T3._Fld14587_RTRef = T1.Q_001_F_000_RTRef AND T3._Fld14587_RRRef = T1.Q_001_F_000_RRRef) AND (T3._Fld14593 = T1.Q_001_F_001_))
25 kisskiss
 
25.02.13
12:09
Этот инсерт может вызвать блокировки ?
26 Fragster
 
гуру
25.02.13
12:10
судя по тому, что тут справочник юзается, это таки РЛС поднакакал
27 Fragster
 
гуру
25.02.13
12:10
но все равно инсерт во временную таблицу
28 Fragster
 
гуру
25.02.13
12:11
(25) только на изменение структуры таблиц
29 kisskiss
 
25.02.13
12:15
(28) значит явных блокировок он не должен вызывать.
Ок. Тогда видимо надо запрос упрощать и все остальное из (16) может поможет ...
30 Sorm
 
25.02.13
12:18
(24) Ну как я и предполагал, инсертит во временную таблицу. На это действие вешается исключительная блокировка, но таки она(таблица) является доступной в только в пределах сеанса... А пользователи пишут в разных сеансах. Мораль - блокировка где-то в другом месте.
31 oleg_km
 
25.02.13
15:07
Ну инсерт то из селекта (INSERT ... FROM SELECT) скорее всего блокировка в селекте
32 Fragster
 
гуру
25.02.13
15:09
автор, а у тебя выставлен в свойствах ms sql сервера max degree of parallelism = 1?
33 Maxus43
 
25.02.13
15:13
(32) це не на эскалацию влияет? в данном конкретном случае не вижу что даст этот параметр
34 kisskiss
 
04.03.13
17:41
(32) нет, там ноль стоит
35 Fragster
 
гуру
04.03.13
17:45
(33) бывает (редко, правда), что оно само себя блокирует
(34) поставь 1
36 Serginio1
 
04.03.13
17:57
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший