Имя: Пароль:
1C
1С v8
Скорость 82 при записи в РС...
,
0 ДенисЧ
 
06.10.12
12:26
Есть УППырище... База объёмная... Провожу РСВ.
Дохожу до места решения СЛУ, там, где она в РС УзлыКорректировкиСтоимостиСписания пишет данные для решения... И натыкаюсь на странный факт... 5000 записей в регистр записываются полторы минуты... Чтоза? Почему так? На сервере памяти много, диски SAS, процы тоже неслабые... А вот такая вот... Куда можно начинать копать?
1 ProgAL
 
06.10.12
12:35
Переиндексиовать базу, обновить статистики. Все как у Гилева на сайте.
2 ДенисЧ
 
06.10.12
12:36
(1) Индексация еженедельно (то есть этой ночью прошла), статистики все 4 раза в сутки обновляются с FULL scan
3 vmv
 
06.10.12
13:10
"попахивает кривым проектированием"

сливай состав и свойства РС в студию будем возить фейсам аб тейбал - будь мужиком не очкуй)
4 Fragster
 
гуру
06.10.12
13:11
(0) посмотри, что там с основным отбором... может у тебя получается 5к наборов записывается
5 ДенисЧ
 
06.10.12
13:12
(3) А не меня нужно возить :-) А разработчиков с Селезнёвской :-))
6 ДенисЧ
 
06.10.12
13:13
7 ДенисЧ
 
06.10.12
13:14
(4) регистр подчинён регшистратору. Количество смотрю по НаборЗаписей.Количество() перед НаборЗаписей.Записать(). Если этому верить нельзя, то кому?
8 Fragster
 
гуру
06.10.12
13:14
(6) какие там с основным отбором и как пишешь, через менеджер записи или через набор?
9 Fragster
 
гуру
06.10.12
13:15
а, у подчиненных нету основного отбора, да... тогда непонятно
10 ДенисЧ
 
06.10.12
13:15
причем такая мерзость...
http://pics.rsh.ru/img/msg_8lzep.jpg
11 Fragster
 
гуру
06.10.12
13:16
сколько там наборов? может есть что в модуле нбора записей?
12 Fragster
 
гуру
06.10.12
13:16
может блокировки? какой режим записи?
13 Fragster
 
гуру
06.10.12
13:16
управляемый или автоматический?
14 Fragster
 
гуру
06.10.12
13:17
одна ли транзакция?
15 ДенисЧ
 
06.10.12
13:17
(8) где-то так

НаборЗаписей = РегистрыСведений.УзлыКорректировкиСтоимостиСписания.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегламентныйДокумент);
НаборЗаписей.Записать(Истина);
       
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
   НовыйУзел = НаборЗаписей.Добавить();
   НовыйУзел.НомерУзла = НомерУзла;
   НовыйУзел.Регистратор = РегламентныйДокумент;
   НовыйУзел.Период = РегламентныйДокумент.Дата;
   ЗаполнитьЗначенияСвойств(НовыйУзел,Выборка);
           
   Если НаборЗаписей.Количество() >= 5000 Тогда
       Мой_СообщенияИзФона.ДобавитьСообщение("", "ПроведениеРСВ", "Очередная порция записей корректировки, записей " + НаборЗаписей.Количество() + " / обработано " + КоличествоЭлементовВНаборе);
       НаборЗаписей.Записать(ложь);
       НаборЗаписей.Очистить();
   КонецЕсли;
КонецЦикла;    
       
  Мой_СообщенияИзФона.ДобавитьСообщение("", "ПроведениеРСВ", "Последняя порция записей корректировки, записей " + НаборЗаписей.Количество() + " / обработано " + КоличествоЭлементовВНаборе);
НаборЗаписей.Записать(ложь);
НаборЗаписей.Очистить();
16 ДенисЧ
 
06.10.12
13:18
Блокировки автоматические, транзакции нет, в модуле пусто
17 Fragster
 
гуру
06.10.12
13:19
внимание вопрос знатокам: почему не пишешь одной порцией?
18 Fragster
 
гуру
06.10.12
13:19
ну и да - лучше через Набор.Загрузить(Результат.Выгрузить())
19 vmv
 
06.10.12
13:20
(15) странный код, т.е. я хотел сказать стремный - я бы снял премию до НГ за такое
20 H A D G E H O G s
 
06.10.12
13:20
(19) Че странного?
21 H A D G E H O G s
 
06.10.12
13:21
(15) Покажи время самой последней записи, которая не 5000 элементов содержит
22 H A D G E H O G s
 
06.10.12
13:21
(15) Паралельными вычислениями занимаешься?
23 Fragster
 
гуру
06.10.12
13:22
я бы профайлером покурил, как он номер строки определяет при Набор.Записать(ложь)... вполне может быть, что он сначала все читает, а потом все записывает
24 Fragster
 
гуру
06.10.12
13:22
(22) параллельно это у него никогда незапишется
25 ДенисЧ
 
06.10.12
13:23
(17) Блокировки. Это всё в фоне на фоне :-) работы пользователей происходит
26 ДенисЧ
 
06.10.12
13:23
(19) Снимай. Адрес ты знаешь :-)
27 Fragster
 
гуру
06.10.12
13:24
(25) переходи на управляемый режим, и забудь про блокиовки
28 Fragster
 
гуру
06.10.12
13:24
(27)+ относительно, конечно...
29 ДенисЧ
 
06.10.12
13:24
30 vmv
 
06.10.12
13:25
(20) набор бухнет и перезаписывается - образно это можно представить как ширик, который надувают и паникуют разорвет он вдувателя или нет)

делаем ставки!
31 ДенисЧ
 
06.10.12
13:25
(27) Не прокатит. Всё равно будут. Ибо это не документ с 2мя строчками. А РСВ за месяц.
32 Fragster
 
гуру
06.10.12
13:26
(31) ну если тебя устраивает блокировка этого регистра на пол часика, то оно конечно, да. Пробовал писать одним набором?
33 H A D G E H O G s
 
06.10.12
13:27
(29) Глонасс какой-то. Последний несколько 5000-ников у тебя по 3-4 секунды пишутся. Не анализировал почему?
34 ДенисЧ
 
06.10.12
13:27
(32) меня не устраивает. Именно поэтому и пишу частями. Одним набором пробовал. На некоторых объёмах - просто захлёбывается и может висеть часами
35 ДенисЧ
 
06.10.12
13:27
(33) Дык я поэтому ветку и завёл, что сам понять не могу.
36 Fragster
 
гуру
06.10.12
13:29
убери подчиненность регистратору, добавь поле "Регистратор" , "ведущее", поставь основной отбор по регистратору, периоду (если есть) и по какому нибудь одному разделителю, чтобы примерно поделить все на 20 кусков. хоть поле с типом "число" делай. тогда сможешь вообще фоновым одновременно все наборы записать
37 Fragster
 
гуру
06.10.12
13:29
38 ДенисЧ
 
06.10.12
13:30
(36) ... и забей на обновления :-)
39 Fragster
 
гуру
06.10.12
13:30
(38) прям этот регистр так часто обновляется...
40 Fragster
 
гуру
06.10.12
13:31
если свой колонку не добавлять, а основной отор у имеющихся ставить - то код в других местах вооьбще не надо будет менять
41 H A D G E H O G s
 
06.10.12
13:31
(39) Это круто. Только причину тормозов не выяснит.
Вернее, все бы было хорошо, если бы не последние строки в (29)
42 ДенисЧ
 
06.10.12
13:31
(39) Не часто, эт точно... Только если сделать так, то ещё куски придётся дописывать, и не факт, что не пропущу чего-то
43 Fragster
 
гуру
06.10.12
13:31
(41) причина - чтение этого регистра в другой странзакции
44 vmv
 
06.10.12
13:31
Вброс)

с этим разбухаловом по-моему простая запись в цикле через менеджер записи отработала бы быстрее, чем колбасня с наборами по 5К. Ведь БД пофик на ваши методы, когда идет физическая забись она все эти кучи вынуждена сканить
45 Fragster
 
гуру
06.10.12
13:32
надо (23)
46 ДенисЧ
 
06.10.12
13:33
(43) Ничкто его не читает в этот момент. Это точно.
47 H A D G E H O G s
 
06.10.12
13:34
(43) Так. Момент. У него же в одном фоновом эта вещь идет, последовательно. Кто еще читает в другой транзакции?
48 Fragster
 
гуру
06.10.12
13:35
(47) да виг знает, кто-то отчет по стоимости впродукции какой-ниьт запустил...
49 Fragster
 
гуру
06.10.12
13:35
лил бэкап инкрементальный раз в час
50 Fragster
 
гуру
06.10.12
13:36
или дофига чего еще. лично мне в этой ветке интересно (23)
51 vmv
 
06.10.12
13:36
наводка

попробуй создавать переменную набора и в цикле, а не использовать объявленную общую перед ним. "чистая" переменная набора никак не будет модифицировать деструкторами и прочими не очевидными сущностями
52 ДенисЧ
 
06.10.12
13:36
(48) Этот РС ни в каких отчётах не используется. ТОлько для проведения РСВ. А его в базе запускают только 2 человека - я и ГБ. Его на работе нет.
53 ДенисЧ
 
06.10.12
13:37
(51) можно попробовать... Когда эта итерация закончится.
54 H A D G E H O G s
 
06.10.12
13:37
(50) Надо потестить.
55 H A D G E H O G s
 
06.10.12
13:38
Еще хочу у нас опционально запилить в толпе фоновых УдалениеДвижений по твоей идее, а может че придумать аналогичное для ЗаписатьНаСервере(), но там думать надо.
56 H A D G E H O G s
 
06.10.12
13:38
У нас 8.2 :-)
57 ДенисЧ
 
06.10.12
13:39
Да, 1с 8.2.13.219
58 ДенисЧ
 
06.10.12
13:39
Естественно, скуль. 64бит сервер, МССКЛ 2008R2
59 Fragster
 
гуру
06.10.12
13:39
(55) если наборов много, то оно в проц сервера 1с упирается, у меня из-за этого все тупило. как сделал 3 "потока", заработало нормально
60 H A D G E H O G s
 
06.10.12
13:40
(59) А ЗаписатьНаСервере() не переводил?
61 Fragster
 
гуру
06.10.12
13:40
(58) Попробуй 1 набор и не построчно, а Загрузить(Результат.Выбрать). Естесственно, в результат добавить нужные колонки.
62 ДенисЧ
 
06.10.12
13:41
(61) я ж говорю. На определённых объёмах (которых у меня в августовском периоде есть) оно просто затыкается.
63 H A D G E H O G s
 
06.10.12
13:43
(59)
ПолныеПрава.ЗаписатьНаборЗаписейНаСервере()
64 H A D G E H O G s
 
06.10.12
13:43
(63) Я вот про эту типовую процедуру
65 Fragster
 
гуру
06.10.12
13:43
(62) может оно засвопивается просто? все равно я бы писал не по 5к, а по наборам измерений (по одному значению) и убрал бы цикл 1сный по каждой записи - он тормозит раз в 5
66 H A D G E H O G s
 
06.10.12
13:44
(65) Да ну там цикл заполнения вряд ли тормозит, об этом говорит 3 секунды записи последних 5000-х наборов.
67 Fragster
 
гуру
06.10.12
13:44
(63) у меня нет такого - у меня адская самописка, в которой работает при этом в центре около 100 юзеров + в филиалах на файловых размером в десятки гигов по 5-10 юзеров... пытаюсь сделать так, чтобы все не умерло, особенно к новому году, когда за декабрь делается треть годового оборота
68 Fragster
 
гуру
06.10.12
13:48
а сколько раз повторилась картина как в сабже - быстро, тормозит, совсем тормозит, снова быстро? может вспышки на солнце, реально?
69 ДенисЧ
 
06.10.12
13:50
(68) С тех пор как я вставил оный код, чтобы можно было мониторий - практически постоянно.
70 Fragster
 
гуру
06.10.12
13:52
(69) вставь задержку в 1 секунду после записи набора, например через вызов веб странички, по последнему образцу из Книга знаний: Перепроведение документов в 1С:Предприятие без блокировки других пользователей
71 Fragster
 
гуру
06.10.12
13:52
вдруг какой-нибудь кэш засирается и не успевает освободиться
72 Fragster
 
гуру
06.10.12
13:55
ну и (23)
73 ДенисЧ
 
06.10.12
13:57
(70) дык там эта пауза есть, наверное... Пока очередные 5000 заполняются. А веб вызвать с сервера не получится, ему никуда ходу нет :-)
74 Fragster
 
гуру
06.10.12
13:58
(73) шо, и ИИСа нет?
75 ДенисЧ
 
06.10.12
13:59
(74) а назафея он мне на том сервере? Да и вообще в сети?
76 Fragster
 
гуру
06.10.12
13:59
просто может не хватает паузы. а веб сервер - потому что не знаю, как сделать на сервере 1с паузу нормально...
77 Fragster
 
гуру
06.10.12
14:00
ну, попробуй сделать с загрузкой проца - что-то типа
ЦелевоеВремя = ТекущаяДата()+2
пока ТекущаяДата() < ЦелевоеВремя  Цикл ; КонецЦикла;
78 Fragster
 
гуру
06.10.12
14:00
(77) посмотри, не станет ли "начало тормозов" не в 20к, а позже
79 ДенисЧ
 
06.10.12
14:02
попробую, когда эта итерация закончится. Не хочется прерывать, пусть считает пока...
80 neckto
 
06.10.12
14:12
(0) Во - первых, судя по картинкам 1,5 минуты пишется 85к записей. Во-вторых, цель какая? Оптимизируешь РСВ? И что, это самое узкое место алгоритма?
81 neckto
 
06.10.12
14:12
Глянул свою базу, у меня чуть меньше записей - 70к, РСВ после оптимизации считался 20 минут, имхо +-1.5 минуты не принципиально
82 ДенисЧ
 
06.10.12
14:14
(80) Не столько оптимизирую, сколько пытаюсь вообще сделать расчёт...
(81) а покажи мне результат выбрать количество(*) из РегистрНакопления.УчетЗатрат где ПЕРИОД МЕЖДУ НАЧАЛОПЕРИОДА(&НачДата, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонДата, ДЕНЬ) за какой-нибудь средний месяц?
83 Fragster
 
гуру
06.10.12
14:18
(79) попробуй пилить еще не по 5к, а по изменившемуся значению первого измерения, когда записей больше 5к
84 neckto
 
06.10.12
14:18
(82) А что это даст?
85 ДенисЧ
 
06.10.12
14:19
(84) сравнить объём расчётов...
86 Fragster
 
гуру
06.10.12
14:19
(83)+ естественно, выборка должна быть отсортирована по измерениям в порядке их слдедования в конфигураторе
87 ДенисЧ
 
06.10.12
14:20
(83) первое измерение - это аналитикаВидаУчета, а их там всего 3-4...
88 Fragster
 
гуру
06.10.12
14:20
(87) тогда по первому и второму...
89 Fragster
 
гуру
06.10.12
14:21
и вообще - нет ли там "индексов" и "индексов с доп. упорядочиванием"?
90 ДенисЧ
 
06.10.12
14:21
(88) А по первому и второму - доза получится существенно меньше 5000 :-)
91 neckto
 
06.10.12
14:22
Для чистоты эксперимента, по той же организации и в том же месяце, где 70к записей в регистре Узлы корректировки, количество записей в рег Учет затрат регл = 5 334 775
92 ДенисЧ
 
06.10.12
14:22
(89) Индексы есть. По всем измерениям...
93 ДенисЧ
 
06.10.12
14:22
(91) Значит, аналитика менее развёрнутая, чем у нас...
94 Fragster
 
гуру
06.10.12
14:22
(92) а запросы, которые их используют, есть?
95 Fragster
 
гуру
06.10.12
14:23
жалко, что итерация такая долгая.
96 ДенисЧ
 
06.10.12
14:23
(94) а как же. В том же РСВ. Ведь туда данные пишут не для того, чтобы они просто лежали... Они потом активно в решении СЛУ используются
97 neckto
 
06.10.12
14:31
Начиная с 1.3.22 это регистр не используется
98 neckto
 
06.10.12
14:37
(93) Запрос показал не развернутость аналитики, а количество записей в регистре. Правильно будет сравнивать количество уникальных записей.
99 H A D G E H O G s
 
06.10.12
14:43
Скажи это процедуре
РешитьСЛУБезИспользованияВременныхТаблиц ОМ ОбщийМодуль
100 Нууф-Нууф
 
06.10.12
14:44
100
101 H A D G E H O G s
 
06.10.12
14:45
Офигеть, они осилили Гаусса-Зеделя.
Респект таким пацанам!
102 МуМу
 
06.10.12
15:04
Я так понимаю что каждые 5000 записей отрабатывают с увеличивающимся временем? Судя по скрину (10)
103 Fragster
 
гуру
06.10.12
15:12
(102) нет
104 kuromanlich
 
06.10.12
15:36
(101) согласись что программировать четкую математиескую логику не так сложно, тем более что данные на входе не меняются, четкае дано, четкое решение, четкий результат
105 Fragster
 
гуру
06.10.12
15:46
как там?
106 ДенисЧ
 
06.10.12
16:04
(105) плохо. Отвалилось на блокировках :-(
Перезапускаю уже с внесёнными изменениями...
Правда, теперь основное время - на распределении косвенных затрат... Продолжаю наблюдение.
107 ДенисЧ
 
06.10.12
16:05
(102) до определенного момента. Смотри скрин ниже.
108 ДенисЧ
 
06.10.12
16:43
хм.. Перезапустил с изменениями - тормозов нет...
ЧОртего знает...
109 Fragster
 
гуру
06.10.12
16:51
(108) изменения какие? все-все-все?
110 ДенисЧ
 
06.10.12
16:52
нет, только паузу...
111 ДенисЧ
 
06.10.12
16:52
а, ещё, создание набора в цикле...
112 pumbaEO
 
06.10.12
16:54
(111) осталось теперь убарть паузу и перезапустить ...
113 pumbaEO
 
06.10.12
16:54
*убрать
114 ДенисЧ
 
06.10.12
17:11
(112) Посчитается - презапущу...
115 DarKySiK
 
06.10.12
17:37
(114) ну чего там? интересно ж..
116 ДенисЧ
 
06.10.12
17:46
(115) читай выше - считает очень долго.
117 Torquader
 
06.10.12
17:50
Разное время выполнения одинаковых запросов может быть из-за различия в структуре индексов, если выборка выполняется по различным данным.
А дисковая подсистема у вас исправна - может быть - обращение в одно место диска идёт медленнее, чем в другое ?
118 ДенисЧ
 
06.10.12
17:53
(117) Насчет дисков - не совем уверен - админ ну прямо как тот студент у доцента... А сам я туда не полезу. Хотя то, что дисковая очередб захлётстывает под 50 - уже о чём-то говорит...
119 Fragster
 
гуру
06.10.12
18:07
(118) о_О
120 Torquader
 
06.10.12
18:12
(118) Просто я видел диски, которые "очень странно работают" - у них время доступа возрастает в разы, а никаких ошибок в SMART-е не отображается.
Если RAID, то он работает со скоростью самого медленного диска.
Хотя, я даже не знаю, как можно реально на системе проверить скорость доступа к диску посекторно без запуска тестов.
121 Fragster
 
гуру
06.10.12
19:05
(118) 50 - это типа на графике perfmon 50%, или это значение, которое в окошке под графиком справа рисуется?
122 ДенисЧ
 
06.10.12
19:18
(121) это типа число. Проценты от единиц я отличаю.
123 ДенисЧ
 
06.10.12
19:19
(120) Нет, на дисках с данными - не рейд.
124 Fragster
 
гуру
06.10.12
19:23
(122) тогда это ПЦ
125 lepesha
 
06.10.12
19:24
(123) Копию базы на рамдрайв или ссд для теста сможешь разместить и проверить для того, чтобы понять, что дело не в железе?
126 ДенисЧ
 
06.10.12
19:28
(125) нет. Памяти 32Г, вся забивается скулем и рпхостом.
(124) думаешь, диски дохнут и мне следует от души отпинать админа?
127 ДенисЧ
 
06.10.12
19:29
Кстати... По статистике скуля, темпдб по уровню использования обгоняет основную базу на 2 порядка...
128 Fragster
 
гуру
06.10.12
19:32
(127) а он у тебя не на быстрых дисках, чтоли?
129 Fragster
 
гуру
06.10.12
19:33
(126) ну, я ЕНИП больше 12 не видел- и тогда это было очень много одновременных запросов
130 ДенисЧ
 
06.10.12
19:35
(128) на SAS. Вроде достаточно быстрые выбирали.
131 Fragster
 
гуру
06.10.12
19:38
а там на самом сервере дефрагментация не крутится или что еще крутое?
132 ДенисЧ
 
06.10.12
19:43
нет
133 Fragster
 
гуру
06.10.12
19:48
(132) т.е. всю загрузку дает скуль?
134 Fragster
 
гуру
06.10.12
19:48
кстати, физически скуль и 1с сервер на одной машине?
135 Fragster
 
гуру
06.10.12
19:50
если есть доступ до сервака, посмотри process explorer'ом кто дает основную нагрузку на диск. вполне может быть, что это сервер 1с свопится, если это одна машина, так как скуль все сожрал
136 shuhard
 
06.10.12
19:54
(130) ты бы выложил кривые монитора производительности на http://3nity.ru/viewforum.php?f=40&sid=9d0a13fba905d6e5c06476de83dd4c29

вдруг симптомы типовые ?
137 ДенисЧ
 
06.10.12
20:09
(133) сутя по всему - да. (все - это перфмон)
(134) да
(136) скуль память уграничен, основную память жрут рпхосты.
(136) хм.... Их поймать надо ещё :-) А за ссылку спасибо, буду ловить и шотить
138 shuhard
 
06.10.12
20:40
(137)[скуль память уграничен, основную память жрут рпхосты. ]
ээ
а сколько же ты памяти отдал сиквелу и не свопингует ли последний ?
139 ДенисЧ
 
06.10.12
20:54
(138) гигов 20 отдал, не пожалел... При размере базы в 40.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший