После ТиИ стала тормозить сильно 1С

1. НовенькийЯ 22.09.20 11:46 Сейчас в теме
Добрый день.
Запустил на днях ТиИ базы 1С (Реиндексация + Пресчет итогов + Реструктуризация)
Ожидал увидеть небольшой прирост скорости а получил жуткие тормоза.
Выяснил что больше всего тормозит выборка по остаткам РН ЗаказыПокупателя.
К примеру есть 2 запроса ДАНЫ ДЛЯ ПРИМЕРА, В РЕАЛЬНЫХ УСЛОВИЯХ И НЕ ИСПОЛЬЗУЮ
ВЫБРАТЬ
	ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
	ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
	РегистрНакопления.ЗаказыПокупателей.Остатки(
			,
			ЗаказПокупателя В
				(ВЫБРАТЬ ПЕРВЫЕ 1000
					ЗаказПокупателя.Ссылка
				ИЗ
					Документ.ЗаказПокупателя КАК ЗаказПокупателя
				УПОРЯДОЧИТЬ ПО
					ЗаказПокупателя.Дата УБЫВ)
					) КАК ЗаказыПокупателейОстатки
Показать

и
ВЫБРАТЬ
	ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
	ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
	РегистрНакопления.ЗаказыПокупателей.Остатки(, ) КАК ЗаказыПокупателейОстатки
ГДЕ
	ЗаказыПокупателейОстатки.ЗаказПокупателя В
			(ВЫБРАТЬ ПЕРВЫЕ 1000
				ЗаказПокупателя.Ссылка
			ИЗ
				Документ.ЗаказПокупателя КАК ЗаказПокупателя
			УПОРЯДОЧИТЬ ПО
				ЗаказПокупателя.Дата УБЫВ)

Показать

Первый запрос выполняется за 11 сек, второй менее 1 сек.
Почему после ТиИ первый запрос стал сильно тормозить и проигрывает в скорости второму запросу?
Как вернуть скорость 1С к той что была до ТиИ?
По теме из базы знаний
Найденные решения
13. herfis 513 22.09.20 12:35 Сейчас в теме
(12) Попробуй
EXEC sp_updatestats
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TODD22 19 22.09.20 11:55 Сейчас в теме
(1)
Первый запрос выполняется за 11 сек

Скорее всего потому что используете подзапрос в условии виртуальной таблицы. Попробуйте сделать то же самое, только не подзапросом , а через временную таблицу.
4. TODD22 19 22.09.20 11:56 Сейчас в теме
(1)И упорядочивание в виртуальной таблице то же не нужно.
3. FatPanzer 22.09.20 11:55 Сейчас в теме
Про тормоза пока ничего не скажу, но запросы очень странные.
ВЫБРАТЬ ПЕРВЫЕ 1000
	ЗаказыКлиентовОстатки.ЗаказКлиента КАК ЗаказКлиента,
	ЗаказыКлиентовОстатки.ЗаказаноОстаток КАК ЗаказаноОстаток
ИЗ
	РегистрНакопления.ЗаказыКлиентов.Остатки(, ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента) КАК ЗаказыКлиентовОстатки

УПОРЯДОЧИТЬ ПО
	ЗаказыКлиентовОстатки.ЗаказКлиента.Дата УБЫВ
Показать
5. НовенькийЯ 22.09.20 12:00 Сейчас в теме
(2) Делал, результат такой же, но с одной оговоркой.
Если ВТ не индексировать по ссылке, то выполнение 11 сек
Если проиндексировать - около 1 сек, но тут есть одно НО. Если в ВТ присутствуют не только заказы но и документы других типов, то хоть индексируй хот ьне индексирую результат всегда одинаковый - 11 сек на 1000 документов


(3) - запросы не странные, это лишь пример, что бы показать что отбор внутри вирт.таблицы сильно стал тормозить.
(4) - А упорядочить в вирт таблице только для того, что бы отобрать 1000 последних по дате документов, т.к. остатков по заказам старше 2х месяцев уже нет.
6. TODD22 19 22.09.20 12:04 Сейчас в теме
(5)
Если в ВТ присутствуют не только заказы но и документы других типов

Через "выразить" привести к нужному типу.
Измерение "ЗаказКлиента" имеет составной тип?
Если проиндексировать - около 1 сек

Проиндексируйте.

У вас база клиент серверная или файловая?
15. НовенькийЯ 22.09.20 13:36 Сейчас в теме
(6)
Через "выразить" привести к нужному типу.

после EXEC sp_updatestats скорость выросла раз в 10.
Воспользовался советом и "выразил", скорость выросла примерно в 3 раза

(ВЫБРАТЬ
   |               ВЫРАЗИТЬ(Документы.Ссылка КАК Документ.ЗаказПокупателя)
   |            ИЗ
   |               Документы КАК Документы)


Спасибо!
7. FatPanzer 22.09.20 12:05 Сейчас в теме
(5) Так в ваших запросах явно необходимо использовать только тип документа "Заказ покупателя" (отбор по таблице "Документ.ЗаказПокупателя").

А покажите-ка свой запрос с использованием ВТ, пожалуйста.
8. FatPanzer 22.09.20 12:10 Сейчас в теме
Вообще есть еще и нарушение логики в запросах. Вы пытаетесь выбрать 1000 самых новых заказов по дате их формирования с начала времен и получить по ним остатки. Теперь представьте, что у вас довольно большая база, и в ней 1500 незакрытых заказов, имеющих остатки.
Что вы будете делать? Пойдете изменять условие запроса на ПЕРВЫЕ 2000?
Или какова цель запроса?
9. НовенькийЯ 22.09.20 12:12 Сейчас в теме
(3)

Вот кусок рабочего кода:
Код
   |ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |   Документы.Ссылка КАК Ссылка
   |ПОМЕСТИТЬ Документы
   |ИЗ
   |   &Документы КАК Документы
   |
   |ИНДЕКСИРОВАТЬ ПО
   |   Ссылка
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   ЗаказыПокупателейОстатки.ЗаказПокупателя КАК Заказ,
   |   НАЧАЛОПЕРИОДА(ЗаказыПокупателейОстатки.ЗаказПокупателя.Дата, ДЕНЬ) < &ДатаПросрочки КАК ЗаказПросрочен
   |ПОМЕСТИТЬ ДанныеПоЗаказам
   |ИЗ
   |   РегистрНакопления.ЗаказыПокупателей.Остатки(
   |         ,
   |         ЗаказПокупателя В
   |            (ВЫБРАТЬ
   |               Документы.Ссылка
   |            ИЗ
   |               Документы КАК Документы)) КАК ЗаказыПокупателейОстатки
Показать полностью

Именно этот кусок кода стал тормозить после ТиИ.
Это обработчик получения данных в списке журнала документов контрагентов, в который попадают 45 видов документов, а мне нужно "Просроченные" заказы выделить цветом.

(5) Нет, ЗаказПокупателя - не составной
"Через "выразить" привести к нужному типу." - не помогает.
База скульная.
(7) согласен, можно переписать запрос, выбрать все заказы в ВТ с индексацией по ссылке и передать эту ВТ в условие вирт.таблицы с остатками. Но во первых это не даст прироста, по сравнению с примером из поста (1 сек против 11), а код запроса увеличит. Да и работал текущий запрос быстро до ТиИ.
11. FatPanzer 22.09.20 12:14 Сейчас в теме
(9) Стопэ! Если вы проиндексировали ВТ, то зачем вы её запихиваете опять в параметры виртуальной таблицы??? Просто используйте левое соединение ВТ и виртуальной таблицы остатков по полю ДокументЗаказПокупателя...

И самый главный вопрос - а что передается в запрос в качестве таблицы &Документы? Подозреваю, что это таблица значений, в которой колонка Ссылка имеет составную типизацию...
10. НовенькийЯ 22.09.20 12:14 Сейчас в теме
(8) как уже сказал выше, выборка первых 1000 дана просто для примера, что бы было понятно что отбор по заказам внутри вирт. табл с остатками работает очень долго. Реальный кусок запроса приведен выше
12. НовенькийЯ 22.09.20 12:29 Сейчас в теме
(11) Индексацию я сделал уже в ходе проверок, выяснил что так работает быстрее, хотя индексировать 100 документов не вижу смысла, но реально быстрее работает. А вот выбирать заказы из ВТ и Левым/Внутренним(смотря какие данные нужны) соединением пристыковывать остатки по РН - это не совсем верно, т.к. в остатках будут выбраны остатки по всем заказам и на это СКУЛЬ потратит много времени. Даже 1 сек в моем случае это оооочень долго, т.к. это журнал документов и каждый скролин мышкой по журналу с такими задержками в 1 сек - это уже нервирует пользователей. А после ТиИ после каждого PageAp/PageDown приходится ждать по 10-12 сек пока 1С оживет.
13. herfis 513 22.09.20 12:35 Сейчас в теме
(12) Попробуй
EXEC sp_updatestats
14. НовенькийЯ 22.09.20 13:02 Сейчас в теме
(13) прости что на ТЫ обращусь, но все же: А раньше то Ты где был??? СПАСИБО!!!!!!
Вопрос решен.
16. Jimbo 10 22.09.20 15:40 Сейчас в теме
В MS SQL базе обычно на ночь советуют регламетные процедуры - реиндексацию индексов и апдейт статистики, ну там и бэкапы (если вы ещё их не делаете). После такой дичи как ТиИ - базу нужно ж явно привести в чувства. В инете полно инфы и пошагово и с картинками.
17. НовенькийЯ 22.09.20 17:01 Сейчас в теме
(16) Перестроение индексов и сжатие базы раз в месяц по регламенту, бекапы фул раз в сутки и логи раз в час, а вот статистику ни разу не обновлял, только сегодня первый раз воспользовался такой полезной процедурой.
18. Jimbo 10 22.09.20 17:12 Сейчас в теме
Раз в месяц это сила! У меня раз в неделю, а каждую ночь их дефрагментация и обновление статистики.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот