|
v8: Разная скорость выполнения элементарного запроса в построителе и обычном запросе [Решено] | ☑ | ||
---|---|---|---|---|
0
Vladal
06.02.13
✎
14:14
|
Тестовая база - реплика боевой, обе находятся на SQL. Запрос элементарный - выбор номенклатуры из иерархии корневой группы.
ПостроительУТ.Параметры.Вставить("ДатаОтчета", КонецДня(ДатаОтчета)); ПостроительУТ.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад.Подразделение КАК Подразделение, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | 0 КАК ОстРозн, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстТорг |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки"; ПостроительУТ.ЗаполнитьНастройки(); ПостроительУТ.Выполнить(); Результат = ПостроительУТ.Результат.Выгрузить(); На копии запрос выполняется за 2-3 секунды плюс выгрузка результата в ТЗ примерно столько же, итого 5-6 секунд. В рабочей базе этот же запрос выполняется 500+ секунд. Причём если запрос выполнить в консоли запросов, то выполняется за 2-3 секунды. Но если его выполнить в консоли отчетов на построителе (типовая, отчеты/универсальные), то также - 10 минут ждём, пока не начнётся вывод в таблицу. Что может быть? Есть подозрение на индексы либо кэш статистики SQL-сервера |
|||
1
Vladal
06.02.13
✎
14:15
|
Для чистоты эксперимента в консоли отчетов не использовал отбор.
|
|||
2
Vladal
06.02.13
✎
16:06
|
Экспериментировал с СКД (платформа 8.1.15.14)
В обеих базах работает быстро. Что же с построителем? |
|||
3
alex-pro
06.02.13
✎
16:22
|
Вообще - Построитель - прошлый век. Юзай СКД или УниверсальныйОтчет на крайняк)))))
Ну либо запрос напрямую. Но с другой стороны, когда-то давным-давно я им часто пользовался, таких проблем не замечал... "Есть подозрение на индексы либо кэш статистики SQL-сервера" но ведь в боевой сам запрос быстро выполняется... значит, с sql все ок |
|||
4
H A D G E H O G s
06.02.13
✎
16:29
|
(3) Ты не поверишь.
|
|||
5
dmpl
06.02.13
✎
16:30
|
(0) Ну а вытяни реально исполняемый текст запроса из построителя - что получается?
|
|||
6
Vladal
06.02.13
✎
16:36
|
(5) Реально исполняемый текст запроса я привёл в (0). Если помещаю его в консоль запросов - 2-3 сек, консоль отчетов - тупняк.
(3) Почему построитель - я в него помещаю отборы из плана обмена. Понимаю, что это прошлый век, но УниверсальныйОтчет на построителе. запрос напрямую - каменный век, если вравнивать с построителем и СКД. _____________________________________________________ Вот я подозреваю, что дело в индексах самого скуля. Ведь моя база при копировании из рабочей реинициализировалась, и кэш запросов, вроде небольшой. А в рабочей скорее всего он большой и его следует как-то реорганизовать. Это я так, верхушек нахватался. А чтобы переосмыслить процесс? |
|||
7
Vladal
06.02.13
✎
16:40
|
Нагуглил об очистке кэша команды
DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS DBCC FREEPROCCACHE WITH NO_INFOMSGS Но ест сомнение, не на все ли базы они распространяются или только на текущую? В мануале ничего вразумительного или у меня тупняк. |
|||
8
H A D G E H O G s
06.02.13
✎
16:40
|
(7) Бида
|
|||
9
H A D G E H O G s
06.02.13
✎
16:41
|
(7) Давай я помогу тебе пользоваться гуглом
|
|||
10
dmpl
06.02.13
✎
16:41
|
(6) Ну а запрос-то с построителя (полученный через ПолучитьЗапрос()) сколько выполняется?
|
|||
11
Vladal
06.02.13
✎
16:42
|
(9) Помоги. Премного благодарен.
|
|||
12
H A D G E H O G s
06.02.13
✎
16:42
|
||||
13
H A D G E H O G s
06.02.13
✎
16:44
|
||||
14
H A D G E H O G s
06.02.13
✎
16:44
|
(13) Сок в (21)
|
|||
15
Vladal
06.02.13
✎
16:49
|
(10) Там он прилепил параметры В Иерархии. Ничего нового.
ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад.Подразделение КАК Подразделение, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, 0 КАК ОстРозн, ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстТорг ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &ДатаОтчета, Номенклатура В ИЕРАРХИИ (&Параметр1) И Склад В ИЕРАРХИИ (&Параметр2)) КАК ТоварыНаСкладахОстатки ____________________________________________________________ (14) Чет про сок не понял, перечитываю ветку. |
|||
16
H A D G E H O G s
06.02.13
✎
16:52
|
(15) ПостроительОтчета строил адское CrossJoin соединение на с таблицей счет фактур, хотя я просил Левое.
|
|||
17
H A D G E H O G s
06.02.13
✎
16:53
|
Номенклатура В ИЕРАРХИИ (&Параметр1)
И Склад В ИЕРАРХИИ (&Параметр2) Это печально |
|||
18
H A D G E H O G s
06.02.13
✎
16:53
|
Построй 2 ВТ таблицы ОтобранныеСклады, ОтобранныеНоменклатуры и их суй!
|
|||
19
Vladal
06.02.13
✎
16:57
|
(16) Нехорошка он. Вот и у меня иерархию приплёл.
Дык! У вечером и ночером, когда в базе нет никто, точно так же... 06.02.2013 03:58:31 Начало. 06.02.2013 04:08:09 Торговля. 49 920 строк. От начала прошло 578 с 06.02.2013 04:17:00 Розница. 49 840 строк. От начала прошло 1 109 с 06.02.2013 04:17:10 Объединение. 80 строк. От начала прошло 1 119 с А в копии всё пучком - первый этап 5-6 секунд, второй - 65-69 (отнимает время получение представление ВСтрокуВнутр) и третий - на 70-73й секунде завершается. (18) Была такая идея, я так передаю в потустороннюю базу по COM. Пропробую такой же фокус и с тутошней. |
|||
20
Vladal
06.02.13
✎
17:05
|
(10) Продолжая эксперименты с иерархией...
Отключил отборы и получил сво |
|||
21
Vladal
06.02.13
✎
17:06
|
(10) Продолжая эксперименты с иерархией...
Отключил отборы и получил свой изначальный запрос - ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад.Подразделение КАК Подразделение, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, 0 КАК ОстРозн, ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстТорг ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки Работает быстро и красиво. Всю малину портит иерархия. Но как оптимизировать рабочую базу? хм. |
|||
22
H A D G E H O G s
06.02.13
✎
17:08
|
(21) Ну а ВременныеТаблицы че?
|
|||
23
Vladal
06.02.13
✎
17:09
|
(22) Еще не делал, минут...
|
|||
24
H A D G E H O G s
06.02.13
✎
17:11
|
Как то так
ВЫБРАТЬ Номенклатура.Ссылка ПОМЕСТИТЬ НужнаяНоменклатура ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа = ЛОЖЬ {ГДЕ Номенклатура.Ссылка.*} ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( , Номенклатура В (ВЫБРАТЬ НужнаяНоменклатура.Ссылка ИЗ НужнаяНоменклатура КАК НужнаяНоменклатура)) КАК ТоварыНаСкладахОстатки ; //////////////////////////////////////////////////////////////////////////////// УНИЧТОЖИТЬ НужнаяНоменклатура |
|||
25
Vladal
06.02.13
✎
17:20
|
(24) Чародей... 2 секунды в рабочей базе... А я делал левое соединение в ВТ, и оно мне тупило.
|
|||
26
H A D G E H O G s
06.02.13
✎
17:23
|
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад.Подразделение КАК Подразделение, Тоже плохо. Пихай ТоварыНаСкладахОстатки.Склад...... в ВТ. И потом уже из ВТ выбирай ВТТоварыНаСкладахОстатки.Склад.Подразделение |
|||
27
GANR
06.02.13
✎
17:24
|
(0) Чтобы узнать, какой запрос выполняет построитель с учетом настроек отборов и прочего, сделай так:
Запрос = ТвойПостроитель.ПолучитьЗапрос(); |
|||
28
H A D G E H O G s
06.02.13
✎
17:25
|
Кстати, в Статье Гилева нет ничего про
1) Перезагрузку SQL (tempdb при этом режется) либо 2) Шринк tempdb Со временем у меня темпДБ вырос один раз до пары гиг, несмертельно, но seek по 2 гигабайтам и seek по паре мегабайт все же отличается. |
|||
29
Vladal
06.02.13
✎
17:26
|
(27) Пасибки, было в (10), оттуда вытянул гадостное В ИЕРАРХИИ
|
|||
30
acsent
06.02.13
✎
17:28
|
(24) не верю что до сих пор не оптимизировали В ИЕРАРХИИ, хотя бы до уровня того что ты написал
|
|||
31
Vladal
06.02.13
✎
17:29
|
(30) Да он тоже не верил в сверхоптимизацию в v8: Сложности отладки временных таблиц. :-)
|
|||
32
H A D G E H O G s
06.02.13
✎
17:30
|
(30) Хуже не будет :-)
|
|||
33
GANR
06.02.13
✎
17:31
|
(29) Это ж циклическое сканирование таблицы. А если к этому ещё и присоединяется что-то - бе... в квадрате.
|
|||
34
Vladal
06.02.13
✎
17:32
|
(32) Всё работает! Класс!
// но где-то зудит вопрос из (7) |
|||
35
acsent
06.02.13
✎
17:33
|
(32) сомнительно. писать лишинй код. зачем? может ты еще и циклы разворачиваешь для ускорения?
|
|||
36
Vladal
06.02.13
✎
17:35
|
(35) Понятно, некотрое извращение в обход глюков. Но разница какая! запрос в 500+ секунд и 2 секунды, что быстрее моего 5 секунд.
|
|||
37
H A D G E H O G s
06.02.13
✎
17:35
|
||||
38
H A D G E H O G s
06.02.13
✎
17:35
|
(35) Анатолий, отстаньте.
|
|||
39
acsent
06.02.13
✎
17:36
|
кто нибудь проводил эксперимент, что же делает в иерархии?
|
|||
40
Vladal
06.02.13
✎
17:37
|
(39) Ну раз пошла волна, нужно.
|
|||
41
acsent
06.02.13
✎
17:38
|
может индекс на вт создается платформой для более быстрого поиска и он все время отъедает?
|
|||
43
acsent
06.02.13
✎
17:39
|
а то что платформа сама делает вт для в иерархии - это давно известно
|
|||
44
Vladal
06.02.13
✎
17:40
|
(43) Но она его как-тго по-особому его делает... Или соединяет. Где глянуть?
|
|||
45
acsent
06.02.13
✎
17:41
|
в профайлере конечно же
|
|||
46
Vladal
06.02.13
✎
17:45
|
(45) Пни, каким макаром? SQL Mangement Studio?
|
|||
47
acsent
06.02.13
✎
17:45
|
(46) рано тебе еще такими вещами заниматься
|
|||
48
Vladal
06.02.13
✎
17:47
|
(47) Ну пока папка не видит, что делать-то?
|
|||
49
acsent
06.02.13
✎
17:47
|
прфайлер это отдельное приложение
|
|||
50
Vladal
06.02.13
✎
17:49
|
ага. Это он? http://main.1c-ei.ru/Home/versions/1090
|
|||
51
H A D G E H O G s
06.02.13
✎
17:52
|
(50) Нет.
Профайлер входит в поставку SQL |
|||
52
H A D G E H O G s
06.02.13
✎
17:53
|
Кроме Express Edition
|
|||
53
Vladal
06.02.13
✎
18:23
|
(51) Спасибо.
SQL 2008 Entrprise Edition. Нашел в меню Пуск, средства производительности, профайлер. Буду разбираться |
|||
54
Vladal
06.02.13
✎
18:25
|
Побежало много букв, всё не успеваю читать.
Куда тыкать, чтобы увидеть свой запрос из 1С? |
|||
55
Vladal
06.02.13
✎
18:31
|
Вопрос решён. На сегодня есть, что переваривать.
Спасибо! |
|||
56
Vladal
06.02.13
✎
18:35
|
Про профайлер нашёл у Гилёва http://www.gilev.ru/1c/81/index/optimquery.htm#Индексы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |