Имя: Пароль:
1C
 
Запрос ТоварыНаСкладах.Остатки выполняется 2 секунды. Как можно ускорить ?
0 ИС-2
 
naïve
05.01.23
09:16
В базе очень по медленно выполняются любые запросы к таблицам остатков. Минимум 2 секунды в пустой базе.

Бьюсь над их ускорением запросов. На данный момент итоге не пересчитаны. Индексы еще не проверял

Сколько у Вас выполняется такой запрос ?
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.Качество,
    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
    ТоварыНаСкладахОстатки.СерияНоменклатуры,
    ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
1 Обработка
 
05.01.23
09:21
А что за конфа?
Если это Ка2 или ЕРП это супер быстро.
А если это розница или бухия то надо смотреть.
2 Обработка
 
05.01.23
09:21
Хотя в бухии нет такого регистра вроде.
3 Мимохожий Однако
 
05.01.23
09:36
Файловая или клиент-серверная? Неплохо бы проиндексировать таблицы
4 dmt
 
05.01.23
09:56
(0) >Минимум 2 секунды в пустой базе.
а все остальное летает?
так не бывает
5 ИС-2
 
naïve
05.01.23
10:19
(1) УПП. В таблице остатках примерно 150 т. записей
6 ИС-2
 
naïve
05.01.23
10:21
(3) серверная
(4) остальное более-менее оптимизировано. Сейчас главный тормоз - выполнение контролей при проведении документов.
Получается замкнутый круг. Запрос к остаткам долго выполняется ->документ проводится долго->большое время на блокировку->медленно выполняется запрос
7 ИС-2
 
naïve
05.01.23
10:22
(4) под словом пустая база подразумевается, что данные есть, но ни кто не работает
8 dmt
 
05.01.23
10:24
(6) запрос к остаткам должен выполняться с отборами в параметрах виртуальной таблицы
9 dmt
 
05.01.23
10:24
(7) оригинально
10 RomanYS
 
05.01.23
10:49
(8) +много
(0) если есть RLS, то выполняй в привилегированном режиме
11 rphosts
 
05.01.23
11:12
(7) если для тебя это пустая база то я балдею...
ни дам ни одного конкретного ответа т.к. не понятно на 1 сервере у тебя всё или разные сервера 1С и СУБД. Замер прям на сервере или на клиенте.
150К записей... и тебе все они нужны? Маня что-ли? Про отборы (8) написано по существу. как и про РЛС (см под админом).
PS граница расчёта остатков по регистру актуальна?
12 magicSan
 
05.01.23
11:27
Дак 150 это не много вообще пара десятков перемещений + поступления продажи на пару складов.

"На данный момент итоге не пересчитаны. Индексы еще не проверял" даже не знаю как ругнутся.
13 hockeyist
 
05.01.23
11:34
(6) Так отключи контроль и все будет летать.
14 Chai Nic
 
05.01.23
11:48
(0) Постгрес что ли?
15 Chai Nic
 
05.01.23
11:49
Перехватывай текст sql-запроса и пробуй его запустить в режиме анализа плана выполнения. Смотри какая операция выполняется долго. И далее по обстоятельствам..
16 ИС-2
 
naïve
05.01.23
12:11
(8) верно. Рабочее запросы выполняются с отборами, но все равно долго.
У меня логика такая - смогу понять причину долго выполнения запроса без условий (чтобы их влияние убрать), то основные запросы смогу оптимизировать
(11) Сервер и СУБД разные. Замер выполняю через консоль запросов
(12) Если я правильно помню логику работы остатков. То берется остаток на ближайший месяц и к нему динамически добавляется вычисляемый остаток на данный момент. Возможно сильно ошибаюсь. В каком разделе ИТС почитать как на самом деле работают остатки?
(14) SQL
(15) спасибо, попробую
17 magicSan
 
05.01.23
12:17
(16) в консоли некорректно замерять, она расшифровку тащит тупым способом.

ТоварыНаСкладахОстатки.Качество,
    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
    ТоварыНаСкладахОстатки.СерияНоменклатуры

а вот весь этот цирк точно нужен?

По идеи всегда берешь оператвиные данные, далее блокируешь записи для работы с ними. Ну нечем тормозить на такой маленькой базе.
18 Галахад
 
гуру
05.01.23
12:17
Вариант, что сервер такой же старый как и конфигурация реален?
19 Кир Пластелинин
 
05.01.23
12:20
(16) в каком месте время окончания выполнения запроса в консоли фиксируется? а то мб после выгрузки в таблицу на форме. как минимум подтягиваются представления для ссылок. ну и прочее
20 Dmitry1c
 
05.01.23
12:58
(0) итоги посчитай
21 Повелитель
 
05.01.23
13:33
(16) В консоле запросов время считать можно по разному.
1. Время выполнения самого запроса.
2. Время вывода в ТЗ.

Часто на больших объемах данных, время вывода в ТЗ может быть больше, чем время выполнения самого запроса.

Какое время считаете?
22 dmt
 
05.01.23
14:40
(16) ну может к 100му посту соберешься и выложишь запрос, который надо оптимизировать
23 Повелитель
 
05.01.23
14:43
(22) Так то он в (0) его выложил )))
24 rphosts
 
05.01.23
15:30
(16) 3.ближайшего рассчитанного снизу... если совсем без указания даты - должно браться из актуальных остатков, как-бы должно быть это быстро, но если не наплодили разделителями всякими лишнего.

И да, РН оборотов или остатков, а?
25 rphosts
 
05.01.23
15:31
(23) а что бывают запросы к виртуальной таблице без указания скобок (даже еcли в них пусто)?
26 ИС-2
 
naïve
05.01.23
15:33
(17) да, почти все измерения используются в работе. Порезать их не получится
(18) да, это тестовый старый сервер. Но я на нем один
(21) чистое время выполнения запроса
(24) регистр остатков. Все остатки получаются долго.

Подниму еще 3-х летнюю тему

Я перепровожу РТиУ и расходный ордер.

РТиУ.Записать(РежимЗаписи.Проведение);
РО.Записать(РежимЗаписи.Проведение);

Если при перепроведении РО ошибка, то РТиУ должна откатиться. Это можно сделать как-то без начатьТранзакцию

Что блокируется при вызове НачатьТранзакцию?
Что блокируется при вызове НачатьТранзакцию?
27 Галахад
 
гуру
05.01.23
15:45
(26) Может мало памяти? Данные из кэша вываливаются?

Можно из без начать транзакцию, но тогда самостоятельно писать механизм и следить за его валидностью.
28 rphosts
 
05.01.23
15:54
(26) что с памятью, очередью на чтение диска, загруженностью процессора - смотреть перфмоном.
Итоги рассчитаны на какой период? Запрос на какую дату формируешь?
Может всё таки реальный текст запроса дашь посмотреть?
29 RomanYS
 
05.01.23
15:59
(25) Да, всегда работало
30 rphosts
 
05.01.23
17:06
(29) забавно.... проверил, работает
31 Ivan_495
 
05.01.23
17:28
запрос в sql - профайлер покажи
32 palsergeich
 
05.01.23
20:57
(30) Это текущие итоги будут.
(0) Возможно в таблице текущих итогов полно нулевых записей, я бы просто пересчитал текущие итоги.
150К итоговых записей это вообще ниочем, должно очень быстро получать
33 ИС-2
 
naïve
06.01.23
16:12
Подскажите, при такой конструкции будет блокировка у РегистрСведений.ИдентификаторыОбъектов или НачатьТранзакцию повлияет на запись всех документов, справочников и т.д ?
        
НачатьТранзакцию();
        
        БлокировкаДанных = Новый БлокировкаДанных;
        ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ИдентификаторыОбъектов");
        ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
        ЭлементБлокировки.УстановитьЗначение("Идентификатор", Object.ID);
        БлокировкаДанных.Заблокировать();
34 Конструктор1С
 
06.01.23
17:19
(0) состав измерений и отборы покажи
35 Конструктор1С
 
06.01.23
17:20
А также на какую дату получаются остатки
36 ViSo76
 
06.01.23
22:10
Остатки без даты это выборка из физической таблицы на время выборки влияют блокировки. Если выборка на меньшую дату, то тогда остатки минус движения до даты и так же блокировки могут влиять. Твой запрос это полная выборка таблицы. Выборка зависит от фрагментации таблицы, очереди к диску, объёму свободной памяти в кэше. Если данные передаются через сеть, то и от загруженности сети.
37 ViSo76
 
06.01.23
22:28
(16) Так как есть отборы, пересоздай индексы, можешь средствами sql, есть специальная команда по-моему, для одной таблицы, для проверки ( исключит дефрагментацию индексов ), так же собери статистику - из-за неё парсер может выдать неоптимальный запрос.
38 Chai Nic
 
07.01.23
06:23
Столько советов, а автор даже статистику запроса на sql-сервере не посмотрел..
39 rphosts
 
08.01.23
07:36
(33) какая разница если у тебя в монорежиме абзац
40 rphosts
 
08.01.23
07:37
(32) 2.пересчитать итоги предлагал ему, но похоже он не слышит
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший