Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: V7 производительность

Я
   Eugene_a
 
07.07.18 - 11:44
1С 7.70.027 на вин10.
база DBF на сетевом диске.
в ТЗ насасываются данные из справочников, потом по дням обрабатываются эти ТЗ.
отчет работает 45 секунд.

судя по диспетчеру задач, никакой из ресурсов не загружен даже на 50 % (только в помент запуска обработки сеть загружена, пока читаются справочники).

кто не дает обработке работать быстрее?

https://drive.google.com/file/d/13lQ82aV6R1f6dApnid-c9Eq3HvTD022A/view?usp=sharing
 
 
   Djelf
 
1 - 07.07.18 - 11:47
А что замер в отладчике показывает?
   Злопчинский
 
Ведущий
2 - 07.07.18 - 11:57
Видимо зависит от места - на Граевке будет быстрее, на Вульке - медленнее... А в Старых Задворцах вообще может не работать.. ,;-)
   Aleksey
 
3 - 07.07.18 - 12:08
ы проц упирается
я так понимаю 4-х ядерник
   Злопчинский
 
Ведущий
4 - 07.07.18 - 12:10
Для начала замер производительности штатный, потом положи базу на локальный диск для сравнения.

Данные тянешь выборками скорее всего. Каждый объект из выборки в полном объёме тянется из сетевой шары на локальный комп, потом наверняка куча не оптимальности по работе с тз типа много раз найти значение иили удалить строку,,, оно все в комплексе и набежало , а может быть где-то одна хрень глобальная типа на справочник из 1000 человек для каждого дня обрабатывается на каждого человека перебором 10000 записей по табел...  Оппа уже 10 млн телодвижений и все это по сети дергается на каждое телодвижение
   Злопчинский
 
Ведущий
5 - 07.07.18 - 12:13
Цп 4 ядра, итого одно ядро = 25%, оно забито под 100%... 77 не многозадачная, трещит на одном процесс... Закрепи 77 на время выполнения за конкретным процесс ради интереса, получишь процентов 5 добавки к скорости
   МихаилМ
 
6 - 07.07.18 - 12:34
даже на 100 мбит сети - 45 сек - очень долго.

выкладывайте код.
   Eugene_a
 
7 - 07.07.18 - 12:53
график по ядрам:

https://drive.google.com/file/d/1yPJH_soDWujlmBehqnxfI1MZqUUUobuN/view?usp=sharing

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

штатно позже померяю.
   Aleksey
 
8 - 07.07.18 - 13:28
(7) Ну вот тебе и ответ.
1С вообще и 7-ка в частности - однопоточная. И если на 8-ке через фоновые задания можно попытаться сэмулировать использования "многоядерности", то 7-ки увы - все упирается в производительности на 1 ядро. Чем она выше, тем быстрее будет работать.
Максимум что ты можешь сделать без замены проца и/или его разгона - это закрепить 1с за конкретным ядром, чтобы график не скакал, что даст пару процентов прироста
   Salimbek
 
9 - 07.07.18 - 13:38
(7) Да нет проблемы - штатно померить, запускаешь 1С - отладчик, открываешь эту обработку - в начале нужной процедуры ставишь брейкпойнт - запускаешь обработку свою, настраиваешь, как в отладчик выйдешь - нажимаешь Замерить время и запускаешь обработку дальше. Как она отработает - переключаешься в отладчик и останавливаешь замер времени. Результат внимательно смотришь.
З.Ы. Еще удобно пользоваться не ТЗ, а ИндесированнаяТаблица из 1С++ - она иногда супер-круто всяческие задачи закрывала, которые в обычной ТЗ через одно место приходилось решать. Например, отфильтровать по нужному полю.
   ildus78
 
10 - 07.07.18 - 15:21
(0) ставь Novell Netware на сервер и будет тебе счастье
 
 Рекламное место пустует
   Злопчинский
 
Ведущий
11 - 07.07.18 - 16:20
Как известно
"В Европе три столицы - Москва. Париж и Луховицы",
а "лучше Бреста - нету места!"
поэтому помочь земляку, автоматизирующему что-то там в Бресте (и не дай бог еще на ж/д) - святое дело! навались, ребята!
(знаю что уже в Бресте есть как минимум 2 одноэсника, пора вам вступить в картельный сговор и монополизировать рынок и цены ;-)
.
Автор, стучись в скайп Zlopun или на e.meil@mail.ru - помогу (через тимвьювер), по крайней мере, в отладчике скорость померять (ну и в код глянем м.б.)
   Eugene_a
 
12 - 07.07.18 - 23:43
Спасибо за помощь, наваливаться не нужно, достаточно хорошего целеуказания. )

Интересно, а где видно, что я из Бреста?
Профиль вроде пока пуст.
   Eugene_a
 
13 - 07.07.18 - 23:47
(10) новелл вряд ли возможен, так как сервер где-то виртуально крутится с вин2003 и MSSQL, а сеть контролируется контроллером домена и сисадминами. )
   Злопчинский
 
Ведущий
14 - 08.07.18 - 04:07
(12) вы все брестские 1Сники, а ты в особенности, давно у меня под колпаком, я за вами слежу...
   Aleksey
 
15 - 08.07.18 - 06:03
(12) ИМХО, по IP вычислил
   youalex
 
16 - 08.07.18 - 06:11
(12) Все просто. Место проживания указано в регистрационной карточке ФСБ.
   Sserj
 
17 - 08.07.18 - 06:26
(12) Все гораздо проще чем кажется, скриншоты лучше красить надо :)
Я в таких случаях использую 1sqlite. Создаю нужные таблицы в памяти, заполняю их нужными данными запросами из базы. И дальше уже вся работа с памятью запросами к этим таблицам. Скорость формирования в некоторых случаях вырастает на несколько порядков. Это удобнее чем индексированная таблица, так как к своим таблицам можно строить любые запросы и так же создавать любые индексы.
   Обработка
 
18 - 08.07.18 - 11:24
(17) "На" или "В" несколько порядков?
   Sserj
 
19 - 08.07.18 - 12:21
(18) Ну порядков все таки "на" перерасчет на "В" это получается "в 10" или в "в 100" изредка получается таки и "в 1000" раз.
   Eugene_a
 
20 - 11.07.18 - 13:49
написал отчет.
данные из двух справочников заполняю в две ТЗ и потом их тупо в циклах обрабатываю.
Вроде нигде в циклах к справочникам не обращаюсь, то есть только к ТЗ, но при входе в 1С второго пользователя (с другого компа) начинает работать раз в 100 медленнее.
Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме.
В чем может быть причина такой разницы в скорости работы?

https://drive.google.com/file/d/1zYVcubvGZAZy2LXbFnRHOBMAKYVWYAIs/view?usp=sharing

в печатной форме данные только из ТЗ берутся.
   Builder
 
21 - 11.07.18 - 13:53
(20) Ответ ты сам сказал - "база DBF на сетевом диске. "
   Builder
 
22 - 11.07.18 - 13:58
(20) "Вроде нигде в циклах к справочникам не обращаюсь"
Ну да ну да.....
ТЗ_сотрудники.Сотрудник.Оклад.Получить(дата_цикла)
Везде обращение к периодическим реквизитам, а они в 7.7 хранятся в отдельном месте....
   Eugene_a
 
23 - 11.07.18 - 14:03
(22)
то есть периодические реквизиты не попадают в ТЗ как свойство объекта?
   Builder
 
24 - 11.07.18 - 14:11
(23) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.
Периодические реквизиты в 7.7 вообще одно из слабых и тормознутых мест.
   arsik
 
25 - 11.07.18 - 14:47
Лучше запросом в ТЗ сразу выбрать все значения реквизитов которые понадобятся, а потом уже обращаться к ним, а не через объект.
   Eugene_a
 
26 - 11.07.18 - 15:03
а, может, есть хранищище в памяти, которое может хранить сразу объект справочника целиком, как в ООП ?
   ptiz
 
27 - 11.07.18 - 15:11
(0) Сделай замер производительности, всё будет видно
   Djelf
 
28 - 11.07.18 - 15:24
(27) Ему об этом уже раз 5 писали...

(26) Вот зачем этот код
ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код
Выполнять 3 раза?
Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный
В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати.
Причем это можно сделать еще на этапе заполнения ТЗ_сотрудники.
   Pit0n_08
 
29 - 11.07.18 - 17:01
(20)"... база DBF на сетевом диске/
Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме.
В чем может быть причина такой разницы в скорости работы?..."
Отключается кеширование в ОС при  немонопольном доступе к файлам - приходится пилить ж/диск.
   Djelf
 
30 - 11.07.18 - 17:25
Кеширование то можно вылечить.
v7dbnet в помощь https://cloud.mail.ru/public/C3fY/CWQwnhy5L
Это клиент/сервер для файлового варианта.

А насчет "быстро" я сомневаюсь. Этот отчет вообще не должен работать быстро. Разве что вытягивать периодические в тз таким образом и крутить уже тз.

Периодический.ИспользоватьОбъект("", Справочник.ТекущийЭлемент());
Периодический.ВыбратьЗначения(НачДата,КонДата);
Периодический.ВыбратьЗначения();
Пока Периодический.ПолучитьЗначение()=1 Цикл
   AliAksA
 
31 - 12.07.18 - 08:32
(11) Брест - конечно, крепость-герой, но столица Полесья - ПИНСК)))
   AliAksA
 
32 - 12.07.18 - 08:38
(20) верни ХР и жизнь наладится ...
   SleepyHead
 
33 - 12.07.18 - 08:42
Их - за 45 секунд так переживать? Да что с вами, люди.
 
 
   vova1122
 
34 - 12.07.18 - 09:18
(33) А вдруг он этот отчет запускает каждые 10 минут...
   Злопчинский
 
Ведущий
35 - 12.07.18 - 13:26
(30) Использование объекта "Периодический" при массовых операциях дает выигрыш ~25%
   Злопчинский
 
Ведущий
36 - 12.07.18 - 13:27
(31) знаменитиые пинские мотобольщики?!
   Eugene_a
 
37 - 12.07.18 - 20:17
(24) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.

то есть если засунуть элементы справочника в ТЗ,
а потом в справочнике их изменить,
то в ТЗ (то есть по ссылке на справочник) мы увидим изменения?
не перезаливая справочник в ТЗ.
   Eugene_a
 
38 - 12.07.18 - 20:21
(28) Вот зачем этот код
ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код
Выполнять 3 раза?

наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета.
   Eugene_a
 
39 - 12.07.18 - 20:43
вот если бы можно было узнать даты изменения периодического реквизита без перебора дат в периоде.....
   Eugene_a
 
40 - 12.07.18 - 21:05
(39) Использование объекта "Периодический" позволяет это сделать.
   vova1122
 
41 - 13.07.18 - 11:17
(3) совершенно верно. но не так как вы представляете. В Тз есть ссылка на объект. (на форме отображается только только текст, хотя по сути это ссылка на справочник). Когда вы заполните свою Тз а потом измените Наименование в справочнике, то на форме естественно ничего не поменяется. Но если вызвать например  Сообщить(ТЗ_подразделения.Подразделение.Наименование) то получите уже измененное наименование
   vova1122
 
42 - 13.07.18 - 11:31
(41) => (37)
   Djelf
 
43 - 13.07.18 - 11:37
(38) > наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета.

Т.е. успевают мигрировать пока выполняется обработка? оО
   Eugene_a
 
44 - 13.07.18 - 12:08
(43) нет, но нужно в отчете отражать каждое их перемещение, а также изменения оклада, режима работы и должности.
Которые происходят хаотично в течение месяца, за который формируется Штатное.
И при каждом изменении, например, 12 числа, нужно за 12е число вывести соответствующий отчет с изменениями у всех сотрудников за это число. (а увольнение - за предыдущее рабочее число).
То есть листов в отчете может быть от 1 до 31.
   hhhh
 
45 - 13.07.18 - 12:25
(44) ну тогда и неудивителдьно, что тормозит. Чего вы хотели?
   Eugene_a
 
46 - 13.07.18 - 12:37
(45) я хотел считать справочник в ТЗ целиком, как объекты в ООП и работать с данными в памяти.
но 1С, как выяснилось, только ссылки на справочник запихивает в ТЗ.

Сейчас сделаю ЭТО через объект "Периодический" и будет счастье.
   Djelf
 
47 - 13.07.18 - 12:42
(44) Да по коду все понятно. Я о другом.
Ты 3 раза запрашиваешь одно и то же значение.
В этом нет смысла, только потеря производительности.
Ты вообще (28) читал?
> Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный
> В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати.

И вообще, даже простая замена Подразделение.Код на КодПодразделения=Подразделение.Код и сравнение периодического кода с КодПодразделения уже значительно уменьшит количество запросов к базе.

И почитай про оптимизацию  http://catalog.mista.ru/public/18924/



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует