После ТиИ стала тормозить сильно 1С
Добрый день.
Запустил на днях ТиИ базы 1С (Реиндексация + Пресчет итогов + Реструктуризация)
Ожидал увидеть небольшой прирост скорости а получил жуткие тормоза.
Выяснил что больше всего тормозит выборка по остаткам РН ЗаказыПокупателя.
К примеру есть 2 запроса ДАНЫ ДЛЯ ПРИМЕРА, В РЕАЛЬНЫХ УСЛОВИЯХ И НЕ ИСПОЛЬЗУЮ
и
Первый запрос выполняется за 11 сек, второй менее 1 сек.
Почему после ТиИ первый запрос стал сильно тормозить и проигрывает в скорости второму запросу?
Как вернуть скорость 1С к той что была до ТиИ?
Запустил на днях ТиИ базы 1С (Реиндексация + Пресчет итогов + Реструктуризация)
Ожидал увидеть небольшой прирост скорости а получил жуткие тормоза.
Выяснил что больше всего тормозит выборка по остаткам РН ЗаказыПокупателя.
К примеру есть 2 запроса ДАНЫ ДЛЯ ПРИМЕРА, В РЕАЛЬНЫХ УСЛОВИЯХ И НЕ ИСПОЛЬЗУЮ
ВЫБРАТЬ
ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(
,
ЗаказПокупателя В
(ВЫБРАТЬ ПЕРВЫЕ 1000
ЗаказПокупателя.Ссылка
ИЗ
Документ.ЗаказПокупателя КАК ЗаказПокупателя
УПОРЯДОЧИТЬ ПО
ЗаказПокупателя.Дата УБЫВ)
) КАК ЗаказыПокупателейОстатки
Показатьи
ВЫБРАТЬ
ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(, ) КАК ЗаказыПокупателейОстатки
ГДЕ
ЗаказыПокупателейОстатки.ЗаказПокупателя В
(ВЫБРАТЬ ПЕРВЫЕ 1000
ЗаказПокупателя.Ссылка
ИЗ
Документ.ЗаказПокупателя КАК ЗаказПокупателя
УПОРЯДОЧИТЬ ПО
ЗаказПокупателя.Дата УБЫВ)
ПоказатьПервый запрос выполняется за 11 сек, второй менее 1 сек.
Почему после ТиИ первый запрос стал сильно тормозить и проигрывает в скорости второму запросу?
Как вернуть скорость 1С к той что была до ТиИ?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Про тормоза пока ничего не скажу, но запросы очень странные.
ВЫБРАТЬ ПЕРВЫЕ 1000
ЗаказыКлиентовОстатки.ЗаказКлиента КАК ЗаказКлиента,
ЗаказыКлиентовОстатки.ЗаказаноОстаток КАК ЗаказаноОстаток
ИЗ
РегистрНакопления.ЗаказыКлиентов.Остатки(, ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента) КАК ЗаказыКлиентовОстатки
УПОРЯДОЧИТЬ ПО
ЗаказыКлиентовОстатки.ЗаказКлиента.Дата УБЫВ
Показать
(2) Делал, результат такой же, но с одной оговоркой.
Если ВТ не индексировать по ссылке, то выполнение 11 сек
Если проиндексировать - около 1 сек, но тут есть одно НО. Если в ВТ присутствуют не только заказы но и документы других типов, то хоть индексируй хот ьне индексирую результат всегда одинаковый - 11 сек на 1000 документов
(3) - запросы не странные, это лишь пример, что бы показать что отбор внутри вирт.таблицы сильно стал тормозить.
(4) - А упорядочить в вирт таблице только для того, что бы отобрать 1000 последних по дате документов, т.к. остатков по заказам старше 2х месяцев уже нет.
Если ВТ не индексировать по ссылке, то выполнение 11 сек
Если проиндексировать - около 1 сек, но тут есть одно НО. Если в ВТ присутствуют не только заказы но и документы других типов, то хоть индексируй хот ьне индексирую результат всегда одинаковый - 11 сек на 1000 документов
(3) - запросы не странные, это лишь пример, что бы показать что отбор внутри вирт.таблицы сильно стал тормозить.
(4) - А упорядочить в вирт таблице только для того, что бы отобрать 1000 последних по дате документов, т.к. остатков по заказам старше 2х месяцев уже нет.
(6)
после EXEC sp_updatestats скорость выросла раз в 10.
Воспользовался советом и "выразил", скорость выросла примерно в 3 раза
Спасибо!
Через "выразить" привести к нужному типу.
после EXEC sp_updatestats скорость выросла раз в 10.
Воспользовался советом и "выразил", скорость выросла примерно в 3 раза
(ВЫБРАТЬ
| ВЫРАЗИТЬ(Документы.Ссылка КАК Документ.ЗаказПокупателя)
| ИЗ
| Документы КАК Документы)
Спасибо!
Вообще есть еще и нарушение логики в запросах. Вы пытаетесь выбрать 1000 самых новых заказов по дате их формирования с начала времен и получить по ним остатки. Теперь представьте, что у вас довольно большая база, и в ней 1500 незакрытых заказов, имеющих остатки.
Что вы будете делать? Пойдете изменять условие запроса на ПЕРВЫЕ 2000?
Или какова цель запроса?
Что вы будете делать? Пойдете изменять условие запроса на ПЕРВЫЕ 2000?
Или какова цель запроса?
(3)
Вот кусок рабочего кода:
Именно этот кусок кода стал тормозить после ТиИ.
Это обработчик получения данных в списке журнала документов контрагентов, в который попадают 45 видов документов, а мне нужно "Просроченные" заказы выделить цветом.
(5) Нет, ЗаказПокупателя - не составной
"Через "выразить" привести к нужному типу." - не помогает.
База скульная.
(7) согласен, можно переписать запрос, выбрать все заказы в ВТ с индексацией по ссылке и передать эту ВТ в условие вирт.таблицы с остатками. Но во первых это не даст прироста, по сравнению с примером из поста (1 сек против 11), а код запроса увеличит. Да и работал текущий запрос быстро до ТиИ.
Вот кусок рабочего кода:
Код |
---|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Документы.Ссылка КАК Ссылка
|ПОМЕСТИТЬ Документы
|ИЗ
| &Документы КАК Документы
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЗаказыПокупателейОстатки.ЗаказПокупателя КАК Заказ,
| НАЧАЛОПЕРИОДА(ЗаказыПокупателейОстатки.ЗаказПокупателя.Дата, ДЕНЬ) < &ДатаПросрочки КАК ЗаказПросрочен
|ПОМЕСТИТЬ ДанныеПоЗаказам
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(
| ,
| ЗаказПокупателя В
| (ВЫБРАТЬ
| Документы.Ссылка
| ИЗ
| Документы КАК Документы)) КАК ЗаказыПокупателейОстатки
Показать полностью |
Именно этот кусок кода стал тормозить после ТиИ.
Это обработчик получения данных в списке журнала документов контрагентов, в который попадают 45 видов документов, а мне нужно "Просроченные" заказы выделить цветом.
(5) Нет, ЗаказПокупателя - не составной
"Через "выразить" привести к нужному типу." - не помогает.
База скульная.
(7) согласен, можно переписать запрос, выбрать все заказы в ВТ с индексацией по ссылке и передать эту ВТ в условие вирт.таблицы с остатками. Но во первых это не даст прироста, по сравнению с примером из поста (1 сек против 11), а код запроса увеличит. Да и работал текущий запрос быстро до ТиИ.
(9) Стопэ! Если вы проиндексировали ВТ, то зачем вы её запихиваете опять в параметры виртуальной таблицы??? Просто используйте левое соединение ВТ и виртуальной таблицы остатков по полю ДокументЗаказПокупателя...
И самый главный вопрос - а что передается в запрос в качестве таблицы &Документы? Подозреваю, что это таблица значений, в которой колонка Ссылка имеет составную типизацию...
И самый главный вопрос - а что передается в запрос в качестве таблицы &Документы? Подозреваю, что это таблица значений, в которой колонка Ссылка имеет составную типизацию...
(11) Индексацию я сделал уже в ходе проверок, выяснил что так работает быстрее, хотя индексировать 100 документов не вижу смысла, но реально быстрее работает. А вот выбирать заказы из ВТ и Левым/Внутренним(смотря какие данные нужны) соединением пристыковывать остатки по РН - это не совсем верно, т.к. в остатках будут выбраны остатки по всем заказам и на это СКУЛЬ потратит много времени. Даже 1 сек в моем случае это оооочень долго, т.к. это журнал документов и каждый скролин мышкой по журналу с такими задержками в 1 сек - это уже нервирует пользователей. А после ТиИ после каждого PageAp/PageDown приходится ждать по 10-12 сек пока 1С оживет.
В MS SQL базе обычно на ночь советуют регламетные процедуры - реиндексацию индексов и апдейт статистики, ну там и бэкапы (если вы ещё их не делаете). После такой дичи как ТиИ - базу нужно ж явно привести в чувства. В инете полно инфы и пошагово и с картинками.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот