|   |   | 
| 
 | Странное поведение простого запроса в файловом варианте | ☑ | ||
|---|---|---|---|---|
| 0
    
        Caz naïve 29.06.24✎ 11:11 | 
        Вот и настало моё время приобщиться к легендарному желтому форуму...
 В общем, в чем суть: есть запрос в УТ 11.5, который получает последнюю установленную цену на серию и группирует по номенклатуре. Используется в отчете, спокойно себе работает... но только на серверной базе. При использовании файловой ложится в бесконечный запрос. Пробным путем было выяснено, что база в целом зависает намертво при наличии одной простой связи, где цепляется серия номенклатуры из справочника по полю "СерияНоменклатурыДляЦенообразования" и "СерияЦО" регистра "ЦеныНоменклатуры25" соответственно. В обеих таблицах записей не то что бы много, все корректно заполнены, нет серий без серийЦО и установок без серий ЦО. Кусок запроса, на котором всё ложится: |ВЫБРАТЬ | ЦеныНоменклатуры25.Номенклатура КАК Номенклатура, | МАКСИМУМ(ЕСТЬNULL(СерииНоменклатуры.Партия.Дата, ДАТАВРЕМЯ(1, 1, 1))) КАК ДатаВводаСерии, | МАКСИМУМ(ЦеныНоменклатуры25.Период) КАК Период |ПОМЕСТИТЬ втМаксимальныеДаты |ИЗ | РегистрСведений.ЦеныНоменклатуры25 КАК ЦеныНоменклатуры25 | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО (ЦеныНоменклатуры25.СерияЦО = СерииНоменклатуры.СерияНоменклатурыДляЦенообразования) |ГДЕ | ЦеныНоменклатуры25.ВидЦены.Наименование = ""Закупочные (ССР)"" | И ЦеныНоменклатуры25.Цена <> 0 |{ГДЕ | (ЦеныНоменклатуры25.Период <= &ОкончаниеПериода)} | |СГРУППИРОВАТЬ ПО | ЦеныНоменклатуры25.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура, | Период |; Думал сначала, что дело в индексации и банальном медленном поиске, но нифига. Просто при наличии подобной связи в любой конструкции запроса, независимо от использования, все намертво виснет. На сервере отрабатывает секунды за две, генерируя 700+ строк в итоге. Есть ли какой-нибудь вариант посмотреть, что может вызывать подобный казус? ТиИ прогнал полностью - бесполезно Посмотрел через Тулс_1СД - ничего аномального на первый взгляд не увидел Развернул локально, чтобы был только один сеанс (мало ли от нагрузки на боевой не справляется) - тоже не помогло | |||
| 1
    
        Инстанс 29.06.24✎ 11:14 | 
        Ну и запрос     | |||
| 2
    
        Caz naïve 29.06.24✎ 11:25 | 
        (1) Да, запрос никчемный, но всё же интересно, почему он ложится
 Как и писал ранее, даже если там будет выбрано одно поле без условий, но вот с этой связью - всё виснет | |||
| 3
    
        Одинист 29.06.24✎ 11:57 | 
        (0) > Есть ли какой-нибудь вариант посмотреть, что может вызывать подобный казус?
 Установка цен будущей датой есть? | |||
| 4
    
        Одинист 29.06.24✎ 12:08 | 
        ЦеныНоменклатуры25.ВидЦены.Наименование = ""Закупочные (ССР)""
 Вот это уродство я бы убрал | |||
| 5
    
        floverr 29.06.24✎ 12:28 | 
        (4) Это правильно пишется с 3-мя буквами "С" и  с большой буквы, причем стоя перед экраном монитора гордо вскинув голову вверх. 
 Уже убрали 33 года назад...и поимели все что имеем.... | |||
| 6
    
        DCKiller 29.06.24✎ 12:45 | 
        ТИИ сделать уже предлагали?     | |||
| 7
    
        DCKiller 29.06.24✎ 12:46 | 
        Очень может быть, что проблема не в запросе, а в ошибках в базе...     | |||
| 8
    
        Jackman 29.06.24✎ 14:34 | 
        (0) Самое просто - очистку кэша, делали? Встречал бесконечное ожидание выполнения в файловой базе из-за кэша.
 Сама первичная выборка данных запроса, до "ГДЕ" выходит большая? Поведение на 32х и 64х битном клиенте одинаково? Попробуйте без строк с индексированием | |||
| 9
    
        Caz naïve 29.06.24✎ 15:04 | 
        (7) Делал, полное тестирование прошло, база реиндексирована     | |||
| 10
    
        Caz naïve 29.06.24✎ 15:07 | 
        (8) Кэш чистить не пробовал, может и поможет, но база начинает так себя вести даже с чистой развертки на другом ПК
 Первичная выборка выходит в рамках разумного, в ценах примерно 800 записей, серий номенклатуры 13000 записей. "Попробуйте без строк с индексированием" - имеется ввиду не выбирая их в поля выборки данных, или же выключенное индексирование? | |||
| 11
    
        youalex 29.06.24✎ 15:08 | 
        В консоли запросов тоже виснет? 
 Движок файловой БД - черный ящик, можно конечно поиграться добавляя ПЕРВЫЕ N, сделать простейший запрос с этим соединением, чтобы локализовать проблему. ЦеныНоменклатуры25.СерияЦО - индекс есть? | |||
| 12
    
        Caz naïve 29.06.24✎ 15:09 | 
        (3) Не, всё раньше текущего периода     | |||
| 13
    
        youalex 29.06.24✎ 15:12 | 
        Вот здесь криво, может быть причина
 МАКСИМУМ(ЕСТЬNULL(СерииНоменклатуры.Партия.Дата целых две точки | |||
| 14
    
        Caz naïve 29.06.24✎ 15:13 | 
        (11) Да, в том-то и дело. Если бы сам отчет просто повисал, можно было бы списать на кривость запроса в СКД, а тут просто с ничего всё падает. С конструкцией "Первые N" эффект аналогичный. Индекса на поле "СерияЦО" нет
 Забыл упомянуть, кстати. В более ранней копии базы подобной проблемы не наблюдается. Может ли быть такое, что где-то в таблицах сидит битая запись? | |||
| 15
    
        Caz naïve 29.06.24✎ 15:14 | 
        (13) Без этого поля ситуация аналогична, увы     | |||
| 16
    
        youalex 29.06.24✎ 15:15 | 
        (14) попробуй на копии еще прогнать chdbfl.exe но то такое     | |||
| 17
    
        PR 29.06.24✎ 15:15 | 
        (0)  
 | |||
| 18
    
        Caz naïve 29.06.24✎ 15:16 | 
        (16) Посвяти невежу, пожалуйста, в чем разница между chdbfl и ТиИ для файловой базы?     | |||
| 19
    
        youalex 29.06.24✎ 15:17 | 
        я бы еще попробовал разбить на ВТ, а соединение делать между ВТ, но это тоже гадание     | |||
| 20
    
        Caz naïve 29.06.24✎ 15:19 | 
        (17) О, а вот тут интересно. Оно выполнилось, но аномально долго. 32 секунды, 714 записей в итоге     | |||
| 21
    
        PR 29.06.24✎ 15:20 | 
        (20) Попробуй без МАКСИМУМ и без СГРУППИРОВАТЬ     | |||
| 22
    
        PR 29.06.24✎ 15:21 | 
        (21) Ну и ЦеныНоменклатуры25.ВидЦены.Наименование = ""Закупочные (ССР)"" переделай на ЦеныНоменклатуры25.ВидЦены = &ВидЦены     | |||
| 23
    
        Caz naïve 29.06.24✎ 15:21 | 
        (21) 2000 записей всего вышло, время такое же практически     | |||
| 24
    
        DCKiller 29.06.24✎ 15:22 | 
        (11) Попробуйте просмотреть таблицы регистра и справочника, нет ли там дублирующихся записей (напр., с одинаковым кодом). В файловых такое бывает.     | |||
| 25
    
        youalex 29.06.24✎ 15:22 | 
        (18)  невежду тогда уж, с чем я не согласен), невежа это невежливый)
 Насколько я понимаю chdbfl шерстит внутреннюю структуру файла, физическую. ТиИ - выполняет проверку/обработку данных через обычные запросы к БД. chdbfl это своего рода dbcc checkdb | |||
| 26
    
        PR 29.06.24✎ 15:23 | 
        И еще, сейчас вообще пальцем в небо, но у реквизитов ЦеныНоменклатуры25.СерияЦО и СерииНоменклатуры.СерияНоменклатурыДляЦенообразования индексирование включено?     | |||
| 27
    
        youalex 29.06.24✎ 15:24 | 
        + ТИИ базу вряд ли убьет (если не реструктуризация, и  там не было критических проблем изначально, но это и выгрузка/загрузка так же убьет) а chdbfl - легко     | |||
| 28
    
        Caz naïve 29.06.24✎ 15:25 | 
        (25) *невежду)
 Понял, учту. В таком случае действительно есть смысл прогнать и так. Не знаешь, случаем, показывает ли Tools_1CD последней версии (для баз нового формата) ошибки в структурной целостности, или просто дает читать данные внутри? | |||
| 29
    
        PR 29.06.24✎ 15:26 | 
        Просто выборка из РегистрСведений.ЦеныНоменклатуры25 с отбором по какому-нибудь ЦеныНоменклатуры25.СерияЦО работает быстро?
 Просто выборка из Справочник.СерииНоменклатуры с отбором по какому-нибудь СерииНоменклатуры.СерияНоменклатурыДляЦенообразования работает быстро? | |||
| 30
    
        Caz naïve 29.06.24✎ 15:26 | 
        (26) у обоих выключено     | |||
| 31
    
        PR 29.06.24✎ 15:27 | 
        (28) Tools_1CD писал человек, awe вроде, который уже много лет как умер     | |||
| 32
    
        Caz naïve 29.06.24✎ 15:28 | 
        (29) Да, молниеносно     | |||
| 33
    
        PR 29.06.24✎ 15:29 | 
        А (22)?     | |||
| 34
    
        Caz naïve 29.06.24✎ 15:30 | 
        (31) Да, знаю, печально
 Просто мало ли где-то была подробная документация, или форумная ветка, где данный функционал был бы упомянут | |||
| 35
    
        vde69 29.06.24✎ 15:30 | 
        (22) +100     | |||
| 36
    
        Caz naïve 29.06.24✎ 15:31 | 
        (33) Аналогично, 30 секунд
 Выборка по регистру цен без отборов и условий, судя по трекеру консоли запросов, выполняется менее чем за полсекунды | |||
| 37
    
        youalex 29.06.24✎ 15:32 | 
        (28) не знаю, это все гадание. Ну кстати, если нештатная проблема, то можно попробовать "копию" развернуть через выгрузка/загрузка. Если штатная только локализация через экспериментирование, (29) например     | |||
| 38
    
        Caz naïve 29.06.24✎ 15:32 | 
        Ставлю всё-таки на то, что проблема именно со структурной целостностью базы, только вот интересно то, что на mssql данной проблемы нет вовсе     | |||
| 39
    
        Caz naïve 29.06.24✎ 15:33 | 
        (37) Пробовал, бесполезно     | |||
| 40
    
        PR 29.06.24✎ 15:33 | 
        А, ну по ходу причина в "СерииНоменклатуры.Партия.Дата"
 Партия же составной тип? И туда неявно куча говна подтягивается Проверь 
 | |||
| 41
    
        youalex 29.06.24✎ 15:33 | 
        (31) awa     | |||
| 42
    
        PR 29.06.24✎ 15:34 | 
        (38) Не ищи сложных объяснений там, где причина в обыкновенной рукожопости     | |||
| 43
    
        vde69 29.06.24✎ 15:34 | 
        (38) проблемма в том, что SQL умеет сам кешировать некоторые вещи, в твоем случае тип цен     | |||
| 44
    
        Caz naïve 29.06.24✎ 15:35 | 
        (40) Вообще нет, там жесткий тип - ДокументСсылка.ПриобретениеТоваровУслуг (Дописка мелочная)
 Этот вариант запроса так же отработал за 30 секунд | |||
| 45
    
        PR 29.06.24✎ 15:36 | 
        (41) А, ну да     | |||
| 46
    
        Caz naïve 29.06.24✎ 15:37 | 
        Может ли данная ситуация как-то быть связана с тем, что поле "Партия" в справочник было добавлено через расширение?     | |||
| 47
    
        vde69 29.06.24✎ 15:38 | 
        (46) может если не индексировано     | |||
| 48
    
        PR 29.06.24✎ 15:39 | 
        (44) О, а вот это уже странно
 А так? 
 | |||
| 49
    
        Caz naïve 29.06.24✎ 15:42 | 
        Вечером тогда попробую включить индексирование, сделать реиндексацию еще раз. Не поможет - прогоню через chdbfl.exe
 Не поможет и это - буду считать, что я был близок к раскрытию тайны вселенских масштабов, но невидимые силы мне помешали) | |||
| 50
    
        Caz naïve 29.06.24✎ 15:45 | 
        (48) Тоже 31 секунда     | |||
| 51
    
        PR 29.06.24✎ 15:46 | 
        (49) А (48)?     | |||
| 52
    
        PR 29.06.24✎ 15:47 | 
        А просто выборка из Справочник.СерииНоменклатуры сотбором по фиксированному СерииНоменклатуры.Партия?     | |||
| 53
    
        PR 29.06.24✎ 15:47 | 
        (51) А, уже (50), не увидел     | |||
| 54
    
        Caz naïve 29.06.24✎ 15:50 | 
        (52) Выборка с отбором - менее секунды
 Выборка полей "Ссылка, СерияНоменклатурыДляЦенообразования" и "Партия" без отборов - тоже менее секунды | |||
| 55
    
        PR 29.06.24✎ 15:52 | 
        Я бы поставил на то, что нужно включить индексирование, потому что по ходу строится неоптимальный план запроса     | |||
| 56
    
        Caz naïve 29.06.24✎ 15:53 | 
        (55) Вполне возможно. Как сделаю - отпишусь     | |||
| 57
    
        Caz naïve 29.06.24✎ 19:05 | 
        Да, индексирование СерииНоменклатурыДляЦенообразования и СерияЦО помогли)     | |||
| 58
    
        Caz naïve 29.06.24✎ 19:05 | 
        Всем спасибо за советы!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |