|   |   | 
| 
 | 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     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |