|
v7: Тормозит при записи номенклатуры | ☑ | ||
---|---|---|---|---|
0
geniusbsd
19.09.21
✎
08:09
|
Добрый День 1С77 ТИС база SQL тормозит при записи элемента справочника Номенклатура, при создании нового элемента или при редактировании старого. Раньше все работало нормально в чем может быть проблема?
|
|||
1
trdm
19.09.21
✎
08:58
|
Отладчик?
|
|||
2
Калиостро
19.09.21
✎
10:19
|
(0) Вставили при записи контроль на уникальность наименования или реквизита?
|
|||
3
Злопчинский
19.09.21
✎
12:06
|
Что меняли в типом по номенклатуре? Если есть возможность - перенумеровать штнтно все карточки.
|
|||
4
серый КТУЛХУ
19.09.21
✎
12:45
|
что говорит замер производительности?
|
|||
5
geniusbsd
19.09.21
✎
14:32
|
Ни каких изменений не было
Отладчиком не получается найти функцию которая тормозит |
|||
6
Джордж1
19.09.21
✎
14:38
|
Не может сработать автонумерация как вариант
|
|||
7
acanta
19.09.21
✎
14:42
|
А что можно сделать с авто нумерацией? Кроме префикса по дате?
|
|||
8
acanta
19.09.21
✎
14:44
|
Фоновым заданием максимальный номер в константу записали, а дальше что?
|
|||
9
серый КТУЛХУ
19.09.21
✎
14:48
|
(8): в семерке нет фоновых заданий
(5): ещё раз, по слогам: (4) |
|||
10
acanta
19.09.21
✎
14:52
|
В 7ке может быть постоянно запущен один сеанс и по расписанию запускаться обработка. Или расписание может быть в виндоус, открывается 7ка, что то выполняется при начале работы системы и закрывается. В эти минуты тоже может тормозить.
|
|||
11
Джордж1
19.09.21
✎
15:01
|
(7)не, при проблемах с автонумерацией - там симптомы - не открывается форма элемента при вводе нового элемента
|
|||
12
Злопчинский
19.09.21
✎
16:06
|
Присоединюсь к (4)
|
|||
13
geniusbsd
19.09.21
✎
18:33
|
(12) Простите за глупый вопрос как сделать замер производительности?
|
|||
14
Джордж1
19.09.21
✎
18:45
|
(13)в отладчике запустить отладку
|
|||
15
geniusbsd
19.09.21
✎
18:57
|
Глобальный модуль 1018 Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл 501987 87.613492 96.92
Справочник.Номенклатура.ФормаСписка.ФормаСписка 64 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(2)); 20 36.643302 40.54 Справочник.Номенклатура.ФормаСписка.ФормаСписка 66 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(4)); 20 35.400506 39.16 Справочник.Номенклатура.ФормаСписка.ФормаСписка 119 Цена = глВернутьЦену(ТекущийЭлемент(), ТипЦены); 4 17.700777 19.58 Вот как то так |
|||
16
acanta
19.09.21
✎
19:14
|
Четыре колонки с разными видами цен в форме списка? Мечта менеджера..
|
|||
17
Ёпрст
19.09.21
✎
19:16
|
(15) вот это непотребность перепиши по-человечьи и будет мгновенное открытие
|
|||
18
geniusbsd
19.09.21
✎
19:38
|
Так проблема не в открытии формы списка Номенклатуры, а в записи элемента
вот процедура вернуть цену Функция глВернутьЦену(Товар, КатегорияЦены) Экспорт Перем ЦеныТовара; Перем Результат; ЦеныТовара = СоздатьОбъект("Справочник.Цены"); ЦеныТовара.ИспользоватьВладельца(Товар); ЦеныТовара.ВыбратьЭлементы(); Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл Если ЦеныТовара.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Если ЦеныТовара.КатегорияЦены = КатегорияЦены Тогда Результат = ЦеныТовара.ТекущийЭлемент(); Прервать; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции |
|||
19
HawkEye
19.09.21
✎
19:54
|
(18) гениальный ход, особенно для вызова из общего списка... кто делал?
|
|||
20
Злопчинский
19.09.21
✎
20:10
|
(18) в типовой такого кода нет. Накорябали кривыми ручками вот и тормозит.
|
|||
21
Злопчинский
19.09.21
✎
20:14
|
Хотя, сорян...
Судя по коду глВернутьЦену это редакция 8.7 И что там делается при записи карточки - надо глядеть отдельно в связи с древностью конфиги. Хотя вот сейчас клиента делаю няшки как раз на такую конфигу - тормозов не замечал |
|||
22
Злопчинский
19.09.21
✎
20:17
|
ГлВернутьЦену можно ускорить. Исползовав Спр.ВыбратьЭлементыПоРеквизиту и сразу спозицион роваться вместо перебора. Но для единичной карточки номенклатуры это некритично будет.
Это так... Попутно |
|||
23
acanta
19.09.21
✎
20:20
|
Для этого требуется галочка отбор по реквизиту, в типовой не было.
|
|||
24
HawkEye
19.09.21
✎
20:24
|
(20) код то типовой, просто он не вызывается из списка справочника 4 раза на строку.....
|
|||
25
geniusbsd
19.09.21
✎
20:26
|
База УРБД на SQL, на ней рабтает 5 лет сеть магазинов 10 торговых точек. тормозов не было, началось буквально месяц назад. изменений в конфигурации ни кто не делал. Размер базы около 30Гб
|
|||
26
acanta
19.09.21
✎
20:29
|
Элементарно, была база с пятью позициями номенклатуры и максимум тремя типами цен и еще одной себестоимости. Документооборот может быть даже очень большой и магазинов много. И вот добавили что либо, как у всех..
|
|||
27
Злопчинский
19.09.21
✎
20:30
|
(23) неправильно. Упомянутая галка требуется для интерактивной установки отбора. А так достаточно только галки сортировка.
|
|||
28
geniusbsd
19.09.21
✎
20:31
|
(24) еще раз говорю в списке проблем нет
|
|||
29
Злопчинский
19.09.21
✎
20:32
|
(25) проведи полный цикл обмена и пр нудительно почисть таблицу 1сапдейтс
|
|||
30
Злопчинский
19.09.21
✎
20:33
|
(28) ещё раз п.4
|
|||
31
HawkEye
19.09.21
✎
20:34
|
(28) так если ты все знаешь, зачем тему создал?))
If there's something strange, In your neighborhood Who you gonna call? Ghostbusters! |
|||
32
geniusbsd
19.09.21
✎
20:49
|
(29) А что это даст проблема не только в периферийной базе но и в центральной.
|
|||
33
geniusbsd
19.09.21
✎
20:50
|
(31) наверное потому что я не смог найти ответ на свой вопрс
|
|||
34
ДенисЧ
19.09.21
✎
20:55
|
"тормозов не было, началось буквально месяц назад"
А не пробовали индексы перестроить, статистику обновить? |
|||
35
geniusbsd
19.09.21
✎
21:01
|
(34) запускал хранимую прцедуру 1sp_DBReindex
|
|||
36
Ёпрст
19.09.21
✎
21:17
|
Ну открой наконец, жуколов, создай элемент, нажми на замер, запиши элемент, нажми на замер ышо раз.
Сымотри стек вызовов Хотя бы |
|||
37
Ёпрст
19.09.21
✎
21:18
|
Ну и профайлер можно натравить, хотя.. это лишнее
|
|||
38
geniusbsd
19.09.21
✎
21:34
|
(36)
Глобальный модуль 1018 Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл 501981 85.191610 51.78 Справочник.Номенклатура.Форма 1328 глЗаписьПериодическихРеквизитов(Контекст); // добавляем небходимые закладки 1 76.893254 46.74 Глобальный модуль 952 ОткрытьФормуМодально("Обработка.ЗаписьПериодическихРеквизитов", Параметр); 1 76.893231 46.74 Справочник.Номенклатура.ФормаСписка.ФормаСписка 66 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(4)); 20 35.653820 21.67 Справочник.Номенклатура.ФормаСписка.ФормаСписка 64 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(2)); 20 34.497887 20.97 Справочник.Номенклатура.ФормаСписка.ФормаСписка 119 Цена = глВернутьЦену(ТекущийЭлемент(), ТипЦены); 4 17.144227 10.42 Глобальный модуль 1019 Если ЦеныТовара.ПометкаУдаления() = 1 Тогда 501967 1.525526 0.93 |
|||
39
Джордж1
19.09.21
✎
21:36
|
Надо в процедуре глВернутьЦену - поставить условие на пустое значение Товар
Сейчас похоже при поиске цен - весь справочник перебирается и так 4 раза |
|||
40
Ёпрст
20.09.21
✎
10:18
|
(38) понятно. У тебя не запись тормозит, а пересчетв форме списка справочника, в котором 500к элементов перебираются каждый раз, еще и мегатормоз периодика.
Заремь в форме списка строки получения цены Цена = глВернутьЦену и проверб, что всё полетело. |
|||
41
Mikeware
20.09.21
✎
10:55
|
+(40) который выполняется после записи элемента...
------------ раз базы SQL - я б посоветовал переписать на прямой запрос, и не трахать мозг. Это быстрее всего. |
|||
42
SiAl-chel
20.09.21
✎
11:06
|
(18), (38) Отстой. Если нет возможности использовать прямые запросы, через 1C++ или ToySQL, то хотя бы вместо выборки элементов надо использовать стандартный (черный) запрос - это в разы должно ускорить получение цены. Ну и конечно использование индексов. Владелец - это уже индексированное поле.
|
|||
43
Mikeware
20.09.21
✎
11:35
|
(42) он по владельцу и отбирает.
|
|||
44
SiAl-chel
20.09.21
✎
11:53
|
(43) Кроме владельца нужен еще отбор по категории цены. Читай внимательно. Ты не выспался что ли?
|
|||
45
Mikeware
20.09.21
✎
12:02
|
(44) индекс по владельцу и другому реквизиту - создается, если галку "сортировка" поставят. Если бы поставили - тогда и отбирали бы ВыбратьЭлементыПоРеквизиту. Раз выбирают просто так - значит, и отборы не стоят, значит и индексов нет.
|
|||
46
SiAl-chel
20.09.21
✎
12:05
|
(45) ВыбратьЭлементы и ВыбратьЭлементыПоРеквизиту - зло. Нужно использовать черный запрос. Я это уже сказал выше. А чтобы запрос ускорился, тогда и надо включать сортировку. Так что не понимаю причину дискуссии.
|
|||
47
Mikeware
20.09.21
✎
12:10
|
(46) Вот! ключевые слова "я не понимаю". Что и требовалось доказать
|
|||
48
серый КТУЛХУ
20.09.21
✎
12:11
|
(47): ну человек не понимает - как это черный запрос может работать медленнее... ну бывает...
|
|||
49
Bigbro
20.09.21
✎
12:16
|
зачем полмиллиона цен лопатятся? я тоже не понимаю.
|
|||
52
SiAl-chel
20.09.21
✎
12:29
|
(49) Во-во.
(48) Ты докажешь, что полмиллионная выборка будет работать быстрее черного запроса? Черный запрос при трансляции вообще-то WHERE накладывает, а выборка в каких случаях накаладывает?. |
|||
56
Ёпрст
20.09.21
✎
13:20
|
(52) Если это выборка по реквизиту, то быстрее
|
|||
57
SiAl-chel
20.09.21
✎
13:22
|
(56) Если включена сортировка, то черный запрос с отбором по этой сортировке все равно будет также работать или быстрее, чем объектная выборка.
|
|||
58
Ёпрст
20.09.21
✎
13:24
|
(57) не быстрее.
|
|||
59
SiAl-chel
20.09.21
✎
13:27
|
(57) У меня на 150 тысячах записей работало быстрее. Так что слово против слова. Да и спецы 1С на ИТС в рекомендациях не советовали использовать объектную выборку там, где можно использовать черный запрос. Хотя и то, и другое прямым запросам проигрывают в разы.
|
|||
60
Ёпрст
20.09.21
✎
13:33
|
(59) Ну вот сразу видно, что ты их не писал.
ВыбратьЭлементыПоРеквизиту, как и НайтиПоРеквизиту делает запрос по индексированному полю, и никак ты это не ускоришь, даже переписав на прямой запрос. Ну разве что, использовав свой самодельный покрывающий индекс. |
|||
61
серый КТУЛХУ
20.09.21
✎
13:33
|
не быстрее.
так что два слова против слова. |
|||
62
Ёпрст
20.09.21
✎
13:33
|
Ну и всяко, чорный запрос проиграет этой конструкции
|
|||
63
HawkEye
20.09.21
✎
13:49
|
(33) так если ты сам не смог найти, имеет смысл послушать, что тебе другие говорят?
могу повторить: проблема не в записи, а в отображении списка... |
|||
64
Злопчинский
20.09.21
✎
17:18
|
(63) тогда пусть тс простестирует открытие редактирование и закрытие карточки не из списка а напрямую
|
|||
65
Злопчинский
20.09.21
✎
17:21
|
(39) и на то что товар не группа?
|
|||
66
Джордж1
20.09.21
✎
17:26
|
(63)Ну автор же написал что проблема только при создании элемента - при чем тут список вообще
|
|||
67
Злопчинский
20.09.21
✎
17:31
|
(66) не, перечитай
|
|||
68
Джордж1
20.09.21
✎
17:44
|
ОткрытьФормуМодально("Обработка.ЗаписьПериодическихРеквизитов", Параметр); 1 76.893231 46.74
тогда вот это надо смотреть еще А я вот не помню - разве в типовых в списке для для всех строк функции отрабатывают. как минимум кэширование должно быть Но функция показа остатков в форме списков вроде есть в ТиС - и включается галочкой |
|||
69
серый КТУЛХУ
20.09.21
✎
17:57
|
(68): никакого кэширования.
слева-направо сверху-вниз по всем видимым строкам |
|||
70
серый КТУЛХУ
20.09.21
✎
17:58
|
(кэширование каждый может сам-сам-сам сделать штатными средствами, не проблема - но тут не тот случай)
|
|||
71
Джордж1
20.09.21
✎
17:59
|
(69)если именно по ВИДИМЫМ - то ничего страшного
|
|||
72
серый КТУЛХУ
20.09.21
✎
18:00
|
(71): на самом деле - страшно. ибо тормозит нещадно.
|
|||
73
Джордж1
20.09.21
✎
18:01
|
(72)это если работать со списком без групп, с группами не так страшно
|
|||
74
Злопчинский
20.09.21
✎
18:42
|
(73) какая разница? Обсчитываются выводимые на экран.
|
|||
75
Джордж1
20.09.21
✎
18:51
|
(73)ну на экран весь справочник не влезет
Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл 501981 85.191610 51.78 вот здесь 501981 - это же количество итераций? явно оно не при выводе на экран отрабатывает - это и заметили бы сразу Что там может происходить того при записи существующего элемента справочника - непонятно |
|||
76
серый КТУЛХУ
20.09.21
✎
20:45
|
(75): и у тебя даже не закрадывается подозрение, что 501981 штука - это тупое перелопачивание всего справочника при ошибочном указании владельца и/или без явной установки работы в режиме иерархии?..
|
|||
77
Джордж1
20.09.21
✎
20:51
|
(76)так я сразу написал это в (39)
Непонятно как такое может быть для уже созданного элемента? |
|||
78
Злопчинский
20.09.21
✎
20:55
|
(77) да хз, когда-то полного не приведено
|
|||
79
DrZombi
гуру
21.09.21
✎
06:06
|
(0) Поздравляю, переходите на прямые запросы :)
|
|||
80
SiAl-chel
21.09.21
✎
08:06
|
(61) Два так два. Мой опыт 8 лет назад на комплексной клюшке на сиквеле в 15 гектар показал, что функция, показывающая текущую среднюю себестоимость в списке номенклатуры из несколько десятков тысяч элементов, после переписывания с выборки на черный запрос ускорилась в 2,5 раза. Заказ был разовый, поэтому клиент отказался от внедрения прямых запросов.
|
|||
81
dmrjan
21.09.21
✎
10:00
|
В MSSQL на чтение возникает блокировка на строку, но когда данных много, то это может увеличивать стоимость запроса в MSSQL. В PostgreSQL другая проблема - несмотря на отсутствие блокировок на чтение, там при каждом обращении в цикле может возникать новая временная таблица. И так и так плохо.
|
|||
82
Злопчинский
21.09.21
✎
10:24
|
https://infostart.ru/1c/articles/76287/
Может пригодится |
|||
83
Злопчинский
21.09.21
✎
10:25
|
(80) а что ты там переписал в списке "из выборки на чорный запрос"?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |