Внезапно сломался запрос???

1. parker_j 23.09.22 15:18 Сейчас в теме
Коллеги, Привет!
Как то долго работал простейший запрос

ВЫБРАТЬ ПЕРВЫЕ 1000
	|	ФТ_ШтрихкодыЭтикеток.Штрихкод КАК Штрихкод
	|ИЗ
	|	РегистрСведений.ФТ_ШтрихкодыЭтикеток КАК ФТ_ШтрихкодыЭтикеток
	|ГДЕ
	|	ФТ_ШтрихкодыЭтикеток.ДатаСканирования = ДАТАВРЕМЯ(1, 1, 1)
	|	И ФТ_ШтрихкодыЭтикеток.Смена = """"
	|	И ФТ_ШтрихкодыЭтикеток.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.Пустаяссылка)
	|	И ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Подразделение = &Подразделение
	|	И РАЗНОСТЬДАТ(ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Дата, &ТекущаяДата, ДЕНЬ) > 30
	
	|УПОРЯДОЧИТЬ ПО
	|	ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Дата
Показать


и сегодня утром перестал работать (зависает наглухо)
Если убрать условие "первые" то все хорошо, если вернуть условие первые хоть "первые 1" опять наглухо
Подскажите, как это понимать? зависает, как в обработке, так и в консоли
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. nomad_irk 72 23.09.22 15:24 Сейчас в теме
(1)
......
|УПОРЯДОЧИТЬ ПО
|    ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Дата

Что вы хотите от бедного SQL? заказов поди стопицот......
13. spacecraft 23.09.22 16:04 Сейчас в теме
(1) оберните ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство. через ВЫРАЗИТЬ
ВЫРАЗИТЬ(ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство КАК Документ.ЗаказНаПроизводство).Дата

И так везде где встречается ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.
16. RustamZz 23.09.22 16:26 Сейчас в теме
(1) Судя по тому, что в двух местах идет обращение к дате заказа на производство, архитектура регистра не продумана. Дату нужно хранить в самом регистре да еще и включить в индекс.
А так переиндексировать базу и обновить статистику.
21. kuzev 47 23.09.22 17:45 Сейчас в теме
(1) попробуйте очистить процедурный кэш
DBCC FREEPROCCACHE
а далее для вашей базы обновите статистику
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
22. Vitaly1C8 23.09.22 23:09 Сейчас в теме
(1)
| И ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Подразделение = &Подразделение

Попробуйте убрать эту строчку и проверьте, - повторяется ли глюк ...
Да и обратите внимание на параметры запроса ... может это из-за именно таких значений (в момент зависания) всё происходит ...
23. user1831019 23.09.22 23:30 Сейчас в теме
(22) Правда хочешь увеличить количество результата?
2. user1831019 23.09.22 15:20 Сейчас в теме
4. parker_j 23.09.22 15:27 Сейчас в теме
(3) по выборке если судить без условия "первые" 70 тыщ попадает в отбор
5. parker_j 23.09.22 15:28 Сейчас в теме
(3) 70 тыщ не заказов а записей. К одному заказу может быть много ШК
6. nomad_irk 72 23.09.22 15:40 Сейчас в теме
(5)я понимаю, но SQL должен соединиться с таблицей документов, получить значение Дата у документа и потом еще отсортировать все записи по дате и выдать вам N отсортированных от меньшего к большему записей.
7. VZyryanov 23.09.22 15:45 Сейчас в теме
Наверное, реквизит ФТ_ШтрихкодыЭтикеток.Штрихкод неограниченной длины. Попробуйте в запросе обрезать типа ПОДСТРОКА.
8. parker_j 23.09.22 15:53 Сейчас в теме
(6) ну так работал же долгое время)
10. user1831019 23.09.22 15:57 Сейчас в теме
(8) И что произошло ночью? Обновление?
9. parker_j 23.09.22 15:53 Сейчас в теме
11. parker_j 23.09.22 16:00 Сейчас в теме
(10) Не было ничего, ни обновления, ни новой платформы
Поэтому и создал тему, как неопознанную магию для себя
12. user1831019 23.09.22 16:01 Сейчас в теме
А в параметр &ТекущаяДата - точно приходит именно текущая дата? Время на cерваке не сбилось?
14. parker_j 23.09.22 16:22 Сейчас в теме
(12) Передается точно. Не сбилось
15. parker_j 23.09.22 16:23 Сейчас в теме
(13) А можете пояснить решение?
17. spacecraft 23.09.22 16:27 Сейчас в теме
(15) сколько регистраторов у РегистрСведений.ФТ_ШтрихкодыЭтикеток?
При обращении к полям регистратора напрямую строятся соединения со всеми таблицами регистраторов.
Через ВЫРАЗИТЬ мы указываем, что строить соединение нужно только с конкретным типом регистратора.
18. user1831019 23.09.22 16:30 Сейчас в теме
(17) Вообще-то в этом запросе не используется регистратор.
В остальном все верно.
24. parker_j 26.09.22 08:47 Сейчас в теме
(17) Регистраторов нет. Через выразить не отрабатывает тоже
Прикрепленные файлы:
19. soft_wind 23.09.22 16:44 Сейчас в теме
еще как вариант, это признак "битости" данных!
да, и такое бывает,
у самого было, в консоли запросов при каких-то действиях с битой строчкой результата (по таблице документов)
напрочь висло (давно было не помню точно что конкретно сломалось)
25. parker_j 26.09.22 09:35 Сейчас в теме
20. booksfill 23.09.22 17:39 Сейчас в теме
Не вы первый с этим столкнулись. Если, конечно точно-точно ничего не трогали.
Можете поискать на форумах по Ms SQL, лучше англоязычных.

Есть сильное подозрение, что врет план запроса. Можете глянуть.

Попробуйте пересобрать статистику, если не поможет, то, бог с ним - все равно sort предполагает перелопачивание всего, выбирайте все, а уже в коде оставляйте свои 1000 записей.

Можно еще попробовать такой ужас ("черточки" сами удаляйте):

ВЫБРАТЬ ПЕРВЫЕ 1000 РАЗЛИЧНЫЕ А.Штрихкод ИЗ (
    |    ФТ_ШтрихкодыЭтикеток.Штрихкод КАК Штрихкод,
         ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Дата
    |ИЗ
    |    РегистрСведений.ФТ_ШтрихкодыЭтикеток КАК ФТ_ШтрихкодыЭтикеток
    |ГДЕ
    |    ФТ_ШтрихкодыЭтикеток.ДатаСканирования = ДАТАВРЕМЯ(1, 1, 1)
    |    И ФТ_ШтрихкодыЭтикеток.Смена = """"
    |    И ФТ_ШтрихкодыЭтикеток.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.Пустаяссылка)
    |    И ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Подразделение = &Подразделение
    |    И РАЗНОСТЬДАТ(ФТ_ШтрихкодыЭтикеток.ЗаказНаПроизводство.Дата, &ТекущаяДата, ДЕНЬ) > 30) КАК А
    
    |УПОРЯДОЧИТЬ ПО
    |    А.Дата
Показать
Оставьте свое сообщение

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