|
|
|
ERP 2.5.22.114 Сервер слаб или запрос слишком ? | ☑ | ||
|---|---|---|---|---|
|
0
Мультук
гуру
30.10.25
✎
17:14
|
Вопрос риторический: как это должно работать ?
Мопед не мой (с) Для тех кто читает темы по диагонали -- запрос из ДоходыИРасходыСервер.ТекстЗапросаТаблицаПоступленияТоваров() ВЫБРАТЬ УчетСебестоимости.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, УчетСебестоимости.АналитикаУчетаНоменклатуры.СкладскаяТерритория КАК Склад, УчетСебестоимости.Период КАК Период, УчетСебестоимости.Регистратор КАК ДокументПоступления, ПриобретениеТоваровУслугТовары.ЗаказПоставщику КАК ЗаказПоставщику, СУММА(УчетСебестоимости.Количество) КАК Количество, СУММА(УчетСебестоимости.СтоимостьРегл) КАК Стоимость ИЗ РегистрНакопления.СебестоимостьТоваров КАК УчетСебестоимости ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары ПО УчетСебестоимости.Регистратор = ПриобретениеТоваровУслугТовары.Ссылка И УчетСебестоимости.ИдентификаторСтроки = ПриобретениеТоваровУслугТовары.ИдентификаторСтроки ГДЕ УчетСебестоимости.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетСебестоимости.Активность И УчетСебестоимости.Организация = &Организация И УчетСебестоимости.РазделУчета В ( ЗНАЧЕНИЕ(Перечисление.РазделыУчетаСебестоимостиТоваров.ТоварыНаСкладах), ЗНАЧЕНИЕ(Перечисление.РазделыУчетаСебестоимостиТоваров.СобственныеТоварыВПути)) И ТИПЗНАЧЕНИЯ(УчетСебестоимости.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг) СГРУППИРОВАТЬ ПО УчетСебестоимости.АналитикаУчетаНоменклатуры.Номенклатура, УчетСебестоимости.АналитикаУчетаНоменклатуры.СкладскаяТерритория, УчетСебестоимости.Период, УчетСебестоимости.Регистратор, ПриобретениеТоваровУслугТовары.ЗаказПоставщику ИМЕЮЩИЕ СУММА(УчетСебестоимости.Количество) > 0 И СУММА(УчетСебестоимости.СтоимостьРегл) > 0 |
|||
|
1
p-soft
30.10.25
✎
11:35
|
нормальный задел для будущих гениальных оптимизаций
|
|||
|
2
Бычье сердце
30.10.25
✎
11:37
|
(0)
Какие текущие показатели? |
|||
|
3
unenu
30.10.25
✎
11:38
|
(0) На демо-базе работать будет.
Для презентаций и успешных переговоров на внедрении норм. |
|||
|
4
RomanYS
30.10.25
✎
11:43
|
(0) откуда запрос?
"ГДЕ" можно/нужно заменить на "И" |
|||
|
5
Мультук
гуру
30.10.25
✎
11:48
|
(2)
Спасибо. Буду смотреть дальше. Строк вроде немного. Что же оно дохнет то на join ? ВЫБРАТЬ Количество(*) ИЗ РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров ГДЕ ТИПЗНАЧЕНИЯ(СебестоимостьТоваров.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг) = 1 млн строк "с копейками" Всего в ССТ 40 млн строк |
|||
|
6
scanduta
30.10.25
✎
11:55
|
(0) Ну я думаю просто 1с пытается экономить на разработчиках, скорее всего такой код пишут студентики
|
|||
|
7
Мультук
гуру
30.10.25
✎
12:04
|
(4)
1) ERP 2.5.22.114 Раньше запрос был проще, а) строился по РегистрНакопления.СебестоимостьТоваров.Обороты б) Сейчас его улучшили, чтобы достать "ЗаказПоставщику" "Стек" вызовов МенеджерОбменаЧерезУниверсальныйФормат.ПТиУ_РасширенныеДанныеИБ РасшифровкаДопРасходов = ДоходыИРасходыСервер.РаспределениеРасходовНаСебестоимостьТоваров(ДанныеИБ.Ссылка); ДоходыИРасходыСервер.ТекстЗапросаТаблицаПоступленияТоваров() 2) Про "ГДЕ" я не понял, прости. :-( 3) Я разберусь. Тема скорее "а вдруг я чудак, смотрю не туда, думаю не головой и не вижу внутренный красоты запроса" |
|||
|
8
H A D G E H O G s
30.10.25
✎
11:56
|
(5) план запроса надо смотреть. Вдруг он отсортировать во временной таблице твой регистр для мерджеджойна пытается...
|
|||
|
9
H A D G E H O G s
30.10.25
✎
12:03
|
Но план запроса вы так просто не соберете изза skip trace
|
|||
|
10
RomanYS
30.10.25
✎
12:07
|
(7) "2) Про "ГДЕ" я не понял..."
Соединение внутреннее -> все условия из ГДЕ можно перенести в условия соединения. |
|||
|
11
Мультук
гуру
30.10.25
✎
12:12
|
(10)
Всегда считал, что оптимизатору в случае "ВНУТРЕННЕЕ СОЕДИНЕНИЕ" должно быть совершенно всё-равно находятся условия в ПО или в ГДЕ |
|||
|
12
H A D G E H O G s
30.10.25
✎
12:16
|
(11) Кэш плана запроса поменяется, скомпилируется новый план, вдруг попадет в статистику - профит :-)
|
|||
|
13
H A D G E H O G s
30.10.25
✎
12:17
|
У меня mssqlprofiler болтается в панели задач по дефолту. Как вы без него живете ?
|
|||
|
14
Мультук
гуру
30.10.25
✎
12:25
|
(12)
Вдруг это хорошо. Но на следующую ночь белые уйдут, придут красные и всё с начала. (13) а) Не сыпь мне соль на рану :-( б) Я могу на всякие интимные вопросы отвечать, но не на все :-) |
|||
|
15
ЕRPe
30.10.25
✎
15:21
|
(0) ПО ВЫРАЗИТЬ(УчетСебестоимости.Регистратор КАК Документ.ПриобретениеТоваровУслуг) = ПриобретениеТоваровУслугТовары.Ссылка
Около х2 прироста на моей базенке |
|||
|
16
RomanYS
30.10.25
✎
15:37
|
(15) а теперь верни назад и сравни.
|
|||
|
17
unenu
30.10.25
✎
15:49
|
(15) ВЫРАЗИТЬ(...) в условиях даст оптимизацию при чтении реквизитов составного типа через точку, а не ссылки.
Например:ПО ВЫРАЗИТЬ(УчетСебестоимости.Регистратор КАК Документ.ПриобретениеТоваровУслуг).Склад = ПриобретениеТоваровУслугТовары.Склад Так будет быстрее. А первый вариант без разницы. Разве не так? |
|||
|
18
АНДР
30.10.25
✎
15:55
|
(15) +1
(16), (17) Тут читайте https://its.1c.ru/db/v8std/content/654/hdoc |
|||
|
19
АНДР
30.10.25
✎
16:02
|
(0) Мне неизвестно случая, когда SQL проверит условие из Имеющие до выполнения слияния таблиц и проверки всех условий.
Т.к. полей Количество и стоимостьРегл в точно индексах таблицы нет, то надо сначала строить ВТ с необходимыми данными по регистру и её уже джойнить с табличной частью поступления. |
|||
|
20
toypaul
гуру
30.10.25
✎
16:25
|
(3) главное вовремя сбежать. лучше в Британию :)
|
|||
|
21
toypaul
гуру
30.10.25
✎
16:27
|
(11) все правильно. просто кто-то один раз обжегся и все время на воду теперь дует.
|
|||
|
22
toypaul
гуру
30.10.25
✎
16:29
|
(5) индексы для начала посмотри на таблице. есть в таблице индекс где регистратор первым идет?
и что значит дохнет? выполняется 30 мин или 2 |
|||
|
23
Timon1405
30.10.25
✎
16:37
|
(16)(17) правы
(15)(18) вы, видимо, неправильно понимаете что написано в ИТС. перечитайте, про разыменование в условиях соединения там ничего нет. А нет потому что в общем случае "соединить ПО ЛЮБАЯ_ФУНКЦИЯ_ОТ_ПОЛЯ(ТАб1.полеХ)=Таб2.полеУ" не использует индекс |
|||
|
24
Мультук
гуру
30.10.25
✎
17:03
|
(22)
1) Запрос (был вызван из синхронизации данных) из (0) заблокировал 3 млн объектов за три часа, но так и не выполнился. Был снят "как не оправдавший надежд" Это в рабочей с живыми пользователями. 2) Спасибо, помогло На тестовой базе добавил фиктивное условие, чтобы заработал индекс "Период + Регистратор" УчетСебестоимости.Период >= '01.01.2020' Ибо раньше априори ничего нет. Запрос отработал за 2мин (в консоль я выводил только количество(*) из ВременнаяТ) 3) 2 мин это всё-равно печаль-печальная, ибо 1С выполняет этот запрос на каждый выгружаемый "Приобретение услуг и прочих активов" во время синхронизации данных. 4) Про индексы и статистику вероятно только к понедельнику получу ответ. Что с индексом "Регистратор + НомерСтроки" я также без идей, ибо доступа к SQL у меня, увы (а может к счастью) нет ИТС нам говорит: Регистр накопления Основная таблица Период + Регистратор + НомерСтроки Регистратор + НомерСтроки |
|||
|
25
СвинТуз
30.10.25
✎
17:07
|
"И ТИПЗНАЧЕНИЯ(УчетСебестоимости.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг)"
НЕ плохо для гуру |
|||
|
26
СвинТуз
30.10.25
✎
17:08
|
Наверное работает так же как:
УчетСебестоимости.Регистратор Ссылка Документ.ПриобретениеТоваровУслуг |
|||
|
27
Мультук
гуру
30.10.25
✎
17:11
|
(25)
Согласен. Я тоже иногда очень люблю типовой код. |
|||
|
28
СвинТуз
30.10.25
✎
17:15
|
Ну так отберите в курсор
проиндексируйте если набор данных больше 1 000. Выразите тип поля связи в явном виде. Выразить(УчетСебестоимости.Регистратор КАК Документ.ПриобретениеТоваровУслуг) Я не спец большой. Просто вариант. |
|||
|
29
СвинТуз
30.10.25
✎
17:14
|
Большой шкаф громче падает.
Я не знаю. |
|||
|
30
АНДР
30.10.25
✎
17:15
|
(24) Чем поможет индекс по ссылке на таблице регистра, если её все равно сканировать из-за полей Количество и стоимостьРегл?
|
|||
|
31
СвинТуз
30.10.25
✎
17:17
|
Да и история какая то странно выглядящая.
Нужен набор данных за всю историю. |
|||
|
32
АНДР
30.10.25
✎
17:22
|
(30) + Точнее как с учётом
... ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары ... И ТИПЗНАЧЕНИЯ(УчетСебестоимости.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг) ... может не выполниться ИМЕЮЩИЕ СУММА(УчетСебестоимости.Количество) > 0 И СУММА(УчетСебестоимости.СтоимостьРегл) > 0 |
|||
|
33
СвинТуз
30.10.25
✎
17:28
|
УчетСебестоимости.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
.... И ТИПЗНАЧЕНИЯ(УчетСебестоимости.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг) Так задумано? ) Типа борьба с возвратами? |
|||
|
34
СвинТуз
30.10.25
✎
17:26
|
"УчетСебестоимости.Активность"
Для работы индексов не хватает только "Проведен" |
|||
|
35
СвинТуз
30.10.25
✎
17:28
|
Прилепили слева.
Получили перебор. Курсор + индекс. Так мидлы пишут наверное. Хотя и я тоже могу. Под настроение. |
|||
|
36
unenu
30.10.25
✎
17:33
|
(24) Верно. Еще пару лет назад(в расширении) поставили на подобный запрос условие на период.
В обмене с БП, на каждый приход, идет безусловное(криво-условное) формирование громадной ВТ. Жутко тормозило при объеме строк себеса с многими нулями. :( |
|||
|
37
СвинТуз
30.10.25
✎
17:37
|
(36)
Ну да. Условие на все время. + отбор по типу = индекс частично заработает. |
|||
|
38
ЕRPe
30.10.25
✎
21:32
|
Ужастики какие-то, на третьем пентиуме базу крутите?
(24) 22млн записей, очень средний серверок 0,6секунды на этот запрос. |
|||
|
39
PR
30.10.25
✎
22:25
|
(0) Вообще-то все условия из ГДЕ нужно продублировать в условия соединения
|
|||
|
40
PR
30.10.25
✎
22:31
|
(24) Если это вызывается для одного регистратора, то откуда тут всякие соединения с документами, а не выборка движений по одному регистратору?
|
|||
|
41
Мультук
гуру
30.10.25
✎
22:33
|
(38)
Спасибо. Посмотрел внимательно. Действительно, объемы детские. По идее join 1млн на 1млн строк. Ничего не размножается, дублей в ИдентификаторСтроки - нет. Что-то с индексами или статистикой или ... Но это уже точно не сегодня. |
|||
|
42
Мультук
гуру
30.10.25
✎
22:37
|
(40)
Номер релиза указан в теме, "почему 1С сделала именно так", мне сложно сказать, я буду разбираться и оптимизировать, если не смогут привести в чувство статистку индексов. Там не очень много кода, по идее ничего сложного быть не должно. В релизе 2.5.24.65 по этому поводу изменений нет. |
|||
|
43
H A D G E H O G s
30.10.25
✎
23:33
|
(30) тем, что индекс так не работает, как вы написали.
|
|||
|
44
H A D G E H O G s
30.10.25
✎
23:33
|
Всегда интересовало, что всеми движет, когда они верят в магию индексов. Которой нет.
|
|||
|
45
H A D G E H O G s
30.10.25
✎
23:35
|
(41) никакой адекватный sql не будет искать 1 млн. раз по индексу
|
|||
|
46
rsv
31.10.25
✎
22:09
|
Интересно , как 1с в типовой ерп может обяснить текст запроса в (0) …. без использования виртуальной таблицы ? Как же сертификат ?
|
|||
|
47
rsv
31.10.25
✎
22:17
|
Итоги классикой собирают по линейной таблице и sum и group by и having …. Чудны дела …
|
|||
|
48
Voronve
31.10.25
✎
22:27
|
(0) Неудивительно что отлетает на join
|
|||
|
49
timurhv
31.10.25
✎
22:53
|
(46) (48) Допустим, приход товаров за ГОД по документам на 500 млн строк в ТЧ и столько же записей в регистрах.
Как виртуальная таблица, актуализация индексов или соединение поможет в этом случае? Либо побоялись регистры менять, добавлять новые, либо запрос используется раз в квартал. |
|||
|
50
rsv
31.10.25
✎
23:00
|
(0) :) ответ скорее такой … у больших газет , заводов и пароходов … возникла коллизия “линейная таблица + таблицы итогов « не есть гуд. Давайте отключим итоги-тоталы , напишем запрос к линейке движений ( он асегда отработает) , а ночью для отчетов тоталы пересчитаем.
|
|||
|
51
rsv
31.10.25
✎
23:05
|
(50) ——(49)
|
|||
|
52
timurhv
31.10.25
✎
23:10
|
(49) а ну хотя увидел что через обмен данными по документам ПриобретениеТоваровУслуг, ПриобретениеУслугПрочихАктивов и ОтчетОператораСистемыПлатон вызывается.
Флаг им в руки) В запросах какие-то отборы вменяемые наложили через ГДЕ и соединения: ТекстЗапросаТаблицаСпособовРаспределения() ТекстЗапросаТаблицаДокументов() а в (0) - чет забыли, может аналитик "помог", а разрабу уже по-барабану стало, может руководитель поел того самого и разраб сделал как начальство посчитало нужным. Разрабы в 1С толковые, предположу что конфликт с руководством был или аналитиком. |
|||
|
53
timurhv
31.10.25
✎
23:13
|
(50) Нет, 1С для этих целей может РС замутить и пересчитывать его. Тут что-то другое было. Может СОВА "Эффективный менеджер" пришел.
|
|||
|
54
Chai Nic
01.11.25
✎
08:22
|
(0) А какой sql-сервер применяется, кстати?
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |