![]() |
![]() |
![]() |
|
Блокировки из-за запроса | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |