Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Тормозят запросы в УТ11 (число прочтений - 5992 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Тормозят запросы в УТ11
30. Октября 2013 :: 07:34
Печать  
Господа, помогите найти проблему.

Есть терминал-сервер, на нём 2 базы: БП 2 и УТ 11, файловые. Каждая по 2.5 Гб. Базы лежат на одном диске. Обе работают в толстом клиенте. Состав документов реализации в обоих базах идентичный. Делаю запросы из консоли:

Код
Выбрать все
ВЫБРАТЬ
	РеализацияТоваровУслугТовары.Номенклатура,
	РеализацияТоваровУслугТовары.Количество,
	РеализацияТоваровУслугТовары.Ссылка
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
	РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) 



В БП 2 этот запрос выполняется миллисекунды, в УТ 11 - минуту. Притом во время выполнения запроса в УТ одно ядро процессора грузится на 100%, диск и память практически не используются.

В чём причина тормозов и куда копать никак не пойму.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #1 - 30. Октября 2013 :: 11:53
Печать  
Может условие через две точки плохо отрабатывает, индекс может какой отсутствует.
Я бы для тестов попробовал:
1. Замерил, как быстро выполняется такой запрос:
Код
Выбрать все
ВЫБРАТЬ
	РеализацияТоваровУслуг.Ссылка
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
	РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) 


2. Если приемлимо быстро, то вручную написать обертку
Код
Выбрать все
ВЫБРАТЬ
	РеализацияТоваровУслугТовары.Номенклатура,
	РеализацияТоваровУслугТовары.Количество,
	РеализацияТоваровУслугТовары.Ссылка
ИЗ
	(ВЫБРАТЬ
		РеализацияТоваровУслуг.Ссылка
	ИЗ
		Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	ГДЕ
		РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)) КАК СписокСсылок
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ПО СписокСсылок.Ссылка=РеализацияТоваровУслугТовары.Ссылка 


3. Попробовать выполнить в проблемной базе Переиндексацию.
4. Попробовать выгрузить проблемную базу в DT и загрузить обратно.
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #2 - 30. Октября 2013 :: 19:15
Печать  
1. Это я почти сразу попробовал, выполняется относительно быстро (хотя и не доли секунды как в БП), поэтому пока что я переписал запрос аналогично п.2 и он выполняется где-то секунду, что по сравнению с выборкой непосредственно по таблице "Товары" быстрее на 2 порядка.
2. Это пробовал, не помогает.
3. Тоже пробовал, не помогает.

Самое интересное в том, что базы УТ и БП идентичны по составу документов реализации, соответственно результаты один и тот же запрос в обоих базах дает одинаковые. И размер баз одинаковый. Но загадка в том почему этот запрос в БП выполняется где-то 30 миллисекунд, а в УТ 130 секунд. Это я про неоптимизированную версию запроса, оптимизированная с джойном двух таблиц выполняется приемлемо быстро, но все равно в УТ она выполняется на 2 порядка медленнее чем в БП. Может быть действительно в УТ каких-то индексов не хватает, но как это проверить?

Если кому интересно увидеть это своими глазами - могу дать ссылки на архивы обеих баз (примерно 400 Мб каждая), но разумеется не каждому встречному а из тех кого здесь знаю.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #3 - 30. Октября 2013 :: 19:27
Печать  
Это результат консоли в БП.
  

scr1.jpg ( 212 KB | Загрузки )
scr1.jpg
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #4 - 30. Октября 2013 :: 19:27
Печать  
А это результат консоли в УТ.
  

scr2.jpg ( 112 KB | Загрузки )
scr2.jpg
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #5 - 30. Октября 2013 :: 21:09
Печать  
Всё, я нашел причину тормозов. Всем кому интересно читаем дальше.

С помощью обработки http://infostart.ru/public/99236/ разобрал структуру БД, нашел различия в индексах между БП и УТ.
У каждого документа есть индекс вида:
Код
Выбрать все
_DocumenХХХ_ByDocDate_TR
_Date_Time Дата
_IDRRef Ссылка 


Так вот в УТ, за счет общих реквизитов - разделителей учета - этот индекс дополняется еще одним измерением:
Код
Выбрать все
_DocumenХХХ_ByDocDate_TR
_FldYYY ОбластьДанныхОсновныеДанные
_Date_Time Дата
_IDRRef Ссылка 


В результате получается что при отборе документов по дате, в первом случае этот индекс используется, а во втором не используется. Отсюда и тормоза. Возможно на SQL-версии мощные движки СУБД умеют оптимизировать запросы и с имеющимися индексами, но в случае файловой версии движок 1С тупит.

Вариант решения проблемы.

Если вы используете разделитель учета или не хочется ломать конфу, то скорее всего поможет только SQL, там на крайний случай индексы можно и самому нужные добавить, хотя полагаю что движок SQL и сам справиться.

Если в учете не используются разделители учета (это как раз мой случай), то порядок действий следующий:
1. создать архивную копию БД.
2. обработкой ВыгрузкаЗагрузкаДанныхXML (я использовал слегка исправленную версию от 8.3 для Уф) выгрузить в файл все справочники и планы видов характеристик, так как слетят значения предопределенных объектов.
3. открыть состав общего реквизита ОбластьДанныхОсновныеДанные и установить признак использования в состояние "Не использовать" для всех объектов, кроме констант, регламентных заданий и планов обмена (с ними гемор). общий реквизит ОбластьДанныхВспомогательныеДанные не трогаем.
4. сохранить/обновить конфигурацию БД.
5. обработкой ВыгрузкаЗагрузкаДанныхXML загрузить из файла сохраненные ранее справочники и планы видов характеристик (слетевшие значения вернутся на место).
6. проверить работу.

По итогу конфа работает даже в целом веселее, и устраняется описанная в первом посту фича с запросами. Думаю что в ряде случаев 1С начинает наконец-то попадать в индекс там где раньше не попадала. Можно выполнить также сжатие таблиц БД, реиндексацию, реструктуризацию и т.д.
« Последняя редакция: 31. Октября 2013 :: 00:25 - maljaev »  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #6 - 30. Октября 2013 :: 22:07
Печать  
А вообще наверное более безопасно и правильно пройтись по составу объектов общих реквизитов и отключить использование там где это возможно и где не затрагивает другие механизмы системы.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Тормозят запросы в УТ11
Ответ #7 - 31. Октября 2013 :: 04:52
Печать  
maljaev писал(а) 30. Октября 2013 :: 21:09:
В результате получается что при отборе документов по дате, в первом случае этот индекс используется, а во втором не используется. Отсюда и тормоза. Возможно на SQL-версии мощные движки СУБД умеют оптимизировать запросы и с имеющимися индексами, но в случае файловой версии движок 1С тупит.


Судя по всему - в скуле ситуация будет такая же.

Для начала - я б попробовал в УТшке явно задать фильтр по этому самому полю, что в индексе идет на первом месте.
Даже если разделители учета по факту не используются.
И даже если разделитель учета по факту используется, а собрать нужно не глядя на него - тогда в условие фильтра передать список со всеми значениями разделителя учета (если этих значений, скажем, не более 50).
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Тормозят запросы в УТ11
Ответ #8 - 31. Октября 2013 :: 08:28
Печать  
Но фильтр-то нужно задавать в запросе? А вот если в конфе куча дополнительных отчетов, обработок и программисты франчайзи не особо задумывались об оптимизации запросов - то для начала можно и упростить индексы, а потом уже потихоньку переписывать их творения.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Тормозят запросы в УТ11
Ответ #9 - 31. Октября 2013 :: 10:48
Печать  
Тут одно из двух:

1) планируется сохранение поддержки и регулярное накатывание обновлений - тогда индекс не трогаем, в своих доработках строим фильтр с учетом индекса, для стандартных отчетов - пытаемся добиться ситуации, чтоб фильтр по разделителю учета вставал автоматически. (по поводу последнего - УТ11 не ковырял, но на примере УТ10 - все отчеты строятся на базе УниверсальногоОтчета, в который можно чуток допилить, чтоб он по умолчанию во всех настройках ставил фильтр по единственному значению разделителя учета).

2) болт на обновления уже положен - перепиливаем индексы как нам нужно. Ибо индексы - рулез, а кривые индексы - маст дай.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать