Имя: Пароль:
1C
 
Упоротое левое соединение
,
0 alf2006x
 
09.03.25
10:02
Приветствую вас, многоуважаемые форумчане!

"Одним прекрасным весенним ясным пятничным утром ..."
(ладно, потом допишу этот триллер, который произошел со мной в эту пятницу)

К делу.
Сервер стал наглухо зависать при выполнении одного запроса, который прекрасно работал последние 3-5 лет (уже даже не помню сколько точно)
При зависании процессор грузится на 100%, из них скуль отжирает около 80-90%. Сервак зависает. Один вариант спасения - рубануть его резетом.

Запрос, который в этот момент выполняется изначально большой, но я его упростил до нескольких строк.

Вот он:

[ДатаНачала = 06.03.2025]

ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикаНоменклатуры,
    ХарактеристикиНоменклатуры.ДатаПеч КАК ДатаПеч,
    ЗаказПокупателяУслуги.НомерСтроки КАК НомерСтроки
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги
        ПО ХарактеристикиНоменклатуры.Ссылка = ЗаказПокупателяУслуги.ХарактеристикаНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.ДатаПеч >= &ДатаНачала
    И НЕ ХарактеристикиНоменклатуры.ПометкаУдаления

РЕЗУЛЬТАТ:
Строк в запросе: 369; Выполнение запроса: 31 сек

31 (!) секунда ?!...  ЧЁ?!?!?!?!

До этой пятницы запрос работал с параметром [ДатаНачала = ТекДата минус три месяца] - и всё было великолепно.

Первым делом я подумал что одна из двух участвующих в запросе таблиц прокисла (видел я такое как-то).
Но, запросы по отдельности в каждую из них выполняются без проблем:


ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка КАК Ссылка,
    ХарактеристикиНоменклатуры.ДатаПеч КАК ДатаПеч
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры

Строк в запросе: 887 922; Выполнение запроса: 22 сек


ВЫБРАТЬ
    ЗаказПокупателяУслуги.Ссылка КАК Ссылка,
    ЗаказПокупателяУслуги.НомерСтроки КАК НомерСтроки
ИЗ
    Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги

Строк в запросе: 1 734 154; Выполнение запроса: 31 сек

Все варианты с кэшем (надеюсь что все) - проработаны. Базу через бэкап развернул на другом сервере - ровно та же самая история.
Вот,.. теперь сижу и горюю. Не знаю в какую сторону думать.
На вас одна надежда.
Я бы конечно развернул бы техжурнал (если бы умел) - но я не умею.
Точнее не знаю какие в данном случае тычки надо натыкать чтобы хоть что-то увидеть.
И главное - получиться ли там что-то увидеть? Подозреваю что тут с осциллографом надо лезть в сам МС-СКЛ.

Но самый главный вопрос, который мучает - с какого такого, вдруг, после дождичка в четверг, началась такая ботва?!

Рискну предположить что я маленько туповат в написании запросов, но тут-то какого лешего творится ??

Всем заранее спасибо.
1 Chameleon1980
 
09.03.25
10:04
а если помочь БД?
1. вынести х-ки в вт1
2. вынести строки в вт2 с условием по вт1
3. пакетом 3 соединить
2 alf2006x
 
09.03.25
10:07
(1) Попробую, конечно, но при таком раскладе на всю оставшуюся жизнь останется фобия использовать левое соединение прямо на таблицы БД )
3 VS-1976
 
09.03.25
10:23
Посмотри в какие регистры пишется услуга и соедини с регистром, при условии что характеристика есть в индексе. Просто идет полный перебор 800к*1.7м таблицы услуг, а она уже большая. Либо в индекс запихай характеристику ( поле таблицы ).
PS: Вт не поможет только дольше будет.
4 alf2006x
 
09.03.25
10:30
(3) Не совсем понял что надо сделать.
И второй вопрос: в почему вдруг умерло внезапно (если предположить что это из-за размеров таблиц)?
Я думал оно будет каждый день всё-медленнее-и-ме-ее-дле-нне-ееееее
5 Kongo2019
 
09.03.25
10:33
(0) По классике, сначала выбирают необходимые данные. А потом уже их объединяют. Так, да нарвался на классическое. Когда таблицы не влезли в память и пошли тормоза так темп по ним стало писать на диск.
6 PR
 
09.03.25
10:43
(1) А нахрена пункт 2 в ВТ?
7 PR
 
09.03.25
10:46
(2) Какая, нахрен, фобия?
Ты сначала все выбираешь, потом в ГДЕ фильтруешь
Пиши тогда уж так

ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикаНоменклатуры,
    ХарактеристикиНоменклатуры.ДатаПеч КАК ДатаПеч,
    ЗаказПокупателяУслуги.НомерСтроки КАК НомерСтроки
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги
        ПО ХарактеристикиНоменклатуры.Ссылка = ЗаказПокупателяУслуги.ХарактеристикаНоменклатуры
        И ХарактеристикиНоменклатуры.ДатаПеч >= &ДатаНачала
        И НЕ ХарактеристикиНоменклатуры.ПометкаУдаления
8 PR
 
09.03.25
10:47
(4) Потому что сначала строился один план запроса, а теперь другой
9 arsik
 
гуру
09.03.25
10:58
А если еще и заказы по дате ограничить?
10 alf2006x
 
09.03.25
12:22
(7) Согласен (краснеет,.. уходит)

Всем спасибо!
11 Chameleon1980
 
09.03.25
15:11
(6) чтобы уж точно пз четкий был
12 asady
 
10.03.25
08:46
Почему не внутреннее?
Зачем левое?