Оптимизация обращений к реквизитам объектов через точку #811052


#0 by ИС-2
В базе сделана куча проверок, где идет обращение к реквизитам через точку. Это съедает скорость работы. Одна проверка через такое обращение занимает 38%. Вопрос. Как это можно оптимизировать? Переводить на запросы - долго и не факт, что даст скорость работы. 1) Написание общей функции повторного использования, которая делает обращение к промежуточным данным (чтобы минимизировать вероятность получения устаревших данных). Примерно так: ПовтИсп.ЗначениеРеквизита(Заказ,"Договор.Владелец").ИНН есть еще какие-то варианты?
#1 by SergeyKB
переделывание на формат БСП ЗначениеРеквизитаОбъекта и подобные функции
#2 by ildary
а ЗначениеРеквизитаОбъекта умеет получать данные через точку?
#3 by triviumfan
1) предварительно получить все необходимые реквизиты перед проверками; 2) перейти на табличную модель получения данных, т.к. у тебя наверняка обращения к составным типам присутствуют (вижу "Владелец" в примере), что влечёт за собой избыточные внутренние соединения; 3) 38% - это данные замера производительности? Может проблема в конкретной строчке кода, где идёт обращение к реквизитам составного поля?
#4 by Tateossian
Можно укоротить разыменование: :) Если все проверки примерно по такой схеме, как ты написал, можно предложить сделать универсальную функцию, что-то вроде СтруктураШапкиДокумента и там держать все необходимые реквизиты. Не думаю, что прямо особых случаев много. Есть еще вариант, но слегка костыльный - все проверяемые реквизиты прописать в объекте Критерии отбора - он очень быстро работает и лишних чтений не будет, но немножко станет толще база.
#5 by RomaH
"Переводить на запросы - долго и не факт, что даст скорость работы." скорость работы даст в любом случае чтобы минимизировать вероятность получения устаревших данных - хранить на время вызова - насколько я понимаю это аналогично запросу
#6 by triviumfan
Если предположить, что многие данные уже храняться в оперативной памяти, то с вероятностью 146% можно сделать вывод, что причина падения производительности в одной из строк рукоблудного кода :)
#7 by ИТ директор
посмотри на картинку у меня в профиле, это результат работы 1С-ников таких как ты
#8 by H A D G E H O G s
Милота то какая.
#9 by Kigo_Kigo
А я вот знаю про что ТС-говорить, это регистры покупатели и поставщики? туда не пишется контрагент, а только договор, оптимизировать получится только добавив контрагента в регистр, прописать его туда в модулях проведения доков, свернуть базу, оставшиеся доки перевровести, тугие отчеты переписать, точнее дописать выборки по контрагенты
#10 by H A D G E H O G s
дикость какая.
#11 by Asmody
Руки-то целы?
#12 by Asmody
Закешировать. Способов вагон.
#13 by Kigo_Kigo
Всмысле?
#14 by H A D G E H O G s
Нет ничего страшного прицепить через точку Владельца Договора.
#15 by Kigo_Kigo
при больших объемах, иногда до 60% времени сжирает Владелец
#16 by vicof
Заказ.Договор.Владелец.ИНН Почему не проверять ИНН перед записью контрагента?
#17 by Shrek_yar
что за формат БСП? ЗначениеРеквизитаОбъекта и подобные функции о_О
#18 by ildary
ЗначениеРеквизитаОбъекта - это БСП-шная функция.
#19 by Ботаник Гарден Меран
Определиться с составом реквизитов. При первом обращении к объекту получить запросом все нужные реквизиты. Кэшировать. Все последующие обращения по объекту брать из кэша.
#20 by ИТ директор
А если данные изменятся, т.е. кэш протухнет?
#21 by Ботаник Гарден Меран
Есть такая проблема. Только вчера в УХ ответственных лиц через модуль повторного использования получал. Заполнил регистр и долго втыкал, почему пусто в отчете. Зависит от продолжительности проверки.
#22 by Zamestas
Запросами не?
#23 by Dmitrii
Для таких целей в модуле ОбщегоНазначения есть целая кучка функций: >> Написание общей функции повторного использования Вряд ли даст результат, т.к. редко будет вызываться с одними и теми же входящими параметрами несколько раз подряд. А при каждом вызове с новыми входными параметрами повторно использоваться ранее сохраненные значения не будут. Таким образом выигрыша не будет. Только память забиваться будет на хранение повторно используемых значений. Если подходить глобально, то верно написано в . Но для этого надо значительно больше переписать кода.
#24 by ИТ директор
Если подходить глобально, то надо делать рефакторинг метаданных или денормализацию, например забубенивать всякие регистры сведений с нужными разрезами. Но это уже если исправления кривых запросов не поможет.
#25 by hhhh
всё уже закэшировано до нас. Вы и правда думаете, что платформа у себя не кэширует?
#26 by Dmitrii
Такой глобальный пересмотр методики учета для большинства типовых просто нереален. Или будет означать отказ от дальнейшего обновления от поставщика.
#27 by Ботаник Гарден Меран
Кэш через три точки? Ну может быть, у меня таких точных познаний нет. Будет тормозить на записи регистров сведений с нужными разрезами.
#28 by Fragster
запрос-то выполнился?
#29 by ИТ директор
Типовые от 1С и не нуждаются в подобной переделке, т.к. спроектированы по большей части хорошо. В отличие от отраслевых поделок франчей, вот уж где трэш и угар.
#30 by H A D G E H O G s
Я использую обертку повторновозвращаемых над ЗначениеРеквизитаОбъекта помогает не городить свой кэш при групповых массовых обработках
#31 by H A D G E H O G s
ха^3
#32 by Fragster
да ладно, там даже получение остатков по партиям уже поправили.
#33 by perester
можно расширениями все сделать, даже не дожидаться режима совместимости)
#34 by Fragster
как тебе такое:
#35 by H A D G E H O G s
Ну если только КЛАДРы жать.
#36 by H A D G E H O G s
Ставлю дайм, это очень оценили на партнерском
#37 by H A D G E H O G s
А как бы годно было бы дать возможность жать справочники и РС
#38 by ИТ директор
для тех кто держит тестовые базы в продуктиве (да-да, я про тебя), наверно актуально
#39 by Fragster
денег нет, но мы держимся
#40 by youalex
если это принципиально, то и результат проверки через точку может протухнуть. кэш объектов. Заказ.Договор.Владелец.ИНН = Заказ.ПолучитьОбъект.Договор.ПолучитьОбъект.Владелец.ПолучитьОбъект.ИНН. все полученные объекты будут закэшированы платформой.
#41 by Fragster
если совсем принципиально, можно управляемую блокировку на цепочку ссылок повесить...
#42 by rs_trade
а индексы че не пожал?
#43 by Fragster
пожал
#44 by ИТ директор
у вас еще и сервер 1С вместе с сервером СУБД на одной железке?
#45 by Fragster
там еще и железку альтернативные выбирали... ну хоть на ssd...
#46 by Fragster
#47 by rs_trade
я слепой. увидел.
#48 by youalex
тогда и транзакцию прицепом) А проверять реки на что-то там, скорее всего, можно полностью в запросе
#49 by Fragster
таки ты прав
#50 by H A D G E H O G s
Мы выключили виртуализацию.
#51 by Fragster
ты не поверишь, но на этом серваке еще есть и виртуалка с какой-то хуйней. Деть некуда, см , но хоть нагрузки не дает хоть как-то ощутимой.
#52 by Fragster
*фигнёй
#53 by rs_trade
скрипт можно еще доработать. боле умным сделать.
#54 by Fragster
например? смотреть соотношение чтения записи и estimated сжатие?
#55 by Fragster
, см бывает еще хуже :)
#56 by rs_trade
ага. это читал? я хотел наваять, но ленюсь.
#57 by Fragster
супер. на выходных добью скрипт :)
#58 by ИС-2
вытащить все данные запросом может потребоваться еще больше времени т.к надо соединять все таблицы
#59 by D3O
если соединять с предварительно отобранными временными таблицами больше времени не потребуется. платформа при обращениях из языка через точно выбирает весь кортеж объекта, а не только требуемое поле. проблема быстродействия еще и в этом.
#60 by D3O
*через точку
#61 by Fragster
а если объект содержит таб части, то (раньше - так точно) делает это в микротранзакциях
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С