|
Блокировки | ☑ | ||
---|---|---|---|---|
0
serianomer
13.07.11
✎
11:42
|
Добрый день. Подскажите, пожалуйста, кто может сталкивался
|
|||
1
ДенисЧ
13.07.11
✎
11:42
|
никто
|
|||
2
butterbean
13.07.11
✎
11:43
|
может быть
|
|||
3
Maxus43
13.07.11
✎
11:43
|
Я, у меня сегодня дверь заблокировало...
|
|||
4
serianomer
13.07.11
✎
11:45
|
упс.
) при проведении документа1 в обработкеПроведения стоит преждупреждение("1") и поэтому при проведении нельзя зайти в 1С и провести другие документы если поставить такое же предупреждение в модуль другого документа работа другого пользователя не блокируется |
|||
5
Maxus43
13.07.11
✎
11:45
|
при проведении документа1 в обработкеПроведения
стоит преждупреждение("1") О_о |
|||
6
Fragster
гуру
13.07.11
✎
11:45
|
нафейхуа предупреждение в обработке проведения?
|
|||
7
serianomer
13.07.11
✎
11:46
|
в чем разница этих документов, кроме регистров по которым они делают движения?
|
|||
8
Maxus43
13.07.11
✎
11:46
|
только сообщения, и то на крайняк. СообщитьОбОшибке Типовое кошерней
|
|||
9
serianomer
13.07.11
✎
11:46
|
для тестирования
|
|||
10
serianomer
13.07.11
✎
11:46
|
почему нельзя зайти в 1С когда висит проведение какого-то документа у одного пользователя?
|
|||
11
Господин ПЖ
13.07.11
✎
11:47
|
(9) толково...
|
|||
12
Escander
13.07.11
✎
11:49
|
(9) почерк клюшечника! На снеговике так не отлаживают!
|
|||
13
serianomer
13.07.11
✎
11:49
|
(11)причем модуль проведения весь закоментирован кроме предупреждения
|
|||
14
serianomer
13.07.11
✎
11:50
|
(12)уже много чего пробую
|
|||
15
Maxus43
13.07.11
✎
11:50
|
(14) смысл отладки в чем вобще? зачем это всё (4)(13)?
|
|||
16
serianomer
13.07.11
✎
11:51
|
(15) -> (10)
|
|||
17
Escander
13.07.11
✎
11:52
|
(15) скорее всего что-то там планировал выводить доброе и вечное, а по факту сподобился на "1". А может только контролировал что этот кусок кода отрабатывает
|
|||
18
Maxus43
13.07.11
✎
11:52
|
(16) проведение "висеть" не должно в принципе, и что значит нельзя зайти в 1С? что пишет?
|
|||
19
MM
13.07.11
✎
12:01
|
База файловая или клиент-серверная (на каком SQL-сервере)? Какой режим управления блокировками у конфигурации?
Без ответа на эти вопросы дальше не сдвинуться. |
|||
20
hhhh
13.07.11
✎
12:01
|
(13) а на закладке "движения" точно все движения у документа поудалял?
|
|||
21
serianomer
13.07.11
✎
12:03
|
при проведении документа одного пользователя выводится предупреждение("1"), при этом
у другие не могут войти в 1С или провести другой документ 1С висит потом выходит сообщение "конфликт блокировок при выполеннии транзакции" LOck request time out exceedeed. в списке соеденений в консоле 1С Сервера видно что сессии пользователей блокируются. 1C 8.1.14 MS SQL 2005 |
|||
22
serianomer
13.07.11
✎
12:04
|
(19) режим управления блокировками автоматический
|
|||
23
serianomer
13.07.11
✎
12:05
|
(20)движения удалил, только ТЧ документа заполенны, но это ведь не должно влиять
|
|||
24
Maxus43
13.07.11
✎
12:07
|
(23) у документа автоматическое удаление движений?
|
|||
25
mzelensky
13.07.11
✎
12:07
|
(21) потому как "ПРЕДУПРЕЖДЕНИЕ" ждет пока не нажмешь кнопочку. Следовательно обработка висит ,следоватекльно объект блокируется!!!
|
|||
26
serianomer
13.07.11
✎
12:07
|
(24) да
|
|||
27
serianomer
13.07.11
✎
12:09
|
то что объект блокируется не проблема, проблема что в 1С нельзя зайти и что некоторые другие документы нельзя провести, непонятно почему они висят
|
|||
28
mzelensky
13.07.11
✎
12:11
|
(27) потому как процедура "проведения" затрагивает и блокирует не только данный документ но и ряд регистров, а то может и другие документы. Все это дело блокируется...а ты пытаешься с ними работать!
П.С. а если у тебя база файловая, то в регистрах блокируется ВСЯ таблица данных!!! |
|||
29
mzelensky
13.07.11
✎
12:12
|
(28) а, сори...уже позже заметил "1C 8.1.14 MS SQL 2005"
|
|||
30
Господин ПЖ
13.07.11
✎
12:20
|
(27) sp_lock все знает...
|
|||
31
Господин ПЖ
13.07.11
✎
12:22
|
хотя по идее блокируются только KEY (X), на таблице должно висеть только намерение - IX...
|
|||
32
YHVVH
13.07.11
✎
12:26
|
а в чем вопрос то? или тут просто флудят.
|
|||
33
YHVVH
13.07.11
✎
12:28
|
||||
34
hhhh
13.07.11
✎
12:28
|
(32) автор всобачил Предупреждение в обработку проведения, и теперь удивляется, что другие пользователи не могут проводить документы.
|
|||
35
serianomer
13.07.11
✎
12:28
|
(32)->(21)
|
|||
36
AlexNew
13.07.11
✎
12:28
|
Уволить. За профнепригодность.
|
|||
37
Господин ПЖ
13.07.11
✎
12:29
|
ну типа чо за на...? зачем блокируются таблицы... а как им не блокироваться... при автомат. очистке движений записывается пустой набор в регистр и это блокируется всю таблицу (вроде так)...
|
|||
38
serianomer
13.07.11
✎
12:30
|
(34) а почему другие пользователи не должны проводить другие документы?
|
|||
39
serianomer
13.07.11
✎
12:30
|
(38)+блокируется один документ на работу других никак не должно влиять
|
|||
40
Господин ПЖ
13.07.11
✎
12:30
|
само по себе "Предупреждение" ни говорит ни о чем... весь вопрос в залоченных ресурсах одним процессом и в ожидании этих ресурсов другим процессом
|
|||
41
Господин ПЖ
13.07.11
✎
12:31
|
(39) не факт...
|
|||
42
Господин ПЖ
13.07.11
✎
12:32
|
(33) это какая-то хня для даунов...
|
|||
43
YHVVH
13.07.11
✎
12:32
|
(39) если у тебя в модуле проведения выбирались или изменялись объекты которые нужны для работы других юзеров то балдерес тебе.
почитай (33) на досуге |
|||
44
serianomer
13.07.11
✎
12:33
|
(43) ты ветку читал? модуль проведения польностью закоментирован кроме вывода предупреждения
|
|||
45
Maxus43
13.07.11
✎
12:34
|
(44) Автоматическое удаление движений, оно лочит скорей всего все регистры
|
|||
46
Господин ПЖ
13.07.11
✎
12:34
|
(44) у тебя автоочистка движений стоит... а это скорее всего (37). Можно покурить типовые и посмотреть как старые движения документов убирают...
|
|||
47
hhhh
13.07.11
✎
12:35
|
(39) блокируется целиком таблица регистра, тебе же сказали в (37). Другой пользователь когда проводит свой документ, пытается записать в этот же регистр, ну и него не получается. Включай уже мозги.
|
|||
48
Maxus43
13.07.11
✎
12:36
|
(47) тока непонятен момент с тем что в 1с зайти не могут... чо там при старте системы то напихали
|
|||
49
YHVVH
13.07.11
✎
12:37
|
(44) хм. а зачем вообще так делать?
|
|||
50
Maxus43
13.07.11
✎
12:40
|
(49) ты ветку читал?))
|
|||
51
YHVVH
13.07.11
✎
12:41
|
(50) бред полный.
|
|||
52
serianomer
13.07.11
✎
12:42
|
(46) я открываю непроведенный документ
|
|||
53
Господин ПЖ
13.07.11
✎
12:45
|
(52) профайлер и sp_lock все знают...
|
|||
54
Maxus43
13.07.11
✎
12:45
|
(52) при автоочистке пофиг проведённый или нет, всё равно очищает и лочит
|
|||
55
serianomer
13.07.11
✎
12:45
|
(53)Не подскажите, как в профайлере можно отловить события нужные?
|
|||
56
MM
13.07.11
✎
12:55
|
Судя по всему проблема в том, что у документа есть пустые регистры, при их очистке (автоматической) происходит блокировка всего регистра, поскольку отдельные строки в нём заблокировать нельзя (их нет).
|
|||
57
MM
13.07.11
✎
12:58
|
(47) если регистр не пустой, то в автоматическом режиме может возникать блокировка на записи соседние с записываемыми, но в общем случае регистр будет не заблокирован.
|
|||
58
braslavets
13.07.11
✎
13:07
|
У меня как-то раз коллега на живой базе поставил брикпоинт в обработке проведения, поймал и .... пошел покурить :)
|
|||
59
упс
13.07.11
✎
13:10
|
(55) запаритесь вы с профайлером ковыряться, имхо. Но вообще - класс событий Locks. Там можно отловить и наложение блокировки на ресурс, и освобождение ресурса и таймауты
Смотрите вывод sys.dm_tran_locks/sp_lock (в sys.dm_tran_locks информации больше и она, имхо, в более читабельном виде), анализируйте. |
|||
60
serianomer
15.07.11
✎
18:52
|
А почему, когда делается запрос в модуле проведения документа к остаткам рег. накоплений используется блокировка
SERIALIZABLE? кусок запроса: FROM _AccumRegTotals8115 WITH(SERIALIZABLE) WHERE _AccumRegTotals8115._Period = P1 AND _AccumRegTotals8115._Fld8107RRef = @P2 AND _AccumRegTotals8115._Fld8108RRef = @P3 AND _AccumRegTotals8115._Fld8109 > @P4 AND (_AccumRegTotals8115._Fld8110 <> CAST(@P5 AS NUMERIC(1,0)) OR _AccumRegTotals8115._Fld8265 <> CAST(@P5 AS NUMERIC(1,0)) из-за этого невозможно сделать запись в рег. накопления за другой период в другом документе, который в это время проводится, если стоит режим разделения итогов по этому регистру накопления, а если не стоит, то проведение документа не начинается вовсе, а просто висит в ожидании. |
|||
61
serianomer
15.07.11
✎
18:54
|
_AccumRegTotals8115 - таблица итогов
|
|||
62
5 Элемент
15.07.11
✎
19:03
|
||||
63
Ник второй
16.07.11
✎
08:22
|
Эх сколько дурней в нашей профессии, которые втыкают предупреждения в транзакции.
|
|||
64
serianomer
19.07.11
✎
10:27
|
(62) у меня нет доступа.
(63) ПНХ. |
|||
65
serianomer
19.07.11
✎
10:27
|
выложите куда-нить статью
|
|||
66
serianomer
19.07.11
✎
10:28
|
из (62)
|
|||
67
serianomer
19.07.11
✎
10:44
|
(62) где можно взять пароль и пользователя?
|
|||
68
unregistered
19.07.11
✎
10:57
|
(60) >> А почему, когда делается запрос в модуле проведения документа к остаткам рег. накоплений используется блокировка
SERIALIZABLE Потому что видимо не используются управляемые блокировки. СУБД не в курсе дел вашей прикладной модели и особенностей взаимосвязей таблиц в БД и страхуется, накладывая максимальные излишние блокировки. При использовании управляемых блокировок в случаях, когда в обработке проведение производится чтение таблиц, которые в последствии будут изменяться (например, таблицы итогов регистров накопления или бух.), следует программно устанавливать управляемые блокировки на нужные диапазоны записей (по измерениям, счетам, видам и значениям субконто, периодам), во избежании излишних блокировок. |
|||
69
unregistered
19.07.11
✎
11:01
|
||||
70
unregistered
19.07.11
✎
11:02
|
(67) >> где можно взять пароль и пользователя?
А от ИТС не подходит? |
|||
71
serianomer
19.07.11
✎
11:12
|
(69) ничего не написано, что можно сделать для оптимизации конфигурации пи автоматических блоикровках.
или ничего нельзя сделать? |
|||
72
unregistered
19.07.11
✎
11:24
|
(71) >> пи автоматических блоикровках
перевести конфу на управляемые. ИМХО, это очевидно... Разве нет? Если перевод в режим управляемых блокировок по каким-либо причинам невозможен, то смотреть алгоритмы (проведения, записи) и оптимизировать их. Вот почитай еще: http://www.its.1c.ru/db/metod81#content:4053:1 И не говори, что у тебя нет доступа к ИТС. |
|||
73
Господин ПЖ
19.07.11
✎
11:27
|
SERIALIZABLE это не вид, а уровень изоляции. сам по себе без конкретного контекста ничего не значит...
|
|||
74
serianomer
19.07.11
✎
11:49
|
(73) в документеА в модуле проведения выполняется запрос - чтение остатков регНак за период1, в профайлере видно что уровень изоляции установливается SERIALIZABLE,
документБ в это время пытается выполнить запись в тот же регНак, но за период2, более поздний, выходит ошибка, конфликт блокировок запрос, который блокирует регистр накопления exec sp_executesql N'SELECT #V8TblAli1_Q_000_T_001._Q_001_F_000_TYPE AS _sf_2_TYPE, #V8TblAli1_Q_000_T_001._Q_001_F_000_S AS _sf_2_S, #V8TblAli1_Q_000_T_001._Q_001_F_000_RRRef AS _sf_2_RRRef, #V8TblAli1_Q_000_T_001._Q_001_F_001 AS _sf_1, CAST(SUM(#V8TblAli1_Q_000_T_001._Q_001_F_002) AS NUMERIC(38,8)) AS f_1, CAST(SUM(#V8TblAli1_Q_000_T_001._Q_001_F_003) AS NUMERIC(38,8)) AS f_2, CAST(SUM(#V8TblAli1_Q_000_T_001._Q_001_F_004) AS NUMERIC(7,0)) AS f_3, CAST(SUM(#V8TblAli1_Q_000_T_001._Q_001_F_005) AS NUMERIC(7,0)) AS f_4, #V8TblAli2_Q_000_T_002._Fld6671RRef AS f_5, CAST(SUM(#V8TblAli1_Q_000_T_001._Q_001_F_007) AS NUMERIC(38,8)) AS f_6 FROM ( SELECT CASE WHEN #V8TblAli1_Q_001_T_001._Fld8108RRef IS NOT NULL THEN 0x08 ELSE NULL END AS _Q_001_F_000_TYPE, CASE WHEN #V8TblAli1_Q_001_T_001._Fld8108RRef IS NULL THEN CAST(NULL AS NVARCHAR(5)) ELSE CAST(N'''' AS NVARCHAR(5)) END AS _Q_001_F_000_S, #V8TblAli1_Q_001_T_001._Fld8108RRef AS _Q_001_F_000_RRRef, #V8TblAli1_Q_001_T_001._Fld8109 AS _Q_001_F_001, CAST(SUM(#V8TblAli1_Q_001_T_001._Fld8110Balance) AS NUMERIC(32,2)) AS _Q_001_F_002, CAST(SUM(#V8TblAli1_Q_001_T_001._Fld8265Balance) AS NUMERIC(32,2)) AS _Q_001_F_003, CAST(0. AS NUMERIC(1,0)) AS _Q_001_F_004, CAST(0. AS NUMERIC(1,0)) AS _Q_001_F_005, #V8TblAli1_Q_001_T_001._Fld8107RRef AS _Q_001_F_006RRef, CAST(CAST(0. AS NUMERIC(1,0)) AS NUMERIC(38,8)) AS _Q_001_F_007 FROM ( SELECT #V8TblAli1_T._Fld8107RRef AS _Fld8107RRef, #V8TblAli1_T._Fld8108RRef AS _Fld8108RRef, #V8TblAli1_T._Fld8109 AS _Fld8109, CAST(SUM(#V8TblAli1_T._Fld8110Balance) AS NUMERIC(32,2)) AS _Fld8110Balance, CAST(SUM(#V8TblAli1_T._Fld8265Balance) AS NUMERIC(32,2)) AS _Fld8265Balance FROM ( SELECT _AccumRegTotals8115._Fld8107RRef AS _Fld8107RRef, _AccumRegTotals8115._Fld8108RRef AS _Fld8108RRef, _AccumRegTotals8115._Fld8109 AS _Fld8109, CAST(SUM(_AccumRegTotals8115._Fld8110) AS NUMERIC(26,2)) AS _Fld8110Balance, CAST(SUM(_AccumRegTotals8115._Fld8265) AS NUMERIC(26,2)) AS _Fld8265Balance FROM _AccumRegTotals8115 WITH(SERIALIZABLE) WHERE _AccumRegTotals8115._Period = P1 AND _AccumRegTotals8115._Fld8107RRef = @P2 AND _AccumRegTotals8115._Fld8108RRef = @P3 AND _AccumRegTotals8115._Fld8109 > @P4 GROUP BY _AccumRegTotals8115._Fld8107RRef, _AccumRegTotals8115._Fld8108RRef, _AccumRegTotals8115._Fld8109 HAVING CAST(SUM(_AccumRegTotals8115._Fld8110) AS NUMERIC(26,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(_AccumRegTotals8115._Fld8265) AS NUMERIC(26,2)) <> CAST(@P5 AS NUMERIC(1,0)) UNION ALL SELECT _AccumReg8103._Fld8107RRef AS _Fld8107RRef, _AccumReg8103._Fld8108RRef AS _Fld8108RRef, _AccumReg8103._Fld8109 AS _Fld8109, CAST(CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8110 ELSE _AccumReg8103._Fld8110 END) AS NUMERIC(20,2)) AS NUMERIC(27,2)) AS _Fld8110Balance, CAST(CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8265 ELSE _AccumReg8103._Fld8265 END) AS NUMERIC(20,2)) AS NUMERIC(27,2)) AS _Fld8265Balance FROM _AccumReg8103 WITH(SERIALIZABLE) WHERE _AccumReg8103._Period > @P4 AND _AccumReg8103._Period < P1 AND _AccumReg8103._Active = @P6 AND _AccumReg8103._Fld8107RRef = @P2 AND _AccumReg8103._Fld8108RRef = @P3 AND _AccumReg8103._Fld8109 > @P4 GROUP BY _AccumReg8103._Fld8107RRef, _AccumReg8103._Fld8108RRef, _AccumReg8103._Fld8109 HAVING CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8110 ELSE _AccumReg8103._Fld8110 END) AS NUMERIC(20,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8265 ELSE _AccumReg8103._Fld8265 END) AS NUMERIC(20,2)) <> CAST(@P5 AS NUMERIC(1,0)) ) #V8TblAli1_T GROUP BY #V8TblAli1_T._Fld8107RRef, #V8TblAli1_T._Fld8108RRef, #V8TblAli1_T._Fld8109 HAVING CAST(SUM(#V8TblAli1_T._Fld8110Balance) AS NUMERIC(32,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(#V8TblAli1_T._Fld8265Balance) AS NUMERIC(32,2)) <> CAST(@P5 AS NUMERIC(1,0)) ) #V8TblAli1_Q_001_T_001 GROUP BY #V8TblAli1_Q_001_T_001._Fld8109, #V8TblAli1_Q_001_T_001._Fld8108RRef, #V8TblAli1_Q_001_T_001._Fld8107RRef UNION ALL SELECT CASE WHEN #V8TblAli1_Q_002_T_001._Fld8108RRef IS NOT NULL THEN 0x08 ELSE NULL END AS _Q_001_F_000_TYPE, CASE WHEN #V8TblAli1_Q_002_T_001._Fld8108RRef IS NULL THEN CAST(NULL AS NVARCHAR(5)) ELSE CAST(N'''' AS NVARCHAR(5)) END AS _Q_001_F_000_S, #V8TblAli1_Q_002_T_001._Fld8108RRef AS _Q_001_F_000_RRRef, #V8TblAli1_Q_002_T_001._Fld8109 AS _Q_001_F_001, CAST(SUM(#V8TblAli1_Q_002_T_001._Fld8110Balance) AS NUMERIC(32,2)) AS _Q_001_F_002, CAST(SUM(#V8TblAli1_Q_002_T_001._Fld8265Balance) AS NUMERIC(32,2)) AS _Q_001_F_003, CAST(0. AS NUMERIC(1,0)) AS _Q_001_F_004, CAST(0. AS NUMERIC(1,0)) AS _Q_001_F_005, #V8TblAli1_Q_002_T_001._Fld8107RRef AS _Q_001_F_006RRef, CAST(SUM(#V8TblAli1_Q_002_T_001._Fld8420Balance) AS NUMERIC(32,2)) AS _Q_001_F_007 FROM ( SELECT #V8TblAli1_T._Fld8107RRef AS _Fld8107RRef, #V8TblAli1_T._Fld8108RRef AS _Fld8108RRef, #V8TblAli1_T._Fld8109 AS _Fld8109, CAST(SUM(#V8TblAli1_T._Fld8110Balance) AS NUMERIC(32,2)) AS _Fld8110Balance, CAST(SUM(#V8TblAli1_T._Fld8265Balance) AS NUMERIC(32,2)) AS _Fld8265Balance, CAST(SUM(#V8TblAli1_T._Fld8420Balance) AS NUMERIC(32,2)) AS _Fld8420Balance FROM ( SELECT _AccumRegTotals8115._Fld8107RRef AS _Fld8107RRef, _AccumRegTotals8115._Fld8108RRef AS _Fld8108RRef, _AccumRegTotals8115._Fld8109 AS _Fld8109, CAST(SUM(_AccumRegTotals8115._Fld8110) AS NUMERIC(26,2)) AS _Fld8110Balance, CAST(SUM(_AccumRegTotals8115._Fld8265) AS NUMERIC(26,2)) AS _Fld8265Balance, CAST(SUM(_AccumRegTotals8115._Fld8420) AS NUMERIC(28,2)) AS _Fld8420Balance FROM _AccumRegTotals8115 WITH(SERIALIZABLE) WHERE _AccumRegTotals8115._Period = P1 AND _AccumRegTotals8115._Fld8107RRef = @P2 AND _AccumRegTotals8115._Fld8108RRef = @P7 AND _AccumRegTotals8115._Fld8109 > @P4 GROUP BY _AccumRegTotals8115._Fld8107RRef, _AccumRegTotals8115._Fld8108RRef, _AccumRegTotals8115._Fld8109 HAVING CAST(SUM(_AccumRegTotals8115._Fld8110) AS NUMERIC(26,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(_AccumRegTotals8115._Fld8265) AS NUMERIC(26,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(_AccumRegTotals8115._Fld8420) AS NUMERIC(28,2)) <> CAST(@P5 AS NUMERIC(1,0)) UNION ALL SELECT _AccumReg8103._Fld8107RRef AS _Fld8107RRef, _AccumReg8103._Fld8108RRef AS _Fld8108RRef, _AccumReg8103._Fld8109 AS _Fld8109, CAST(CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8110 ELSE _AccumReg8103._Fld8110 END) AS NUMERIC(20,2)) AS NUMERIC(27,2)) AS _Fld8110Balance, CAST(CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8265 ELSE _AccumReg8103._Fld8265 END) AS NUMERIC(20,2)) AS NUMERIC(27,2)) AS _Fld8265Balance, CAST(CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8420 ELSE _AccumReg8103._Fld8420 END) AS NUMERIC(22,2)) AS NUMERIC(29,2)) AS _Fld8420Balance FROM _AccumReg8103 WITH(SERIALIZABLE) WHERE _AccumReg8103._Period >= @P4 AND _AccumReg8103._Period < P1 AND _AccumReg8103._Active = @P6 AND _AccumReg8103._Fld8107RRef = @P2 AND _AccumReg8103._Fld8108RRef = @P7 AND _AccumReg8103._Fld8109 > @P4 GROUP BY _AccumReg8103._Fld8107RRef, _AccumReg8103._Fld8108RRef, _AccumReg8103._Fld8109 HAVING CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8110 ELSE _AccumReg8103._Fld8110 END) AS NUMERIC(20,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8265 ELSE _AccumReg8103._Fld8265 END) AS NUMERIC(20,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(CASE WHEN _AccumReg8103._RecordKind = CAST(0. AS NUMERIC(1,0)) THEN - _AccumReg8103._Fld8420 ELSE _AccumReg8103._Fld8420 END) AS NUMERIC(22,2)) <> CAST(@P5 AS NUMERIC(1,0)) ) #V8TblAli1_T GROUP BY #V8TblAli1_T._Fld8107RRef, #V8TblAli1_T._Fld8108RRef, #V8TblAli1_T._Fld8109 HAVING CAST(SUM(#V8TblAli1_T._Fld8110Balance) AS NUMERIC(32,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(#V8TblAli1_T._Fld8265Balance) AS NUMERIC(32,2)) <> CAST(@P5 AS NUMERIC(1,0)) OR CAST(SUM(#V8TblAli1_T._Fld8420Balance) AS NUMERIC(32,2)) <> CAST(@P5 AS NUMERIC(1,0)) ) #V8TblAli1_Q_002_T_001 GROUP BY #V8TblAli1_Q_002_T_001._Fld8109, #V8TblAli1_Q_002_T_001._Fld8108RRef, #V8TblAli1_Q_002_T_001._Fld8107RRef UNION ALL SELECT CASE WHEN #V8TblAli1_Q_004_T_001._Q_003_F_000 IS NOT NULL THEN 0x05 ELSE NULL END AS _Q_001_F_000_TYPE, #V8TblAli1_Q_004_T_001._Q_003_F_000 AS _Q_001_F_000_S, CASE WHEN #V8TblAli1_Q_004_T_001._Q_003_F_000 IS NULL THEN CAST(NULL AS BINARY(16)) ELSE 0x00000000000000000000000000000000 END AS _Q_001_F_000_RRRef, #V8TblAli1_Q_004_T_001._Q_003_F_001 AS _Q_001_F_001, CAST(CAST(SUM(CAST(0. AS NUMERIC(1,0))) AS NUMERIC(7,0)) AS NUMERIC(38,8)) AS _Q_001_F_002, CAST(CAST(SUM(#V8TblAli1_Q_004_T_001._Q_003_F_002) AS NUMERIC(28,2)) AS NUMERIC(38,8)) AS _Q_001_F_003, CAST(0. AS NUMERIC(1,0)) AS _Q_001_F_004, CAST(0. AS NUMERIC(1,0)) AS _Q_001_F_005, #V8TblAli1_Q_004_T_001._Q_003_F_003RRef AS _Q_001_F_006RRef, CAST(CAST(0. AS NUMERIC(1,0)) AS NUMERIC(38,8)) AS _Q_001_F_007 FROM ( SELECT N''ТРАНШ'' AS _Q_003_F_000, _Document245_VT4073_Q_003_T_001._Fld4075 AS _Q_003_F_001, CAST(SUM(_Document245_VT4073_Q_003_T_001._Fld4080) AS NUMERIC(21,2)) AS _Q_003_F_002, _Document245_1._Fld4050RRef AS _Q_003_F_003RRef FROM _Document245_VT4073 _Document245_VT4073_Q_003_T_001 WITH(REPEATABLEREAD) LEFT OUTER JOIN _Document245 _Document245_1 WITH(REPEATABLEREAD) ON _Document245_VT4073_Q_003_T_001._Document245_IDRRef = _Document245_1._IDRRef WHERE _Document245_VT4073_Q_003_T_001._Document245_IDRRef = @P8 AND _Document245_VT4073_Q_003_T_001._Fld4080 > CAST(@P5 AS NUMERIC(1,0)) AND _Document245_VT4073_Q_003_T_001._Fld4075 > @P4 GROUP BY _Document245_VT4073_Q_003_T_001._Fld4075, _Document245_1._Fld4050RRef ) #V8TblAli1_Q_004_T_001 GROUP BY #V8TblAli1_Q_004_T_001._Q_003_F_001, #V8TblAli1_Q_004_T_001._Q_003_F_000, #V8TblAli1_Q_004_T_001._Q_003_F_003RRef ) #V8TblAli1_Q_000_T_001 LEFT OUTER JOIN ( SELECT _InfoReg6668_IR12._Fld6669RRef AS _Fld6669RRef, _InfoReg6668_IR12._Fld6671RRef AS _Fld6671RRef FROM ( SELECT #V8TblAli1_IR1._Fld6669RRef AS _Fld6669RRef, #V8TblAli1_IR1._Fld6670RRef AS _Fld6670RRef, #V8TblAli1_IR1._MAXPERIOD AS _MAXPERIOD, SUBSTRING(MAX(_InfoReg6668_IR2._RecorderTRef + _InfoReg6668_IR2._RecorderRRef), 1, 4) AS _MAXRECORDERTRef, SUBSTRING(MAX(_InfoReg6668_IR2._RecorderTRef + _InfoReg6668_IR2._RecorderRRef), 5, 16) AS _MAXRECORDERRRef FROM ( SELECT _InfoReg6668._Fld6669RRef AS _Fld6669RRef, _InfoReg6668._Fld6670RRef AS _Fld6670RRef, MAX(_InfoReg6668._Period) AS _MAXPERIOD FROM _InfoReg6668 WITH(SERIALIZABLE) WHERE _InfoReg6668._Period <= @P4 AND _InfoReg6668._Active = @P6 AND _InfoReg6668._Fld6670RRef = @P9 AND _InfoReg6668._Fld6669RRef = @P2 GROUP BY _InfoReg6668._Fld6669RRef, _InfoReg6668._Fld6670RRef ) #V8TblAli1_IR1 INNER JOIN _InfoReg6668 _InfoReg6668_IR2 WITH(SERIALIZABLE) ON #V8TblAli1_IR1._Fld6669RRef = _InfoReg6668_IR2._Fld6669RRef AND #V8TblAli1_IR1._Fld6670RRef = _InfoReg6668_IR2._Fld6670RRef AND #V8TblAli1_IR1._MAXPERIOD = _InfoReg6668_IR2._Period WHERE _InfoReg6668_IR2._Active = @P6 AND _InfoReg6668_IR2._Fld6670RRef = @P9 AND _InfoReg6668_IR2._Fld6669RRef = @P2 GROUP BY #V8TblAli1_IR1._Fld6669RRef, #V8TblAli1_IR1._Fld6670RRef, #V8TblAli1_IR1._MAXPERIOD ) #V8TblAli1_IR11 INNER JOIN _InfoReg6668 _InfoReg6668_IR12 WITH(SERIALIZABLE) ON #V8TblAli1_IR11._Fld6669RRef = _InfoReg6668_IR12._Fld6669RRef AND #V8TblAli1_IR11._Fld6670RRef = _InfoReg6668_IR12._Fld6670RRef AND #V8TblAli1_IR11._MAXPERIOD = _InfoReg6668_IR12._Period AND #V8TblAli1_IR11._MAXRECORDERTRef = _InfoReg6668_IR12._RecorderTRef AND #V8TblAli1_IR11._MAXRECORDERRRef = _InfoReg6668_IR12._RecorderRRef ) #V8TblAli2_Q_000_T_002 ON #V8TblAli1_Q_000_T_001._Q_001_F_006RRef = #V8TblAli2_Q_000_T_002._Fld6669RRef GROUP BY #V8TblAli1_Q_000_T_001._Q_001_F_001, #V8TblAli1_Q_000_T_001._Q_001_F_000_TYPE, #V8TblAli1_Q_000_T_001._Q_001_F_000_S, #V8TblAli1_Q_000_T_001._Q_001_F_000_RRRef, #V8TblAli2_Q_000_T_002._Fld6671RRef ORDER BY #V8TblAli1_Q_000_T_001._Q_001_F_001, #V8TblAli1_Q_000_T_001._Q_001_F_000_TYPE DESC, #V8TblAli1_Q_000_T_001._Q_001_F_000_S DESC, #V8TblAli1_Q_000_T_001._Q_001_F_000_RRRef DESC', N'P1 datetime,@P2 varbinary(16),@P3 varbinary(16),@P4 datetime,@P5 numeric(1,0),@P6 varbinary(1),@P7 varbinary(16),@P8 varbinary(16),@P9 varbinary(16)', {ts '2011-07-01 00:00:00'}, 0x91B4001EC9EB581A11E001F37F47049B, 0x80E313D473D00129491A2D67BD69B16C, {ts '2011-06-25 20:02:00'}, 0, 0x01, 0xAE058527C15B19A440E1A12D9527BACE, 0x91B4001EC9EB581A11E001F37F47049E, 0x00000000000000000000000000000000 |
|||
75
serianomer
19.07.11
✎
11:52
|
(72) нет доступа(
|
|||
76
serianomer
19.07.11
✎
11:57
|
(74)+ вообще-то блокируется и регистр сведений
|
|||
77
Господин ПЖ
19.07.11
✎
12:35
|
(74) смотреть надо конкретно через sp_lock() какие ресурсы заблокированы
SERIALIZABLE говорит лишь о том что прочитанные ресурсы не будут отпущены до конца транзакции. И все. |
|||
78
unregistered
19.07.11
✎
12:45
|
(74) >> в документеА в модуле проведения выполняется запрос - чтение остатков регНак за период1, в профайлере видно что уровень изоляции установливается SERIALIZABLE,
документБ в это время пытается выполнить запись в тот же регНак, но за период2, более поздний, выходит ошибка, конфликт блокировок Ну всё правильно. Так и должно быть. В чем вопрос? Либо ты наконец-то пойдешь и начнешь переводить поэтапно свою конфу в режим управляемых блокировок, где будешь ручками прописывать по каким периодам и измерениям надо блокировать таблицы регистров при чтении в транзакции, либо всё так и останется: максимальный уровень изоляции по максимальным диапазонам или всей таблице. |
|||
79
unregistered
19.07.11
✎
12:47
|
(75) У твоего работодателя не нашлось денег на подписку ИТС?
Увольняйся оттуда. А то рано или поздно у них не найдется денег тебе на з/п. Ну или подпишись сам в конце концов... Копия статьи: http://1cexpo.ru/metodiki/21-tipichnye-prichiny-izbytochnyx-blokirovok-i-metody-optimizaczii.html |
|||
80
Господин ПЖ
19.07.11
✎
12:54
|
>максимальный уровень изоляции по максимальным диапазонам или всей таблице.
бред... |
|||
81
unregistered
19.07.11
✎
12:57
|
(80) Что не так?
В автоматическом режиме без указания в запросе ДЛЯ ИЗМЕНЕНИЯ будет тупо заблокирована вся таблица итогов регистра вплоть до окончания транзакции (обработки проведения и записи наборов). Разве я не прав? |
|||
82
Господин ПЖ
19.07.11
✎
13:40
|
(81) "простая выборка" это тип = shared lock, ДЛЯ ИЗМЕНЕНИЯ = for update...
покурите буквари что есть тип блокировки "for update". И вообще все наоборот. И что будет заблокировано не известно, чтобы так с плеча рубить - "таблица и все тут". 1С в статьях сами пишут что МОГУТ приводить к избыточным блокировкам. А могут и нет. |
|||
83
serianomer
19.07.11
✎
13:45
|
(78)нет времени переводить конфигурацию на управляемые блокировки. И вообще не я писал эту конфигурацию.
(82)похоже на то, что у меня "блокирующее чтение остатков в начале транзакции" в течении проведения проводятся длительные расчеты, все это время таблица залочена. |
|||
84
vde69
19.07.11
✎
13:52
|
у кого как а у меня проблемма не от блокировок а от их отсутствия, вот просвещаюсь http://msdn.microsoft.com/ru-ru/library/aa337440.aspx
все висит хотя блокировок и нет! |
|||
85
Господин ПЖ
19.07.11
✎
13:56
|
(84) скуль сожрал всю память наверное...
блокировка тоже ресурсов требует: Блокировка занимает 96 байт. Общее количество блокировок может варьироваться от 5000 до 2 147 483 647. Конкретное значение можно задать с помощью хранимой процедуры sp_configure с параметром locks |
|||
86
unregistered
19.07.11
✎
14:34
|
(82) >> "простая выборка" это тип = shared lock
Речь идёт о запросах в транзакции (точнее в обработке проведения). Здесь тип блокировки на таблицы двигаемых документом регистров при первом же обращении (при запросе к итогам, например) будет выше share lock. В случае использования автоматического режима блокировок (как у автора) блокировки накладываются по самому худшему варианту. >> И что будет заблокировано не известно, чтобы так с плеча рубить - "таблица и все тут". 1С в статьях сами пишут что МОГУТ приводить к избыточным блокировкам. А могут и нет. Это действительно так, но проще считать, что будет заблокирована вся таблица, чем гадать как именно отработает менеджер блокировок СУБД. А правильнее использовать менеджера блокировок 1С, включив режим управляемых блокировок в конфе. |
|||
87
unregistered
19.07.11
✎
14:49
|
(83) >> похоже на то, что у меня "блокирующее чтение остатков в начале транзакции"
в течении проведения проводятся длительные расчеты, все это время таблица залочена. Совершенно верно. Как вариант - переписывание механизма контроля остатков на момент после принудительной записи наборов по всем регистрам документа. >> нет времени переводить конфигурацию на управляемые блокировки Включай в конфе режим "Автоматически и управляемый" и переводи только самые проблемные документы и регистры. Если речь идет об одном-двух документах и пяти - семи регистрах, то это займет не более одного дня. Прописать удаление движений (можно стырить с типовых). Прописать установку управляемых блокировок перед запросами к остаткам. Переписать алгоритмы контроля остатков (уже по желанию) для уменьшения времени блокирования таблиц при проведении. |
|||
88
serianomer
19.07.11
✎
14:55
|
(87) ок, спасибо за помощь
|
|||
89
MM
19.07.11
✎
15:59
|
(86) Там не только гадание, заблокировано будет только то, что будет прочитано (и по "краям" для SERIALIZABLE). При наличии индекса читаться скорее всего будет то, что подпадёт под него, если сервер не довели до эскалации блокировок.
Если бы блокировалась вся таблица, то от клиент-серверного режима было бы не много толку в сравнении с файловым вариантом. |
|||
90
serianomer
19.07.11
✎
16:26
|
(89) после выполнения запроса в (74) возникает событие Lock:Escalation
|
|||
91
serianomer
19.07.11
✎
16:27
|
(89)каким образом "сервер можно довести до эскалации блокировок"?
|
|||
92
MM
19.07.11
✎
16:34
|
(91) http://www.gilev.ru/1c/81/lock/lock.htm#escalation
Прежде всего недостаток памяти. |
|||
93
serianomer
20.07.11
✎
12:27
|
(92) Table Lock Escalations/sec = 285
|
|||
94
serianomer
20.07.11
✎
14:17
|
АП.
|
|||
95
serianomer
20.07.11
✎
14:17
|
Подскажите, что можно посмотреть в настройках скуля
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |