Первый раз запрос выполняется 30 сек, а потом 3 сек - как оптимизировать? #810357


#0 by RomaH
Заметил недавно с утра пришел - дайка, думаю, пооптимизирую нажал на кнопку - вот оно - запрос выполняется 30 сек, 66% времени повторяем замер - 3 сек, 30% времени меняю параметры запроса - 3 сек перезапускаю 1С - 3 сек вроде и оптимизировать нечего становится ... объясните механизм - почему "первый" раз - долго, а потом в 10 раз быстрее
#1 by RomaH
SQL
#2 by Builder
Первый раз у SQL все на диске, потом все в памяти.
#3 by бомболюк
статистика пересчитывается регулярно?
#4 by aka AMIGO
И не только на SQL.. И не только в 8-ке. Точно та же картина в 7-ке при запуске обработки.
#5 by Genayo
3 секунды на запрос - оптимизировать нечего? Серьезно?
#6 by RomaH
потратить 3 часа времени. что бы оператор выполнил этот запрос 200 раз в год на ... 1 сек быстрее?
#7 by бомболюк
(30-3) * 200 = 5400 кажется, то есть полтора человека часа в год - это все, что ты можешь сэкономить. Оно стоит 3х часов твоей работы? ;-)
#8 by vicof
Кэш
#9 by Cyberhawk
Так у тебя СУБД не разогретая
#10 by Адинэснег
где запрос-то? выкладывай, щас мы тебя из профессии то попросим :-D
#11 by Адинэснег
сто таких запросов, и грустить начнет не только оператор, и не 27 секунд в день
#12 by stopa85
У меня был случай, я такой запрос в 3 сек при прогретом кеше до 0.3 сек при холодном кеше оптимизировал.... но запрос реально был кривой.
#13 by ИмяФамилия
добавить памяти в sql сервер, что бы данные не вытеснялись. ну и дать чутка больше 1С серверу.
#14 by rs_trade
запросы оптимизируют глядя на план запроса. даже если он стал 3 сек, там все равно видимо есть что подкрутить что бы чтений стало меньше.
#15 by Strogg
после первого раза выборка в кэше хранится. Поэтому на порядок(да, да) быстрее. Чтобы оптимизировать запрос, надо знать механизмы выборки. Есть целый курс по оптимизации запросов. ТАм описывается, почему получение данных через точку будет работать медленнее чем связывание данных, использование ВТшек, вместо вложенных запросов с последующим их уничтожением, короче, в рамках данной темы более лучше пройти курс.
#16 by Базис
А с утра роботом запустить несколько отчётов, чтобы весь день они крутились быстро - не прокатит?
#17 by RomaH
ну вот три таблички из 10 ВЫБРАТЬ РАЗЛИЧНЫЕ     Мед_ИспользованиеДокументовВРеестрах.Документ КАК Регистратор ИЗ     РегистрСведений.Мед_ИспользованиеДокументовВРеестрах КАК Мед_ИспользованиеДокументовВРеестрах     И Мед_ИспользованиеДокументовВРеестрах.Документ ССЫЛКА Документ.Мед_СтатТалон ; ГДЕ     Мед_ТалоныПриема.Период МЕЖДУ &ДатаНачала И &ДатаКонца     И Мед_ТалоныПриема.СМООМС = &Организация     И НЕ Мед_ТалоныПриема.Регистратор.НеВключатьВРеестры     И втИсключаемыеТалоны.Регистратор ЕСТЬ NULL ; ГДЕ     Мед_СтатистическиеТалоны.Период МЕЖДУ &ДатаНачала И &ДатаКонца     И втИсключаемыеТалоны.Регистратор ЕСТЬ NULL ИНДЕКСИРОВАТЬ ПО     Регистратор выполняется 1.4 сек 125000 400 4000 записей во временных таблицах
#18 by Адинэснег
если перед соединением проиндексировать вот эти поля?
#19 by RomaH
дольше если не делать первую временную - а левым то для одного раза - быстрее (если быб было только одно соединение - во втором запросе
#20 by VS-1976
Сколько регистраторов? 2. В РегистрСведений.Мед_ТалоныПриема, а так же в РегистрСведений.Мед_СтатистическиеТалоны много повторов Регистратор? Если да, то в начале выбери во временную таблицу различные, а потом уже соединяй. 3. Не забудь при этом индекс по полю Регистратор прикрутить к правой таблице ( втИсключаемыеТалоны ).
#21 by МимохожийОднако
Это кэш. Делай замеры после 2  и 3 запроса. Увидишь, что время одинаковое. Когда сделаешь новый запрос, то опять 2 и 3. Только после этого можно делать выводы.
#22 by RomaH
- два типа
#23 by RomaH
ну так у заказчика претензия - пришел на работу - нажал кнопку и минуту жду результата проверяем - нифига не минуту - 0.5 сек так и объяснять - это кэш?
#24 by НЕА123
условия,которые можно, из ГДЕ вставить ПО
#25 by МимохожийОднако
Качество объяснения Заказчику особенности работы программы относится только к опыту и профессионализму консультанта. Если отчет один и тот же, то его можно сформировать заранее по регламенту и выдать из сохранённого места. Еще можно дать Заказчику новопассита для успокоения или включить котиков на экране
#26 by VS-1976
Выразить не поможет. ГДЕ     Мед_ТалоныПриема.Период МЕЖДУ &ДатаНачала И &ДатаКонца     И Мед_ТалоныПриема.Регистратор ССЫЛКА Документ.[ тот у которого есть НеВключатьВРеестры ]     И Мед_ТалоныПриема.СМООМС = &Организация     И втИсключаемыеТалоны.Регистратор ЕСТЬ NULL
#27 by VS-1976
Что там с различными?
#28 by RomaH
а вот и нифига первая таблица - 125000 записей потом всего 4000 ИМХО - надо сократить первую - т.е. выбрать сначала вторую и третью, потом уже первую, а потом левую исключающую связь сделать
#29 by МимохожийОднако
Покажи, что получилось
#30 by VS-1976
Я тебе про индексы писал.     И Мед_ИспользованиеДокументовВРеестрах.Документ ССЫЛКА Документ.Мед_СтатТалон ИНДЕКСИРОВАТЬ ПО   Регистратор
#31 by VS-1976
К главной пристыковывается втИсключаемыеТалоны без индекса, то есть методом перебора. И чтобы меньше было соединений нужно различные по Регистратор-у для регистров делать в начале, а потом делать левое соединение с втИсключаемыеТалоны. На мой взгляд так будет правильно, но нужно смотреть планы запроса
#32 by RomaH
помогло - 1.1 сек - хуже - 1.6
#33 by VS-1976
По пункту Просто различных тогда мало.
#34 by VS-1976
Прикрути индекс к втИсключаемыеТалоны
#35 by RomaH
запрос изначально с индексом - фигня получилась
#36 by RomaH
ну от 2 до 10 на каждый регистратор
#37 by VS-1976
Я про индексирование ВТ.
#38 by VS-1976
Смотри в начале выбирается данные из РС, далее идёт соединение в ВТ. И поиск идёт в ВТ методом полного сканирования. Если будет индекс по соединяемому полю то 125000 записей не проблема
#39 by RomaH
условия из ГДЕ в соединение - хуже 1.1 против 1.7 в общем все фигня - разброс замеров 0.99 - 1.32 на одном и том же запросе сервер тестовый - я там один копейки ловить - смысла нет - спасибо
#40 by RomaH
И Мед_ИспользованиеДокументовВРеестрах.Документ ССЫЛКА Документ.Мед_СтатТалон ИНДЕКСИРОВАТЬ ПО     Регистратор             И (Мед_ТалоныПриема.Период МЕЖДУ &ДатаНачала И &ДатаКонца)             И (Мед_ТалоныПриема.Регистратор ССЫЛКА Документ.Мед_СтатТалон) ГДЕ     втИсключаемыеТалоны.Регистратор ЕСТЬ NULL ГДЕ     Мед_СтатистическиеТалоны.Период МЕЖДУ &ДатаНачала И &ДатаКонца     И втИсключаемыеТалоны.Регистратор ЕСТЬ NULL ИНДЕКСИРОВАТЬ ПО     Регистратор
#41 by RomaH
да ну нафиг
#42 by VS-1976
Хочешь сказать что ничего не изменилось?
#43 by RomaH
- ты видишь замеры?
#44 by RomaH
хотя "оптимизация" только первых трех запросов (и выполнение только этих трех) дала результат а вот замена этих трех запросов в общем пакете (15 запросов) - сказалось отрицательно
#45 by VS-1976
По тому что скорее всего данные были закинуты в кэш этим 3-мя запросами. Нужно в комплексе смотреть что происходит.
#46 by H A D G E H O G s
Индекс в ВТ вам не поможет никогда
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С