|
V7 производительность | ☑ | ||
---|---|---|---|---|
0
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 |
|||
1
Djelf
07.07.18
✎
11:47
|
А что замер в отладчике показывает?
|
|||
2
Злопчинский
07.07.18
✎
11:57
|
Видимо зависит от места - на Граевке будет быстрее, на Вульке - медленнее... А в Старых Задворцах вообще может не работать.. ,;-)
|
|||
3
Aleksey
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 сек - очень долго.
выкладывайте код. |
|||
7
Eugene_a
07.07.18
✎
12:53
|
график по ядрам:
https://drive.google.com/file/d/1yPJH_soDWujlmBehqnxfI1MZqUUUobuN/view?usp=sharing почему-то приложение работает поочередно на двух правых ядрах. и, действительно, загружает ядро полностью. штатно позже померяю. |
|||
8
Aleksey
07.07.18
✎
13:28
|
(7) Ну вот тебе и ответ.
1С вообще и 7-ка в частности - однопоточная. И если на 8-ке через фоновые задания можно попытаться сэмулировать использования "многоядерности", то 7-ки увы - все упирается в производительности на 1 ядро. Чем она выше, тем быстрее будет работать. Максимум что ты можешь сделать без замены проца и/или его разгона - это закрепить 1с за конкретным ядром, чтобы график не скакал, что даст пару процентов прироста |
|||
9
Salimbek
07.07.18
✎
13:38
|
(7) Да нет проблемы - штатно померить, запускаешь 1С - отладчик, открываешь эту обработку - в начале нужной процедуры ставишь брейкпойнт - запускаешь обработку свою, настраиваешь, как в отладчик выйдешь - нажимаешь Замерить время и запускаешь обработку дальше. Как она отработает - переключаешься в отладчик и останавливаешь замер времени. Результат внимательно смотришь.
З.Ы. Еще удобно пользоваться не ТЗ, а ИндесированнаяТаблица из 1С++ - она иногда супер-круто всяческие задачи закрывала, которые в обычной ТЗ через одно место приходилось решать. Например, отфильтровать по нужному полю. |
|||
10
ildus78
07.07.18
✎
15:21
|
(0) ставь Novell Netware на сервер и будет тебе счастье
|
|||
11
Злопчинский
07.07.18
✎
16:20
|
Как известно
"В Европе три столицы - Москва. Париж и Луховицы", а "лучше Бреста - нету места!" поэтому помочь земляку, автоматизирующему что-то там в Бресте (и не дай бог еще на ж/д) - святое дело! навались, ребята! (знаю что уже в Бресте есть как минимум 2 одноэсника, пора вам вступить в картельный сговор и монополизировать рынок и цены ;-) . Автор, стучись в скайп Zlopun или на [email protected] - помогу (через тимвьювер), по крайней мере, в отладчике скорость померять (ну и в код глянем м.б.) |
|||
12
Eugene_a
07.07.18
✎
23:43
|
Спасибо за помощь, наваливаться не нужно, достаточно хорошего целеуказания. )
Интересно, а где видно, что я из Бреста? Профиль вроде пока пуст. |
|||
13
Eugene_a
07.07.18
✎
23:47
|
(10) новелл вряд ли возможен, так как сервер где-то виртуально крутится с вин2003 и MSSQL, а сеть контролируется контроллером домена и сисадминами. )
|
|||
14
Злопчинский
08.07.18
✎
04:07
|
(12) вы все брестские 1Сники, а ты в особенности, давно у меня под колпаком, я за вами слежу...
|
|||
15
Aleksey
08.07.18
✎
06:03
|
(12) ИМХО, по IP вычислил
|
|||
16
youalex
08.07.18
✎
06:11
|
(12) Все просто. Место проживания указано в регистрационной карточке ФСБ.
|
|||
17
Sserj
08.07.18
✎
06:26
|
(12) Все гораздо проще чем кажется, скриншоты лучше красить надо :)
Я в таких случаях использую 1sqlite. Создаю нужные таблицы в памяти, заполняю их нужными данными запросами из базы. И дальше уже вся работа с памятью запросами к этим таблицам. Скорость формирования в некоторых случаях вырастает на несколько порядков. Это удобнее чем индексированная таблица, так как к своим таблицам можно строить любые запросы и так же создавать любые индексы. |
|||
18
Обработка
08.07.18
✎
11:24
|
(17) "На" или "В" несколько порядков?
|
|||
19
Sserj
08.07.18
✎
12:21
|
(18) Ну порядков все таки "на" перерасчет на "В" это получается "в 10" или в "в 100" изредка получается таки и "в 1000" раз.
|
|||
20
Eugene_a
11.07.18
✎
13:49
|
написал отчет.
данные из двух справочников заполняю в две ТЗ и потом их тупо в циклах обрабатываю. Вроде нигде в циклах к справочникам не обращаюсь, то есть только к ТЗ, но при входе в 1С второго пользователя (с другого компа) начинает работать раз в 100 медленнее. Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме. В чем может быть причина такой разницы в скорости работы? https://drive.google.com/file/d/1zYVcubvGZAZy2LXbFnRHOBMAKYVWYAIs/view?usp=sharing в печатной форме данные только из ТЗ берутся. |
|||
21
Builder
11.07.18
✎
13:53
|
(20) Ответ ты сам сказал - "база DBF на сетевом диске. "
|
|||
22
Builder
11.07.18
✎
13:58
|
(20) "Вроде нигде в циклах к справочникам не обращаюсь"
Ну да ну да..... ТЗ_сотрудники.Сотрудник.Оклад.Получить(дата_цикла) Везде обращение к периодическим реквизитам, а они в 7.7 хранятся в отдельном месте.... |
|||
23
Eugene_a
11.07.18
✎
14:03
|
(22)
то есть периодические реквизиты не попадают в ТЗ как свойство объекта? |
|||
24
Builder
11.07.18
✎
14:11
|
(23) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.
Периодические реквизиты в 7.7 вообще одно из слабых и тормознутых мест. |
|||
25
arsik
гуру
11.07.18
✎
14:47
|
Лучше запросом в ТЗ сразу выбрать все значения реквизитов которые понадобятся, а потом уже обращаться к ним, а не через объект.
|
|||
26
Eugene_a
11.07.18
✎
15:03
|
а, может, есть хранищище в памяти, которое может хранить сразу объект справочника целиком, как в ООП ?
|
|||
27
ptiz
11.07.18
✎
15:11
|
(0) Сделай замер производительности, всё будет видно
|
|||
28
Djelf
11.07.18
✎
15:24
|
(27) Ему об этом уже раз 5 писали...
(26) Вот зачем этот код ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код Выполнять 3 раза? Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати. Причем это можно сделать еще на этапе заполнения ТЗ_сотрудники. |
|||
29
Pit0n_08
11.07.18
✎
17:01
|
(20)"... база DBF на сетевом диске/
Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме. В чем может быть причина такой разницы в скорости работы?..." Отключается кеширование в ОС при немонопольном доступе к файлам - приходится пилить ж/диск. |
|||
30
Djelf
11.07.18
✎
17:25
|
Кеширование то можно вылечить.
v7dbnet в помощь https://cloud.mail.ru/public/C3fY/CWQwnhy5L Это клиент/сервер для файлового варианта. А насчет "быстро" я сомневаюсь. Этот отчет вообще не должен работать быстро. Разве что вытягивать периодические в тз таким образом и крутить уже тз. Периодический.ИспользоватьОбъект("", Справочник.ТекущийЭлемент()); Периодический.ВыбратьЗначения(НачДата,КонДата); Периодический.ВыбратьЗначения(); Пока Периодический.ПолучитьЗначение()=1 Цикл |
|||
31
AliAksA
12.07.18
✎
08:32
|
(11) Брест - конечно, крепость-герой, но столица Полесья - ПИНСК)))
|
|||
32
AliAksA
12.07.18
✎
08:38
|
(20) верни ХР и жизнь наладится ...
|
|||
33
SleepyHead
гуру
12.07.18
✎
08:42
|
Их - за 45 секунд так переживать? Да что с вами, люди.
|
|||
34
vova1122
12.07.18
✎
09:18
|
(33) А вдруг он этот отчет запускает каждые 10 минут...
|
|||
35
Злопчинский
12.07.18
✎
13:26
|
(30) Использование объекта "Периодический" при массовых операциях дает выигрыш ~25%
|
|||
36
Злопчинский
12.07.18
✎
13:27
|
(31) знаменитиые пинские мотобольщики?!
|
|||
37
Eugene_a
12.07.18
✎
20:17
|
(24) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.
то есть если засунуть элементы справочника в ТЗ, а потом в справочнике их изменить, то в ТЗ (то есть по ссылке на справочник) мы увидим изменения? не перезаливая справочник в ТЗ. |
|||
38
Eugene_a
12.07.18
✎
20:21
|
(28) Вот зачем этот код
ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код Выполнять 3 раза? наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета. |
|||
39
Eugene_a
12.07.18
✎
20:43
|
вот если бы можно было узнать даты изменения периодического реквизита без перебора дат в периоде.....
|
|||
40
Eugene_a
12.07.18
✎
21:05
|
(39) Использование объекта "Периодический" позволяет это сделать.
|
|||
41
vova1122
13.07.18
✎
11:17
|
(3) совершенно верно. но не так как вы представляете. В Тз есть ссылка на объект. (на форме отображается только только текст, хотя по сути это ссылка на справочник). Когда вы заполните свою Тз а потом измените Наименование в справочнике, то на форме естественно ничего не поменяется. Но если вызвать например Сообщить(ТЗ_подразделения.Подразделение.Наименование) то получите уже измененное наименование
|
|||
42
vova1122
13.07.18
✎
11:31
|
(41) => (37)
|
|||
43
Djelf
13.07.18
✎
11:37
|
(38) > наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета.
Т.е. успевают мигрировать пока выполняется обработка? оО |
|||
44
Eugene_a
13.07.18
✎
12:08
|
(43) нет, но нужно в отчете отражать каждое их перемещение, а также изменения оклада, режима работы и должности.
Которые происходят хаотично в течение месяца, за который формируется Штатное. И при каждом изменении, например, 12 числа, нужно за 12е число вывести соответствующий отчет с изменениями у всех сотрудников за это число. (а увольнение - за предыдущее рабочее число). То есть листов в отчете может быть от 1 до 31. |
|||
45
hhhh
13.07.18
✎
12:25
|
(44) ну тогда и неудивителдьно, что тормозит. Чего вы хотели?
|
|||
46
Eugene_a
13.07.18
✎
12:37
|
(45) я хотел считать справочник в ТЗ целиком, как объекты в ООП и работать с данными в памяти.
но 1С, как выяснилось, только ссылки на справочник запихивает в ТЗ. Сейчас сделаю ЭТО через объект "Периодический" и будет счастье. |
|||
47
Djelf
13.07.18
✎
12:42
|
(44) Да по коду все понятно. Я о другом.
Ты 3 раза запрашиваешь одно и то же значение. В этом нет смысла, только потеря производительности. Ты вообще (28) читал? > Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный > В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати. И вообще, даже простая замена Подразделение.Код на КодПодразделения=Подразделение.Код и сравнение периодического кода с КодПодразделения уже значительно уменьшит количество запросов к базе. И почитай про оптимизацию http://catalog.mista.ru/public/18924/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |