Запрос к таблице срез последних

1. user1048558 01.11.24 18:02 Сейчас в теме
Всем привет!
Столкнулся с проблемой, может кто подскажет.
Есть простой запрос формирующий временную таблицу в который отбирается некий список, а потом связывается с регистром сведений (виртуальной таблицей срез последних) . Связь по индексу. Так вот у всех пользователей запрос выполняется в среднем 70Мс, а у одно (ничем непримечательного) 4-5 мин. Причем у виртуальной таблицы задан параметр "Период", если его убрать запрос у этого самого пользователя так же выполняется примерно за 70 Мс. Я всегда думал, что параметры уменьшают скорость выполнения запроса, но почему-то на этом пользователе все работает по другому
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 01.11.24 18:11 Сейчас в теме
(1) RLS используется (ограничение доступа на уровне записи)?
4. user1048558 02.11.24 09:33 Сейчас в теме
(2) Да, но отбор у этого пользователя далеко не самый большой, у других куда больше строк отбирается
3. MissionOnly 8 02.11.24 09:29 Сейчас в теме
Думаю, что это возможно только, если стоит PostgreSQL.
5. user1048558 02.11.24 09:34 Сейчас в теме
(3) Так и есть, а в чем особенность postgre в этом моменте?
6. MissionOnly 8 02.11.24 09:55 Сейчас в теме
Только, то что в Postgre не оптимизирован для работы со "Срезами по регистрам сведений". Поэтому у нас используется только MS SQL. При попытке перейти на PostgreSQL, мы словили эту проблему на всех регистрах, где использовался "СрезПоследних" или "СрезПервых".
7. SlavaKron 02.11.24 09:56 Сейчас в теме
(6) Возможно, не разрешены итоги для среза последних.
9. user1048558 02.11.24 10:01 Сейчас в теме
11. user1048558 02.11.24 10:05 Сейчас в теме
(6) Странно, остальные регистры нормально работают, да и этот хорошо отрабатывает, проблема только с одним пользователем
8. MissionOnly 8 02.11.24 09:58 Сейчас в теме
У вас база большая (в Гигах)?
10. user1048558 02.11.24 10:04 Сейчас в теме
12. MissionOnly 8 02.11.24 10:10 Сейчас в теме
Когда разбирали эту проблему, пришли к выводу, что PostgreSQL для того чтобы сделать "СрезПоследних" (без тормозов) он должен таблицу всю поместить в оперативку. Если что-то мешает этому, то операция может выполнятся от 1 мин до нескольких часов. У нас база 150 Gb, и есть несколько больших регистров сведений (где нужен срез последних, там сотни тысяч записей).
13. user1048558 02.11.24 10:57 Сейчас в теме
(12) А адаптированная версия под 1С не спасает?
19. starik-2005 3090 02.11.24 15:31 Сейчас в теме
(12) Так соберите срез последних сами. Фактически там в ГДЕ период В максимум(период) из Т, отфильтрованный по измерениям таблицы запроса. Период в индексе, измерения - тоже. Должно работать быстро.
20. user2107184 02.11.24 16:21 Сейчас в теме
(19) Или разделить регистр на две составляющих - оперативный и архивный. Я иногда так делаю.
Нужные отчеты работаю с обоими регистрами (им не особо часто и быстро надо), а документы и прочая операционная деятельность - только с оперативным.
Когда, ну например сделка, закрывается - через пару недель регламент уносит эти записи из оперативного в архив.
Или вот для обмена с WMS подходит. Прошла вся цепочка от заказа до отгрузки - и нахер никому не нужна оперативная история движений документов по всяким там статусам для работы онлайн со всякими http-запросами и прочими обменами. И отправляется в архив.

// В них даже метаданные по другому расположены.
14. MissionOnly 8 02.11.24 14:03 Сейчас в теме
Адаптированная версия PostgreSQL подходит для адаптированных конфигураций 1С. Говорят, что все управляемые конфигурации пишут с учетом специфики PostgreSQL (возможно это так).
15. SlavaKron 02.11.24 14:22 Сейчас в теме
Как использование PostgreSQL объясняет тормоза у конкретного пользователя? Подозреваю, что у пользователя "накручено" в доступах.
starik-2005; +1 Ответить
16. user1048558 02.11.24 14:51 Сейчас в теме
(15) Проверял, самый обычный сотрудник, рядовые права
17. SlavaKron 02.11.24 15:09 Сейчас в теме
(16) То есть, есть пользователь с точно такими же настройками доступа, у которого запрос выполняется 70мс?
21. user1048558 02.11.24 16:55 Сейчас в теме
18. starik-2005 3090 02.11.24 15:27 Сейчас в теме
(16) Соберите планы запросов через механизм логирования постгреса или через тех. журнал. Посмотрите, что там за запрос, какой план запроса по нему.

Также не совсем понятно, что такое "отбирается список, потом связывается со срезом последних". Срез последних - это подзапрос, 1С не рекомендует соединяться с подзапросами.

То, что у конкретного пользователя это выскакивает, - это какой-то РЛС. Если создать еще одного пользователя с теми же параметрами, то уменьшит ли это время выборки обратно к 70мс или нет? Если нет, то, видимо, реальный запрос оказывается для этого пользователя каким-то узким местом, с которым стоит разобраться. Может быть стоит выполнять запрос в привилегированном режиме, если он не подразумевает доступа к заведомо недоступной для этого информации, ну или эта информация в последствии пользователю не сообщается.
22. user1048558 02.11.24 16:59 Сейчас в теме
(18) Срез последних это не подзапрос а виртуальная таблица.
2 запроса, первый формирует временную таблицу с некоторым списком ссылок на справочник, второй - идет соединение с временной таблицы из первого запроса и виртуальной таблицы РС срез последних. Связь по индексу.
Я тоже думал про права, но привилегированный режим никак не помог
23. SlavaKron 02.11.24 17:02 Сейчас в теме
(22) Если вы устанавливаете в параметр дату среза, то на стороне СУБД используется вложенный запрос. Можно долго гадать, но тут только ТЖ ответит на вопрос.
24. starik-2005 3090 04.11.24 16:54 Сейчас в теме
(22)
привилегированный режим никак не помог
Кеш чистить не пробовали?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот