Имя: Пароль:
1C
1С v8
Конфликт блокировок при выполнении транзакции.
,
0 1976vas
 
17.02.15
09:02
Участилась проблема с блокировками. База большая УПП 1.3, пользователей около 70. Главбух постоянно предъявляет претензии. Описал ей, что причина либо в кривом запросе, либо нагрузке на сеть, либо в мощности сервера, либо в настройках SQL. Ко всему этому не имею доступа, т.к. есть админы и сопровожденец конфы. В мою задачу входит только работа с пользователями и дописание всего внешнего. Вопрос такой, подскажите, пожалуйста, я ничего не упустил? Я так понимаю, что прежде чем задавать такие вопросы мне, мне нужно как минимум передать права на администрирование SQL-сервера, чтобы начать с трассировок. Я прав?
66 vde69
 
25.02.15
16:31
(65) у меня были отрицательные опыты с SSD

Танцы с бубном вокруг SSD диска с win-7

я конечно понимаю, что будущее за ними, но я не слежу за ними... придет эра массового внедрения SSD - въеду в тему :)
67 1976vas
 
25.02.15
16:41
(58) Там в 21 посте "на железной машине (а не на виртуалки) длину очереди к диску, если более 0.5с - то мало, если 5-10с - то афигительно мало" - как узнать длину очереди к диску? У меня память под SQL 9Гигов всего, а крутится Документооборот и УПП.
68 Ник второй
 
25.02.15
16:43
(39) Вы про Апдекс, тогда тут вопросов нет, абсолютно согласен.
69 vde69
 
25.02.15
16:45
(67) не путай, память на сервере скуль видит то, что ему отдано гипервизором, а гипервизор может имеет всего 1 гиг памяти а остально своп :)

"железная машина" - это гипервизор, все замеры счетчиков винды нужно делать на нем а не на вируальной машине где стоит скуль
70 1976vas
 
25.02.15
16:48
(69) Своп - это на Линуксе? У меня Win Сервер 2008
71 vde69
 
25.02.15
16:49
72 1976vas
 
25.02.15
16:54
(71) Спасибо! Осталось разобраться с монитором производительности показания снимать.
73 1976vas
 
26.02.15
08:30
Регламентные задания настроены, но как оказалось не выполнялись, т.к. был отключен SQL Agent.
74 vde69
 
26.02.15
10:00
(73) бинго!!!

ну давай теперь после выполнения рег заданий повторяй тест.... уверен результат будет совсем иным...

статистику обновляй не реже чем раз в два часа...

только лучше подождать пару дней, что-бы планы запросов оптимизировались в несколько итераций, а потом уже тест повторяй...

да и про виртуализацию то-же не забывай :)
75 vde69
 
26.02.15
10:03
и все-же регламентные задания распиши какие и как настроены :)
76 1976vas
 
26.02.15
10:04
(74) Спасибо, буду пробовать. Какой интервал в замерах лучше ставить? И результаты за 8 минут, которые у меня, насколько показательны? http://savepic.org/6915633.png
77 vde69
 
26.02.15
10:05
>>>>Разделение идет, опытный программист сопровождает из франчи, а я на фикси - на подхвате.

теперь ты понимаешь какой это "опытный программист" ???
78 vde69
 
26.02.15
10:08
(76) сейчас ничего не делай, дай время скулю несколько раз обновить свою статистику регламентыми заданиями, уверен после этого скорость увелится примерно в 2 раза...

то есть мы нашли явную проблемму, нужно ее устранить и только потом смотреть дальше, это нужно, что-бы проблеммы не наслаивались друг на друга...
79 1976vas
 
26.02.15
10:08
(75) Раз в день обновление статистики и чистка кэша, раз в неделю дефрагментация индексов и раз в неделю реиндексация таблиц.
Но я перенастрою, статистику и кэш на раз в два часа, дефрагментацию раз в сутки и реиндексацию раз в неделю. (77) Не-не, он администрированием не занимается, ставил SQL наш генеральный директор и админ.
80 piter3
 
26.02.15
10:09
(79)может лучше на ночь перенести
81 1976vas
 
26.02.15
10:10
(78) Понятно, спасибо, сегодня вечером настроим регламентные задания.
(80) Что на ночь перенести, какое задание?
82 piter3
 
26.02.15
10:11
(81)все.
83 vde69
 
26.02.15
10:11
(79) обновление статистики поставьте раз в час или два, не бойтесь тормозов не будет.

дефрагментацию индексов ставь раз день, что-бы ночью шло. реиндексацию можно так оставить...

в понедельник запусти опять мой скрипт....

больше ничего не делай пока ибо надо посмотреть результат...
84 1976vas
 
26.02.15
10:13
(83) Ок.
(82) Регламент по статистике и кэшу на работу системы почти не влияют, я читал рекомендации делать их почаще.
85 vde69
 
26.02.15
10:14
а и параллелизм сейчас поставь = 0, а то ты его в 1 вроде ставил?
86 1976vas
 
26.02.15
10:17
(85) Да, везде вроде рекомендуют, а был в 0. Еще вопрос перед реиндексацией таблиц желательно делать бэкап?
87 1976vas
 
26.02.15
10:19
(85) Я верну в ноль, но что это значит?
88 vde69
 
26.02.15
10:22
(86) рекомендую ставить 1 для 7.7 (или для тех кто не умеет настраивать регламент скуля), для 8.х лучше ставить 0...

реиндексация и бекап не как не связаны, даже если реиндексация завершится крахом и после краха сделаем бекап, он будет валидным...

бекап связан со шринком, но ты шринк не делаешь в регламенте...
89 vde69
 
26.02.15
10:23
(87) это значит, что скуль сам определяет степень палалелизма на основании статистики и плана запроса
90 vde69
 
26.02.15
10:24
еще совет - перегрузите сервер, для проверки что агент работает, а то опять отвалится поле апдейта очередного....

но это уже к админу :)
91 1976vas
 
26.02.15
10:30
(90) Хорошо, все сделаю, протестирую в понедельник и отпишусь.
92 floody
 
26.02.15
10:58
скулю отдано 9 гигов? а объемы баз какие? если базы большие, то посмотрите счетчики SQL, может ему памяти мало
93 1976vas
 
26.02.15
11:16
(92) Две базы, скульные копии размером больше 100 Гигов.
94 1976vas
 
26.02.15
11:19
(90) Еще вопрос возник, а на какие базы регламент применять?
95 1976vas
 
26.02.15
11:20
В смысле только на рабочие или на системные тоже?
96 vde69
 
26.02.15
11:23
(94) на все... даже на тестовые, хуже не будет :)

(92) про память - разумеется мало (и наверняка она в своп у гипервизора уходит), но это будет видно чуть позже, по моим прикидкам у автора в понедельник будет в 2...3 раза быстрее все работать... а это уже не мало ....
97 1976vas
 
26.02.15
11:26
(96) Хотелось бы ))
Кстати по блокировкам, может кому понадобится нашел такой скрипт

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

DECLARE @dbid AS smallint;
use [test];
SET @dbid=DB_ID();

/*кто кого*/
SELECT DB_NAME(pr1.dbid) AS 'DB'
      ,pr1.spid AS 'ID жертвы'
      ,RTRIM(pr1.loginame) AS 'Login жертвы'
      ,pr2.spid AS 'ID виновника'
      ,RTRIM(pr2.loginame) AS 'Login виновника'
      ,pr1.program_name AS 'программа жертвы'
      ,pr2.program_name AS 'программа виновника'
      ,txt.[text] AS 'Запрос виновника'
FROM   MASTER.dbo.sysprocesses pr1(NOLOCK)
       JOIN MASTER.dbo.sysprocesses pr2(NOLOCK)
            ON  (pr2.spid = pr1.blocked)
       OUTER APPLY sys.[dm_exec_sql_text](pr2.[sql_handle]) AS txt
WHERE  pr1.blocked <> 0
[\1C]
Теперь если появляются блокировки, смотрю кто блочит, звоню, спрашиваю, прошу приостановить работу по приоритету. Пока хоть так.
98 Rebelx
 
26.02.15
12:40
(20) см. (0)

"Конфликт блокировок при выполнении транзакции" = Дедлок


В данном случае повышение производительности не решит проблему, а только сделает вероятность ее возникновения меньше. Т.е. только отложит проблему на будщее
99 1976vas
 
26.02.15
12:47
(98) Верно, вот здесь хорошо расписано http://habrahabr.ru/post/160485/ Сначала планирую поднять производительность, потом уже углубляться в анализ запросов.
100 Rebelx
 
26.02.15
12:53
(99) в данном случае стоит делать наоборот
101 1976vas
 
26.02.15
12:58
(100) Все-таки считаю, что чем быстрее выполнится транзакция, тем меньше вероятность блокировок. Я уже писал, что нахожу виновника и мне говорят, что операция закончится минут через пять. Я советую другим подождать 5 минут, потом все начинает работать. Я если бы операция выполнялась 1 минуту или меньше? Там могло и не возникнуть блокировок.
102 Rebelx
 
26.02.15
13:00
(101) Возможно, что если поменять две строчки местами - то вообще ошибок не будет
103 piter3
 
26.02.15
13:00
лучше сначала пусть админа заставит работать
104 1976vas
 
26.02.15
13:03
(103) Не :), надо брать в свои руки, потому, что если "что-то с 1с" админы мне уступают право быть виноватым.
105 1976vas
 
26.02.15
13:06
(102) Чтобы найти эти две строчки на стопицот лет учиться и разбираться.
106 1976vas
 
26.02.15
13:06
*на - надо
107 Гёдза
 
26.02.15
13:07
(98) "Конфликт блокировок при выполнении транзакции" <> Дедлок
108 Rebelx
 
26.02.15
13:08
(107) какие еще варианты?
109 1976vas
 
26.02.15
13:09
(107) Есть конфликт блокировок и конфликт взаимоблокировок?
110 Гёдза
 
26.02.15
13:09
"Конфликт ВЗАИМОблокировок при выполнении транзакции" = Дедлок
111 Rebelx
 
26.02.15
13:10
(110) ты бредишь
112 1976vas
 
26.02.15
13:14
(111) Смотри, я думаю он прав. Конфликт блокировок - это когда одна захватила и не дает, а взаимоблокировок - это петля, когда вторая транзакция стучится к первой, но держит ресурс для ее выполнения, что не дает выполниться первой и освободить ресурсы для второй.
113 Rebelx
 
26.02.15
13:18
(112) Конфликт блокировок = взаимоблокировка = дедлок.

Конфликт взаимоблокировок - бред.

Когда одна захватила и остальные ждут - это ожидание на блокировке. Как последствие - таймаут, с сообщением "Превышено время ожидания блокировки"
114 1976vas
 
26.02.15
13:20
(113) Я сейчас только понял, "Превышено время ожидания блокировки" - вот у меня основная ошибка, но я точно помню, что были и взаимоблокировки. Понаблюдаю. Спасибо.
115 1976vas
 
26.02.15
13:33
А вообще не знаю, вот ошибки http://savepic.org/6902344.png и http://savepic.org/6890056.png . Но, насколько помню было когда-то и предупреждение именно ВЗАИМОБЛОКИРОВКИ.
116 vde69
 
26.02.15
13:41
(98) при всем моем уважении это не всегда так, есть еще отвал ожидания по таймауту, и это нифига не делок....

в полученой статистики дедлоков вообще нет.... только их поиск ...
117 vde69
 
26.02.15
13:42
(116)+ упс, Вы уже перетерли это :)
118 1976vas
 
26.02.15
13:47
(117) Это говорит, что надо внимательней читать предупреждения 1С, а я по невнимательности все в одну кучу мешал, буду внимательней.
119 1976vas
 
27.02.15
08:17
Не выполнились регламентные задания, в ошибке "Для программы выполнения пакетов SQL Server необходимо, чтобы были установлены службы Integration Services" и т.д. Думал SQL server и SQL Server Agent только нужны. Читаю...
120 1976vas
 
27.02.15
08:29
http://support.microsoft.com/kb/961126 старая версия SQL, надо обновлять.
121 vde69
 
27.02.15
08:38
(120) фигней не майся - ставь задачу админу, пусть он ее решает, это не твои траблы...

судя по (119) у Вас никогда регламент не выполнялся :)
122 1976vas
 
27.02.15
08:46
(121) Никогда, я получил отчет о физических индексах для базы, их вообще нет.
Надо помочь админам, попросили. Не знаю какой пакет качать SQL_Server_2008_RTM_CU3_SNAC или SQL_Server_2008_Cumulative_Update_3
123 floody
 
27.02.15
08:51
Конфликт блокировок <> дедлок. Что с вами? Дедлок - неразрешимый конфликт блокировок.
124 1976vas
 
27.02.15
08:53
(123) Ну, погнали наши городских :)
125 vde69
 
модератор
27.02.15
08:53
(122) не помогай им, счас какой косяк вылезет при апдейте - виноват будешь ты... пусть на админские форумы идут...

уверяю тебя - там можно бяку словить и всю ночь сидеть переподнимать все.... (например для некоторых пакетов нужны спец права и спец учетки, не везде прокатит RDP, нужна консоль и т.д.) ты от себя бекап сделай и отложи, напиши письмо админам, пусть копают...

а пользователей которые кричат "не работает" шли к админам...
126 vde69
 
модератор
27.02.15
08:58
(123) у скуля есть таймаут ожидания блокировки, по умолчанию он вроде 600 сек, а теперь представь

я поднимаю транзакцию и внутри нее пытаюсь востановить последовательность, при этом блокируется таблица границ в разрезе измерения (например Номенклатуры), если кто-то попробует провести ЛЮБОЙ документ содержащий Номенклатуру из заблокированых моей транзации то он будет ожидать окончания моей блокировки... если ожидание продлится 600сек то его транзакция отвалися с сабжем...

это НЕ ДЕДЛОК!!!!

дедлок - это взаимная блокировка внутри ОДНОЙ транзакции!!!
127 1976vas
 
27.02.15
08:59
(125) Нас трое, сидим все вместе, дружим. Я понимаю, что могут быть ошибки, сама Майкрософт не рекомендует на рабочем сервере сразу делать обновление. Думаю все же сделать так - разверну сервер где-нибудь в другом месте, поставлю, накачу пакет, погоняю, только потом на рабочей буду.
128 floody
 
27.02.15
09:02
"дедлок - это взаимная блокировка внутри ОДНОЙ транзакции!!!"

мдяя
129 vde69
 
27.02.15
09:05
(128) согласен, может и в разных быть...
130 piter3
 
27.02.15
09:07
(122)нет.это их работа,а потом кто думаешь будет виноват?
131 1976vas
 
27.02.15
09:18
Спасибо всем, согласовал с админами, сделают они обновления. По результатам отпишусь.
132 brznzglwgn
 
27.02.15
09:19
Внутри ОДНОЙ транзакции не может быть взаимоблокировки никак. Блокировки внутри одной транзакции поглащаются или эскалируются.
133 vde69
 
05.03.15
15:29
интересно чего там у автора?
134 1976vas
 
06.03.15
10:22
(133) Не получилось на прошлых выходных обновить SQL для запуска регламентных заданий, поэтому пока не пишу. Обязательно отпишусь, как сделаем. Я хотел спросить, сколько, примерно, будут реиндексироваться таблицы и дефрагментироваться индексы, если никогда не проводились регламенты? База больше 100 Гигов, документооборот 50 Гигов и системные базы. А бухи пока так и жалуются на скорость...
135 vde69
 
16.03.15
15:35
прошла неделя :) админы пьянствуют :)))
136 1976vas
 
17.03.15
16:25
(135) Сюда перепишу.  Пока никак не обновят скул для выполнения регламентных, появилась новая подробность - сервер переводили в режим отладки, говорят в этом режиме еще может тормозить.
"админы пьянствуют :)))" - еще как )), а когда нормальные, то не получается скул обновить. Сегодня еще попытка.
137 1976vas
 
17.03.15
16:30
Напишу ответ, полученный от vde69, для хронологии и может кому-то понадобится:
"режим отладки может влиять только когда кто-то пользуется трассировкой серверных модулей в конфигураторе в РАБОЧЕЙ базе"
138 1976vas
 
18.03.15
07:47
Не без приключений обновили SQL, регламентные задания заработали. По словам админа 1с после обновления SQL тормозила, но после перезапуска виртуалки вроде все пошло нормально. База большая, больше 100 Г, появились вопросы:
1. Как долго будет выполняться дефрагментация индексов?
2. Как долго будет проходить построение индексов?
3. Как отразится на работе пользователей обновление статистики и продувка кэша во время их работы?
Учитывая, что база никогда не проходила регламент.
139 1976vas
 
18.03.15
07:59
(138) + 2 часа 53 минуты шло только обновление статистики. Интересно потом будет быстрее?
140 vde69
 
18.03.15
09:06
первые два вопроса - сильно зависят от конкретики, просто запускай ночью, предположительно часа два...

обновление статистики на работу не влияет...
продувка кеша - не уверен, я-бы не стал это делать во время активной работы...

пускай пару дней поработают с обновлением статистики (1 раз в 4 часа) потом замерь сколько будет идти обновление статистики, опроси юзеров на предмет "сильно медленее стало чем было раньше?" (спрашивать нужно имено "медленее", это трюк такой который субьективных юзеров заставит сказать "чуток медленее чем было", считай оценки "как было" и "стало лучше")

если потом проведи скриптовый тест и сравни результаты с первым и с опросами, получишь более менее честную картину...
141 1976vas
 
18.03.15
09:19
(140) Дефрагментация индексов за ночь не прошла. Продувка кэша тоже не прошла из-за синтаксиса, у нас DBCC FREEPRPCCACHE, скачал где-то на сайте, а должно быть DBCC FREEPROCCACHE, я так понимаю. Пока отключили Скул агента, вечером попробуем снова запустить.
142 vde69
 
18.03.15
09:46
у меня НОЧНОЙ регламент выглядит так http://www.picshare.ru/view/6073393/

база в 10 гигов проходит за 25 минут...
143 Torquader
 
18.03.15
09:55
(126)
Что значит "взаимоблокировка в одной транзакции" ?
Для взаимоблокировки должно быть, как минимум, две транзакции - одна блокирует сначала одну таблицу, а потом другую - другая - наоборот - сначала вторую, а потом - первую.
Получается, что они друг друга ждут, но SQL-сервер умеет такое "разгребать" - он "убивает" одну из транзакций, то есть она завершается с ошибкой, а вторая - продолжается.
144 1976vas
 
18.03.15
09:57
(143) Да, мы потом это обсудили
145 brznzglwgn
 
18.03.15
12:06
(142) Зачем после ребилда делать дефрагментацию? Она итак проходит во время ребилда.
146 vde69
 
18.03.15
12:09
(145) может и не надо, но читал на форуме, что в разных версиях по разному.

Меня сейчас все устраивает, и скорость и стабильность и время...
147 1976vas
 
18.03.15
12:11
(142) Я думаю, что у меня так долго, потому, что никогда не делалось. Потом ускорится.
148 vde69
 
18.03.15
12:18
кстати сейчас после шринка выяснется, что база не 100 гигов а всего 20 :)
149 1976vas
 
18.03.15
12:27
(148) А у меня шринк не настроен, что это за обрезание? Что происходит?
150 1976vas
 
18.03.15
12:29
151 1976vas
 
18.03.15
12:31
Решили пока с индексами ничего не делать. Будем раз в 4 часа обновлять статистику, ночью продувка кэша. Только есть предположение, что дневная статистика без продувки сразу после нее замедлит работу.
152 vde69
 
18.03.15
12:34
(151) ребулдинг индеса обязательно сделай, хотя-бы раз в неделю (на выходные)
153 1976vas
 
18.03.15
12:36
(152) Хорошо, попробую, отпишусь. Спасибо!
154 vde69
 
02.04.15
10:11
год закрыли :)
155 1976vas
 
02.04.15
10:14
(154) Да )) Начнем делать потихоньку, сегодня.
156 1976vas
 
02.04.15
10:43
+ Пока без всего - просто сделали выделение памяти SQL так, чтобы загруженность памяти на виртуалке была не больше 80 процентов - все работает намного стабильней и замечаний практически нет, но настроим регламенты еще обязательно. Проблема была в том еще, что под SQL отводили много памяти и на системные процессы не было резервов, подскакивало до 98 процентов, получался затуп.
157 1976vas
 
07.04.15
15:57
Потихоньку включаю регламентные задания. Пока ежедневно 2 раза выполняется 1-й план, состоящий из Обновления статистики и очистки кэша, и 2-й план который по ночам выполняет дефрагментацию. Вроде все нормально, но сегодня почему-то не отработал первый план http://s04.radikal.ru/i177/1504/b8/b6bb3b807e62.png Вместо двух заданий почему-то просто зеленая галка. Вечером позвонила ГБ, говорит притормаживает 1с. Вопрос собственно, план не выполнился и выполняется? Почему одна галка, без задач?
158 vde69
 
07.04.15
16:05
предположу, что "в процессе" и по этому-же может притормаживать...
159 vde69
 
07.04.15
16:06
или в расписание указали "выполнить один раз"
160 1976vas
 
07.04.15
16:15
(158) Я тоже так думаю, но выполнялось 6-го 2 часа, а сегодня уже весь день с 7 утра, что-то пошло не так?
(159) http://s018.radikal.ru/i509/1504/4c/8a3e76338bd6.png Повторяющееся задание
Видимо задание выполняется, пользователи начинают кричать о тормозах. Если в заданиях Остановить задание, должна отработать остановка?
161 arsik
 
гуру
07.04.15
16:28
Подскажите, как выполнить скрипт из MS SQL 2008 но под другим пользователем? Не тем которым запущен агент. Такое возможно?
162 1976vas
 
07.04.15
16:35
(161) Не знаю точно, но думаю скрипты можно запускать только под учеткой с админскими правами
163 vde69
 
07.04.15
16:36
(161) можно, только я не помню как технология называется....
164 vde69
 
07.04.15
16:38
dts или dto ... не помню точно
165 1976vas
 
07.04.15
16:57
В 15-00 отработал новый план, вроде нормально http://s018.radikal.ru/i523/1504/9b/49a0674fc763.png
Закон Брукера: Даже маленькая практика стоит большой теории.