|   |   | 
| 
 | Медленно выполняется простой запрос к СрезПоследних регистра сведений | ☑ | ||
|---|---|---|---|---|
| 0
    
        Dimon1C 26.04.21✎ 08:45 | 
        Есть такой регистр сведений: 3 измерения, один ресурс, два измерения ведущие, на третьем стоит "индексировать".
 Это регистр самый часто используемый (100+ пользователей), и периодически запрос к нему формируется крайней медленно, сейчас замерял под одним пользователем 65 вызовов запроса - 46 секунд. Подскажите, можно ли его как то оптимизировать, в чем может быть проблема? Вот текст запроса: Запрос = Новый Запрос("ВЫБРАТЬ | УстановленныеПараметрыСрезПоследних.Значение КАК Значение |ИЗ | РегистрСведений.УстановленныеПараметры.СрезПоследних(&Период, Измерение1= &Измерение1 И Измерение2= &Измерение2 И Измерение3= &Измерение3) КАК УстановленныеПараметрыСрезПоследних"); Запрос.УстановитьПараметр("Период", Период); Запрос.УстановитьПараметр("Измерение1", Измерение1); Запрос.УстановитьПараметр("Измерение2", Измерение2); Запрос.УстановитьПараметр("Измерение3", Измерение3); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Значение = Выборка.Значение; КонецЕсли; | |||
| 1
    
        ДенисЧ 26.04.21✎ 08:48 | 
        А зачем один запрос выполнять 65 раз? Сразу никак?
 А так - лови профайлером скуля и смотри, где в индексы не попадаешь | |||
| 2
    
        Волшебник 26.04.21✎ 08:48 | 
        Нужно убрать СрезПоследних
 Все условия загнать в ГДЕ УПОРЯДОЧИТЬ ПО Период УБЫВ Добавить ПЕРВЫЕ 1 | |||
| 3
    
        Dimon1C 26.04.21✎ 09:04 | 
        (1) А что значит в индексы не попадаешь? у меня все три измерения поидее проиндексированы.
 (2) Раньше так и было, потом поменял на срезпоследних, вроде быстро стало, по крайней мере у меня. Причем, сейчас сделал в расширении как вы написали, стало быстро у меня, остальные не перезаходили, еще не понятно. Очень плавающая проблема. | |||
| 4
    
        ДенисЧ 26.04.21✎ 09:12 | 
        (3) Идеи - вещь хорошая, тут даже "Фауст" отдыхает. Но в них ещё попасть надо.     | |||
| 5
    
        Волшебник 26.04.21✎ 09:14 | 
        (3) А есть общий индекс по 3 измерениям?     | |||
| 6
    
        Почему 1С 26.04.21✎ 09:18 | 
        (5) А как его может не быть для измерений регистра сведений?     | |||
| 7
    
        Dmitrii гуру 26.04.21✎ 09:20 | 
        Если регистр так интенсивно теребонькается, то возможно следует пересмотреть методологию решения.
 Например, если часто делается запрос к срезу последних без указания периода, то включить в регистре использование итогов. Если часто делается несколько запросов подряд с одними и теми же параметрами, то вызывать запрос из модуля с параметром "Повторное использование возвращаемых значений" На время вызова или На время сеанса. Использовать вместо комбинации измерений одно измерение в виде нового слубежного справочника, который будет состоять из трёх реквизитов. По аналогии с КлючиАналитикиУчетаЗатрат или КлючиАналитикиУчетаНДС в бухне. А может вы там вообще запросы в циклах фигачите. Или в зависимости от контекста может имеет смысл получать некую выборку по Изм1+Изм2 и уже с полученными данными работать, выбирая по оставшемуся Изм3. А вообще слишком мало информации. Размер регистра, периодичность, типы значений измерений (простые/ссылочные/составные). Контекст работы с регистром. | |||
| 8
    
        Dimon1C 26.04.21✎ 09:21 | 
        (5) Не знаю, в режиме 1С есть настройка?     | |||
| 9
    
        Dimon1C 26.04.21✎ 09:26 | 
        (7) Может быть из-за того, что одно измерение с типом План видов характеристик.     | |||
| 10
    
        Dimon1C 26.04.21✎ 09:29 | 
        (7+) Размер данные 1.4 гб, индекс 2.9 гб, строк 4.8 млн     | |||
| 11
    
        Почему 1С 26.04.21✎ 09:30 | 
        Если остатки получать не на дату просто срез (без параметра &Период), тогда включение итогов среза последних хорошо ускорит запрос.     | |||
| 12
    
        acanta 26.04.21✎ 09:32 | 
        (9) Да, вот мне тоже непонятно, план счетов есть таблица с предопределенными элементами, а пвх нет?     | |||
| 13
    
        RomanYS 26.04.21✎ 09:36 | 
        (9) Сам ПВХ по сути обычный ссылочный тип. А вот если тип характеристика - то там как правило "сильно"-составной тип, это уже может влиять.     | |||
| 14
    
        Вафель 26.04.21✎ 09:36 | 
        может итоги стоит включить?     | |||
| 15
    
        Dimon1C 26.04.21✎ 09:45 | 
        (14) как правило мне важен период, с точностью до секунды, даже текущий день     | |||
| 16
    
        Dimon1C 26.04.21✎ 09:49 | 
        А может влиять порядок измерений? то есть допустим у меня заданы Изм1, Изм2, Изм3, а мне приходится часто выполнять запрос на Изм2,Изм3, по сути Изм1 в 90% случаях не нужно.     | |||
| 17
    
        ДенисЧ 26.04.21✎ 09:49 | 
        (16) Может. И даже таки да. Я же говорю - в индексы не попадаешь.     | |||
| 18
    
        Почему 1С 26.04.21✎ 09:50 | 
        (16) Это сильно влияет, нужно создавать измерения в том порядке в котором наиболее часто обращаются к ним     | |||
| 19
    
        Dimon1C 26.04.21✎ 09:52 | 
        (17,18) спасибо, буду пробовать!     | |||
| 20
    
        Почему 1С 26.04.21✎ 09:52 | 
        (16) Порядок измерений у тебя должен быть Изм2,Изм3,Изм1.
 если есть обращения и с отбором по Изм1 тогда если постаивить ему индексировать будет создать еще один индекс Изм1,Изм2,Изм3 | |||
| 21
    
        acanta 26.04.21✎ 09:55 | 
        А можно ли в 1с сделать индекс например изм3+изм1 и изм3+изм1+изм2?     | |||
| 22
    
        Dmitrii гуру 26.04.21✎ 09:56 | 
        (9) >> Может быть из-за того, что одно измерение с типом План видов характеристик.
 Если ПлавВидовХарактеристикСсылка - то нет. Если Характеристика.ПлавВидовХарактеристик, то не исключено, что и может. | |||
| 23
    
        Почему 1С 26.04.21✎ 09:57 | ||||
| 24
    
        acanta 26.04.21✎ 10:03 | 
        (23) Спасибо большое.     | |||
| 25
    
        Почему 1С 26.04.21✎ 10:05 | 
        (24) Ну и особо продвинутые создают нужные доп. индексы средствами SQL, но они слетают при реструктуризации вроде, я пока не постиг дзена, чтобы воспользоваться этим способом.     | |||
| 26
    
        SSSSS_AAAAA 26.04.21✎ 10:22 | 
        (21) В базах данных, обычно, индексы по полям, а не по выражениям.     | |||
| 27
    
        acanta 26.04.21✎ 10:46 | 
        (26) а разве индекс по полям это не выражение сумма полей?
 Или бывают еще произвольные выражения (типа alltrim) | |||
| 28
    
        SSSSS_AAAAA 26.04.21✎ 10:58 | 
        (27) Нет, не сумма. А вырезка из таблицы именно указанных полей. Которые используются не только для поиска, но и для получения самих данных, если все они лежат в индексе, без обращения к самой таблице. Из суммы трудновато получить слагаемые.     | |||
| 29
    
        SSSSS_AAAAA 26.04.21✎ 11:02 | 
        (27) "Или бывают еще произвольные выражения (типа alltrim)"
 Бывают. Но далеко не у всех СУБД. MS SQL к таковым не относится. | |||
| 30
    
        aka MIK 26.04.21✎ 11:43 | 
        (2) да, тоже рекомендую такой метод
 Если что-то работало нормально, а потом перестало - скорее всего дело в статистике, не апдейтнута по конкретной таблице. Да, если включены реальные итоги регистра сведений, то по ним например в версии 8.3.10 индексы вообще не работают. Не знаю, может после пофиксили | |||
| 31
    
        H A D G E H O G s 26.04.21✎ 11:43 | 
        (0)
 Есть 3 пути 1) Подражания - говори, что нужно попадать в индекс. 2) Опыта - переписывай запрос и замеряй быстродействие. 3) Размышления - открой этот чертов профайлер и смотри, почему sql читает так много данных | |||
| 32
    
        H A D G E H O G s 26.04.21✎ 11:46 | 
        (0) Быстро и просто реализовать: отказаться от среза и переписать через ВременныеТаблицы.
 Если регистр Нечасто меняется по периоду - тогда использовать "архитектуру Ненавижу 1С" | |||
| 33
    
        ДенисЧ 26.04.21✎ 11:46 | 
        (31) Получается, я в своих ответах достиг идеала (в твоём понимании) ))))     | |||
| 34
    
        Волшебник 26.04.21✎ 11:48 | 
        (8) Конечно, нет.     | |||
| 35
    
        mistеr 26.04.21✎ 11:56 | 
        (2) Какие аргументы не использовать штатное решение (включить итоги)?     | |||
| 36
    
        Dmitrii гуру 26.04.21✎ 12:01 | 
        (35) А что тебе даст включение итогов?
 Автор пишет в (15): "как правило мне важен период, с точностью до секунды, даже текущий день". То есть он использует срез последних с указанием конкретного периода. А итоги регистра сведений содержат только текущие (распоследние) итоги. Для получения среза за конкретный период таблицы итогов использоваться не будут. Включать итоги имеет смысл только, если используется частое обращение к срезу без указания параметра &Период. | |||
| 37
    
        Волшебник 26.04.21✎ 12:04 | 
        (35) У него слишком много отборов.     | |||
| 38
    
        Said_We 26.04.21✎ 12:08 | 
        (0) То что (5) имел ввиду - скорее всего. В типовых сделали один справочник с тремя реквизитами по твоим измерениям. РС сделали одно измерение и один ресурс в твоем случае. Перед записью находят элемент справочника с необходимым набором измерений и если его нет, то создают. Далее запись в РС. Запись чуть медленнее, а чтение гораздо быстрее.     | |||
| 39
    
        Said_We 26.04.21✎ 13:50 | 
        (18) "Это сильно влияет, нужно создавать измерения в том порядке в котором наиболее часто обращаются к ним" - скорее в обратном. Первым должно быть измерение, отбор по которому будет максимально обрезать количество записей по сравнению со следующими отборами. Т.е. РС который например хранить данные цен в разрезе магазинов номенклатуры и организации должен быть следующего вида: Изм1 = Номенклатура, Изм2= магазин, Изм3 = организация, ресурс цена. И ни как не должен быть таким: Изм1= Организация, Изм2=Магазин, Изм3=Номенклатура, ресурс цена.
 В случае с 1С и этого иногда не достаточно, так как 1С очень плохо работает с запросами. Приходится извращаться и заводить один огромный служебный справочник, который будет содержать почти все вариации сочетаний: номенклатура, магазин, организация. Т.е. вместо индекса по трем полям ссылочного типа, заменяется индексом по одному полю ссылочного типа. | |||
| 40
    
        acanta 26.04.21✎ 14:09 | 
        Вот и я непонимаю, зачем привязывать структуру индексов к порядку метаданных?
 Нельзя отдельную страницу индексы? Пусть в метаданных будет красота фирма,магазин,номенклатура а в индексах как надо... | |||
| 41
    
        Йохохо 26.04.21✎ 14:36 | 
        (40) " зачем привязывать структуру индексов к порядку метаданных" это вы что то сами себе надумали и напутали     | |||
| 42
    
        acanta 26.04.21✎ 14:42 | 
        И порядок субконто в плане счетов тоже самое.
 Мне как бухгалтеру неудобно каждый раз менять субконто 1, 2, 3 местами(с) | |||
| 43
    
        acanta 26.04.21✎ 14:43 | 
        А поскольку программист оставил в интерфейсе нам на все регистры накопления один универсальный отчет...     | |||
| 44
    
        Почему 1С 26.04.21✎ 15:07 | 
        (39) Имелось ввиду что индексы должны использоваться полностью. Автор указал что первое по порядку измерение не участвует в отборах, поэтому и предложили его поставить на последнее место. 
 В плане что первым должно идти измерение из используемых отборов, которое максимально сузит поиск следующего индекса, вроде как логично, но подозреваю что уже минимальное влияние окажет на производительность так как по B-дереву в несколько шагов перейдет к ветке второго поля составного индекса и так далее. | |||
| 45
    
        acanta 26.04.21✎ 15:23 | 
        Мы всегда рады сузить поиск в коде, но среди пользователей в все еще остались отсталые элементы, которые пользуются отчетами и даже (о ужас) их крыжат... 
 И мы безусловно верим, что штрихкодирование и прочая кибернетика приведет к естественному вымиранию этих мамонтов.. | |||
| 46
    
        acanta 26.04.21✎ 15:25 | 
        Но конечно, фирма 1с это не международная красная книга и заботиться о создании удобств для вымирающих видов не станет...     | |||
| 47
    
        ptiz 26.04.21✎ 15:31 | 
        (0) Единственный нормальный способ - заменить 65 вызовов на один. Пускай ты получишь лишние данные, но ты их выгрузишь в ТЗ, и следующие 64 будешь отрабатывать мгновенно поиском по ТЗ. Конечно, если эти 65 вызовов хоть чем-то объединены логически.     | |||
| 48
    
        mistеr 26.04.21✎ 15:32 | 
        (43) Хорош ныть, в отчетах порядок группировок сохраняется. И в универсальном тоже.     | |||
| 49
    
        Почему 1С 26.04.21✎ 15:33 | 
        (40) Я такую фичу с платформы 8.2 все жду, уверен что когда то дождусь.     | |||
| 50
    
        acanta 26.04.21✎ 15:40 | 
        (48) угу. Мне тоже сначала показалось, что на фокспро одной двухчасовой лекции про индексы недостаточно, чтобы качать права по поводу того какую ...ню сделали в 7.7....     | |||
| 51
    
        acanta 26.04.21✎ 15:45 | 
        +(50) зато теперь понятно, почему... Sql так не может!     | |||
| 52
    
        Said_We 26.04.21✎ 15:46 | 
        (49) А дождался пока, наверное, только ссылку в (23) - как и в каком случае индексы строятся.     | |||
| 53
    
        aka MIK 26.04.21✎ 16:55 | 
        (35) До версии 8.3.13 в таблицах итогов тупо не было индексов. Забыли добавить )     | |||
| 54
    
        Провинциальный 1сник 26.04.21✎ 16:57 | 
        (40) +тыща. Очень надо возможность строить индексы по произвольному набору полей.     | |||
| 55
    
        ДенисЧ 26.04.21✎ 17:16 | 
        (54) Иди в фузину. Там можно     | |||
| 56
    
        acanta 26.04.21✎ 17:48 | 
        (54) можно что?     | |||
| 57
    
        Said_We 26.04.21✎ 21:41 | 
        (0) "периодически запрос к нему формируется крайней медленно" - блокировки если остальное не тормозит. Что это за регистр, что его нужно так "теребонькать", да ещё и куча пользователей одновременно?
 Кто в это регистр и что пишет, в каком объеме и как часто? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |