|
Странное поведение простого запроса в файловом варианте | ☑ | ||
---|---|---|---|---|
0
Caz
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
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
29.06.24
✎
15:04
|
(7) Делал, полное тестирование прошло, база реиндексирована
|
|||
10
Caz
29.06.24
✎
15:07
|
(8) Кэш чистить не пробовал, может и поможет, но база начинает так себя вести даже с чистой развертки на другом ПК
Первичная выборка выходит в рамках разумного, в ценах примерно 800 записей, серий номенклатуры 13000 записей. "Попробуйте без строк с индексированием" - имеется ввиду не выбирая их в поля выборки данных, или же выключенное индексирование? |
|||
11
youalex
29.06.24
✎
15:08
|
В консоли запросов тоже виснет?
Движок файловой БД - черный ящик, можно конечно поиграться добавляя ПЕРВЫЕ N, сделать простейший запрос с этим соединением, чтобы локализовать проблему. ЦеныНоменклатуры25.СерияЦО - индекс есть? |
|||
12
Caz
29.06.24
✎
15:09
|
(3) Не, всё раньше текущего периода
|
|||
13
youalex
29.06.24
✎
15:12
|
Вот здесь криво, может быть причина
МАКСИМУМ(ЕСТЬNULL(СерииНоменклатуры.Партия.Дата целых две точки |
|||
14
Caz
29.06.24
✎
15:13
|
(11) Да, в том-то и дело. Если бы сам отчет просто повисал, можно было бы списать на кривость запроса в СКД, а тут просто с ничего всё падает. С конструкцией "Первые N" эффект аналогичный. Индекса на поле "СерияЦО" нет
Забыл упомянуть, кстати. В более ранней копии базы подобной проблемы не наблюдается. Может ли быть такое, что где-то в таблицах сидит битая запись? |
|||
15
Caz
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
29.06.24
✎
15:16
|
(16) Посвяти невежу, пожалуйста, в чем разница между chdbfl и ТиИ для файловой базы?
|
|||
19
youalex
29.06.24
✎
15:17
|
я бы еще попробовал разбить на ВТ, а соединение делать между ВТ, но это тоже гадание
|
|||
20
Caz
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
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
29.06.24
✎
15:25
|
(25) *невежду)
Понял, учту. В таком случае действительно есть смысл прогнать и так. Не знаешь, случаем, показывает ли Tools_1CD последней версии (для баз нового формата) ошибки в структурной целостности, или просто дает читать данные внутри? |
|||
29
PR
29.06.24
✎
15:26
|
Просто выборка из РегистрСведений.ЦеныНоменклатуры25 с отбором по какому-нибудь ЦеныНоменклатуры25.СерияЦО работает быстро?
Просто выборка из Справочник.СерииНоменклатуры с отбором по какому-нибудь СерииНоменклатуры.СерияНоменклатурыДляЦенообразования работает быстро? |
|||
30
Caz
29.06.24
✎
15:26
|
(26) у обоих выключено
|
|||
31
PR
29.06.24
✎
15:27
|
(28) Tools_1CD писал человек, awe вроде, который уже много лет как умер
|
|||
32
Caz
29.06.24
✎
15:28
|
(29) Да, молниеносно
|
|||
33
PR
29.06.24
✎
15:29
|
А (22)?
|
|||
34
Caz
29.06.24
✎
15:30
|
(31) Да, знаю, печально
Просто мало ли где-то была подробная документация, или форумная ветка, где данный функционал был бы упомянут |
|||
35
vde69
29.06.24
✎
15:30
|
(22) +100
|
|||
36
Caz
29.06.24
✎
15:31
|
(33) Аналогично, 30 секунд
Выборка по регистру цен без отборов и условий, судя по трекеру консоли запросов, выполняется менее чем за полсекунды |
|||
37
youalex
29.06.24
✎
15:32
|
(28) не знаю, это все гадание. Ну кстати, если нештатная проблема, то можно попробовать "копию" развернуть через выгрузка/загрузка. Если штатная только локализация через экспериментирование, (29) например
|
|||
38
Caz
29.06.24
✎
15:32
|
Ставлю всё-таки на то, что проблема именно со структурной целостностью базы, только вот интересно то, что на mssql данной проблемы нет вовсе
|
|||
39
Caz
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
29.06.24
✎
15:35
|
(40) Вообще нет, там жесткий тип - ДокументСсылка.ПриобретениеТоваровУслуг (Дописка мелочная)
Этот вариант запроса так же отработал за 30 секунд |
|||
45
PR
29.06.24
✎
15:36
|
(41) А, ну да
|
|||
46
Caz
29.06.24
✎
15:37
|
Может ли данная ситуация как-то быть связана с тем, что поле "Партия" в справочник было добавлено через расширение?
|
|||
47
vde69
29.06.24
✎
15:38
|
(46) может если не индексировано
|
|||
48
PR
29.06.24
✎
15:39
|
(44) О, а вот это уже странно
А так?
|
|||
49
Caz
29.06.24
✎
15:42
|
Вечером тогда попробую включить индексирование, сделать реиндексацию еще раз. Не поможет - прогоню через chdbfl.exe
Не поможет и это - буду считать, что я был близок к раскрытию тайны вселенских масштабов, но невидимые силы мне помешали) |
|||
50
Caz
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
29.06.24
✎
15:50
|
(52) Выборка с отбором - менее секунды
Выборка полей "Ссылка, СерияНоменклатурыДляЦенообразования" и "Партия" без отборов - тоже менее секунды |
|||
55
PR
29.06.24
✎
15:52
|
Я бы поставил на то, что нужно включить индексирование, потому что по ходу строится неоптимальный план запроса
|
|||
56
Caz
29.06.24
✎
15:53
|
(55) Вполне возможно. Как сделаю - отпишусь
|
|||
57
Caz
29.06.24
✎
19:05
|
Да, индексирование СерииНоменклатурыДляЦенообразования и СерияЦО помогли)
|
|||
58
Caz
29.06.24
✎
19:05
|
Всем спасибо за советы!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |