Временное улучшение производительности

1. Bajo 80 05.10.22 11:05 Сейчас в теме
Всем привет. Есть две самописанные управленческие, транзакционные базы. Первая весит 670 ГБ. Вторая 880 ГБ. Конфигурации почти одинаковые. Ночью выполняется регламентное задание продолжительностью в первой базе 30 мин, во второй 1.5 часа.
Оптимизировал запрос который больше всех длился. Рег задание выполнялось в первой базе 12 мин, во второй 18 мин. Через день обратно начало выполняться 30 мин и 1.5 часа соответственно. Изменений конфигураций не было. И вот уже неделю так.
Код проверил в рабочей базе на месте. В чем может быть причина? Почему только на день помогла оптимизация?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. RustamZz 05.10.22 11:45 Сейчас в теме
(1) Замер производительности выполните и тогда можно предметно начать обсуждать проблему. А вообще на проблемы по таким базам нужно DBA привлекать или эксперта по технологическим вопросам.
7. Bajo 80 05.10.22 13:33 Сейчас в теме
(5) Замер и запросы.

Запрос №1.

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

СГРУППИРОВАТЬ ПО
	РасчетыПоОсновномуДолгуОстатки.Заем,
	РасчетыПоОсновномуДолгуОстатки.КлассификационнаяКатегорияЗайма,
	РасчетыПоОсновномуДолгуОстатки.Подразделение,
	РасчетыПоОсновномуДолгуОстатки.Клиент
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РасчетныеДатыЗаймовСрезПоследних.Заем,
	РасчетныеДатыЗаймовСрезПоследних.ДатаПланируемогоПогашения,
	РасчетныеДатыЗаймовСрезПоследних.ДатаОкончанияПериодаГарантированногоОжидания,
	ОстаткиПоЗаймам.КлассификационнаяКатегорияЗайма,
	ОстаткиПоЗаймам.СуммаОстаток,
	ВЫБОР
		КОГДА РасчетныеДатыЗаймовСрезПоследних.ДатаПланируемогоПогашения < &Дата
				И ОстаткиПоЗаймам.КлассификационнаяКатегорияЗайма = ЗНАЧЕНИЕ(Перечисление.КатегорииЗаймов.Стандартные)
			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииЗаймов.Просроченные)
		КОГДА РасчетныеДатыЗаймовСрезПоследних.ДатаОкончанияПериодаГарантированногоОжидания < &Дата
				И ОстаткиПоЗаймам.КлассификационнаяКатегорияЗайма = ЗНАЧЕНИЕ(Перечисление.КатегорииЗаймов.Просроченные)
			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииЗаймов.Проблемные)
		ИНАЧЕ ОстаткиПоЗаймам.КлассификационнаяКатегорияЗайма
	КОНЕЦ КАК НоваяКлассификационнаяКатегорияЗайма,
	ОстаткиПоЗаймам.Подразделение,
	ОстаткиПоЗаймам.Клиент
ПОМЕСТИТЬ ТаблицаЗаймов
ИЗ
	РегистрСведений.РасчетныеДатыЗаймов.СрезПоследних(
			&Дата,
			Заем В
				(ВЫБРАТЬ
					ОстаткиПоЗаймам.Заем
				ИЗ
					ОстаткиПоЗаймам КАК ОстаткиПоЗаймам)) КАК РасчетныеДатыЗаймовСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиПоЗаймам КАК ОстаткиПоЗаймам
		ПО РасчетныеДатыЗаймовСрезПоследних.Заем = ОстаткиПоЗаймам.Заем
ГДЕ
	(РасчетныеДатыЗаймовСрезПоследних.ДатаПланируемогоПогашения < &Дата
			ИЛИ РасчетныеДатыЗаймовСрезПоследних.ДатаОкончанияПериодаГарантированногоОжидания < &Дата)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЗаймов.Заем,
	ТаблицаЗаймов.ДатаПланируемогоПогашения,
	ТаблицаЗаймов.ДатаОкончанияПериодаГарантированногоОжидания,
	ТаблицаЗаймов.КлассификационнаяКатегорияЗайма,
	ТаблицаЗаймов.СуммаОстаток,
	ТаблицаЗаймов.НоваяКлассификационнаяКатегорияЗайма,
	ТаблицаЗаймов.Подразделение,
	ТаблицаЗаймов.Клиент,
	ТаблицаЗаймов.Заем.ЗаемПоАкцииОИЛ КАК ЗаемПоАкцииОИЛ
ИЗ
	ТаблицаЗаймов КАК ТаблицаЗаймов
ГДЕ
	ТаблицаЗаймов.КлассификационнаяКатегорияЗайма <> ТаблицаЗаймов.НоваяКлассификационнаяКатегорияЗайма
Показать


Запрос №2.
ВЫБРАТЬ
	РасчетыПоОсновномуДолгуОстатки.Заем,
	РасчетыПоОсновномуДолгуОстатки.СуммаОстаток,
	ЕСТЬNULL(ПредоплаченноеВознаграждениеОстатки.СуммаВознагражденияОстаток, 0) КАК ОстатокДБП,
	РасчетыПоОсновномуДолгуОстатки.Клиент,
	РасчетыПоОсновномуДолгуОстатки.Подразделение
ПОМЕСТИТЬ ОстатокКредитногоПортфеля
ИЗ
	РегистрНакопления.РасчетыПоОсновномуДолгу.Остатки(
			&Дата,
			(Организация, КлассификационнаяКатегорияЗайма) В
				(ВЫБРАТЬ
					&Организация,
					&Стандарт)) КАК РасчетыПоОсновномуДолгуОстатки
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПредоплаченноеВознаграждение.Остатки КАК ПредоплаченноеВознаграждениеОстатки
		ПО РасчетыПоОсновномуДолгуОстатки.Заем = ПредоплаченноеВознаграждениеОстатки.Заем
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОстатокКредитногоПортфеля.Заем,
	ОстатокКредитногоПортфеля.СуммаОстаток,
	РасчетныеДатыЗаймовСрезПоследних.Период,
	РасчетныеДатыЗаймовСрезПоследних.ДатаНачалаДБП,
	РасчетныеДатыЗаймовСрезПоследних.ДатаНачалаПродления,
	РасчетныеДатыЗаймовСрезПоследних.ДатаОкончанияПродления,
	РасчетныеДатыЗаймовСрезПоследних.ДатаПланируемогоПогашения,
	РасчетныеДатыЗаймовСрезПоследних.ДатаОкончанияПериодаГарантированногоОжидания,
	ОстатокКредитногоПортфеля.Клиент,
	ОстатокКредитногоПортфеля.Подразделение,
	РасчетныеДатыЗаймовСрезПоследних.ДатаНачисленияДоходов,
	РасчетныеДатыЗаймовСрезПоследних.ДатаОкончанияСверхГарантированногоПериодаОжидания
ИЗ
	ОстатокКредитногоПортфеля КАК ОстатокКредитногоПортфеля
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РасчетныеДатыЗаймов.СрезПоследних(
				&Дата,
				Заем В
					(ВЫБРАТЬ
						ОстатокКредитногоПортфеля.Заем
					ИЗ
						ОстатокКредитногоПортфеля КАК ОстатокКредитногоПортфеля)) КАК РасчетныеДатыЗаймовСрезПоследних
		ПО ОстатокКредитногоПортфеля.Заем = РасчетныеДатыЗаймовСрезПоследних.Заем
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыЗаймов.СрезПоследних КАК СтатусыЗаймовСрезПоследних
		ПО ОстатокКредитногоПортфеля.Заем = СтатусыЗаймовСрезПоследних.Заем
ГДЕ
	ОстатокКредитногоПортфеля.ОстатокДБП = 0
	И ОстатокКредитногоПортфеля.Заем.МетодОплатыВознаграждения = &МетодОплатыВознаграждения
	И РасчетныеДатыЗаймовСрезПоследних.ДатаПланируемогоПогашения = ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ), СЕКУНДА, -1)
	И СтатусыЗаймовСрезПоследних.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаймов.СанкционныйСписок)
Показать
Прикрепленные файлы:
13. Sashares 34 05.10.22 14:25 Сейчас в теме
(7)
В запросе 1:
В 1 запросе добавить индекс по полю Заем.
во 2 запросе сначала выбрать данные РС во временную таблицу, и добавить индекс по полю заем, и уже в следующем запросе соединить данные из 1 и 2 запроса.

Во втором запросе отбор по МетодОплатыВознаграждения выполняется в самом последнем запросе, хотя это можно отобрать заранее
И ОстатокКредитногоПортфеля.Заем.МетодОплатыВознаграждения = &МетодОплатыВознаграждения
27. RustamZz 05.10.22 16:41 Сейчас в теме
(7) В первом пакете. В первом запросе сгруппировать - лишнее, во втором запросе условие из параметров убрать переделать соединение на внутреннее. Можно ли убрать из параметра запроса Дата? Если у среза есть реальная таблица, то выигрыш будет заметный. Условие или - плохое попробуйте заменить на объединение. Ну и третий запрос от него можно избавится перенести условие во второй. Про индексы уже написали.

По второму пакету уже все замечания высказали я к ним присоединяюсь.
6. Vitaly1C8 05.10.22 12:02 Сейчас в теме
(1) как вариант, убедиться что в это же время не делается бекап базы;
и не работают другие регл задания ...
особенно следует проверить тестовые базы - в которых как правило забывают отключить регл-задания, и все тестовые базы вместе с основной колбасят;
8. Bajo 80 05.10.22 13:36 Сейчас в теме
(6)бэкап происходит в другое время. единственное веб-сервисы выполняются в это время а их не должно быть.
29. buganov 200 09.04.23 19:55 Сейчас в теме
(1) снимайте планы запросов, когда хорошо и когда плохо. Это простое правило часто может ответить на эти вопросы.
В Вашей ситуации может быть от железок до неактуальной статистики и закешенного плохого плана
2. user1203706 13 05.10.22 11:11 Сейчас в теме
(1) поди в лог пишется упорно что-то при выполнении этого рег задания, да ?
3. Bajo 80 05.10.22 11:15 Сейчас в теме
(2)Есть Лог регламентных процедур. Записей за раз делает не больше 100. Общее количество 65000. Думаю не здесь проблема.
4. user1203706 13 05.10.22 11:17 Сейчас в теме
(3) ну, нам отсюда не видно, что вообще делает рег задание и какие параметры сервера, на котором оно выполняется. Мот там и ресурсов нет вовсе, например, памяти свободной
9. user1203706 13 05.10.22 13:55 Сейчас в теме
(1) в запросе1

в первом запросе группировка не нужна, последний запрос лишний
10. user1203706 13 05.10.22 13:57 Сейчас в теме
во втором запросе основной тормоз тут
И ОстатокКредитногоПортфеля.Заем.МетодОплатыВознаграждения = &МетодОплатыВознаграждения
11. user1203706 13 05.10.22 13:59 Сейчас в теме
+ не ясно. В Ваших РС нет разве измерений по Организации ?
12. user1203706 13 05.10.22 14:01 Сейчас в теме
+ не ясно, чего дальше вы с результатом этого всего делаете в базе.
14. starik-2005 3040 05.10.22 14:40 Сейчас в теме
А нафига (Х, У) В (ВЫБРАТЬ &П1, &П2)? Тут слово ВЫБРАТЬ вообще не нужно. Ну и два соединения с подзапросами (срез последних) - это типа жесть.
15. cdiamond 233 05.10.22 14:43 Сейчас в теме
ну если один и тот же запрос выполняется то 15 минут, то 1.5 часа то проверь статистику ещё, и пересчет итогов
Дмитрий74Чел; +1 Ответить
16. AlexandrSmith 69 05.10.22 14:45 Сейчас в теме
1) Необходимо посмотреть не выполняется ли никаких файловых операций на диске. Для этого достаточно монитором посмотреть.
2) Свободное место на дисках проверьте, бывают установки квот.
3) Попробуйте, провести реиндексацию базы данных.
17. AlexandrSmith 69 05.10.22 14:48 Сейчас в теме
(1) Дело в том, что основная проблема производительности, как правило, файловые операции и нехватка оперативной памяти.
18. AlexandrSmith 69 05.10.22 14:56 Сейчас в теме
Нужен замер производительности запустите в мониторе, посмотрите в течении всего времени.
https://windowsnotes.ru/windows-server-2008/schetchiki-proizvoditelnosti-chast-1/#:~:text=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20Performance%20Monitor%­20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B2,msc.
Performance Monitor
Основным инструментом для управления счетчиками производительности в Windows является оснастка Монитор производительности (Performance Monitor), в более ранних версиях Windows известная как Системный монитор. Performance Monitor имеет несколько режимов отображения и позволяет выводить показания счетчиков производительности в режиме реального времени, а также сохранять данные в лог-файлы для последующего изучения.
19. cdiamond 233 05.10.22 15:01 Сейчас в теме
(18) да не мелочись уже, отправь автора читать книжку Филиппова ))
20. AlexandrSmith 69 05.10.22 15:21 Сейчас в теме
(19) Хорошая книга, я читал и сертификат сдал. Правда, у Гилева тоже отличный сайт.
22. AlexandrSmith 69 05.10.22 15:23 Сейчас в теме
Монитор все равно надо запустить и пики пронаблюдать(19) .
23. AlexandrSmith 69 05.10.22 15:36 Сейчас в теме
(1) Была реальная ситуация, слетели индексы при обновлении на основных регистрах УТ 11. Так что, реиндиксация очень полезная вещь.
Дмитрий74Чел; +1 Ответить
24. AlexandrSmith 69 05.10.22 15:38 Сейчас в теме
Вот к примеру задача был, очень помогло:

http://www.gilev.ru/forum/viewtopic.php?f=18&t=1836

снять галочку ППД со всяких левых объектов типа истории версионирования и т.п.
свернуть таблицы где больше 10 млн строк
делать слияние индексов ночью в наименее загруженный период
25. AlexandrSmith 69 05.10.22 15:41 Сейчас в теме
http://www.gilev.ru/forum/viewtopic.php?f=18&t=1474&p=6264&hilit=%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD#p6264
блокировки живут на сервере 1С преимущественно
но обмены и на скуле генерирует блокировки иногда или сами попадают на них
08:31.365000-0,EXCP,6,process=rphost,p:processName=lotos_01,t:clientID=116,t:applicationName=BackgroundJob,,t:connectID=1707,SessionID=22695,Usr=Экспорт в МИС,dbpid=76,Exception=DataBaseException,Descr='Конфликт блокировок при выполнении транзакции:Microsoft SQL Server Native Client 11.0: Lock request time out period exceeded.HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=38, Severity=10, native=1222, line=1',Context='ОбщийМодуль._ОбменMIS.Модуль : 2337 : ОбработатьОбъектПланаОбмена("ДокументСсылка","Документы","РеализацияТоваровУслуг", Узел); ОбщийМодуль._ОбменMIS.Модуль : 2450 : ОтправитьОбъектПоСЗ(Новый СписокЗначений,Тип+"."+ТипЗ, НастройкиБаз,Новый СписокЗначений); ОбщийМодуль._ОбменMIS.Модуль : 2269 : РеализацияТоваровУслуг(СЗ, НастройкиБаз); ОбщийМодуль._ОбменMIS.Модуль : 233 : ОтправитьВМИС(ТекстЗапроса,СтрПараметров,СтрНовТип,СтрДополнительныеОператоры, НастройкиБаз) ОбщийМодуль._ОбменMIS.Модуль : 1544 : Результат = Запрос.Выполнить();'
26. AlexandrSmith 69 05.10.22 15:49 Сейчас в теме
28. buganov 200 09.04.23 19:51 Сейчас в теме
(25) Вы привели пример таймаута на блокировке СУБД, на сервере 1С блокировки - события TTIMEOUT
30. Vitaly1C8 10.04.23 10:53 Сейчас в теме
Еще такие мысли:
Запрос №1.
ПОМЕСТИТЬ ОстаткиПоЗаймам
ИНДЕКСИРОВАТЬ ПО Заем


Запрос №1, 2.
Заем В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ОстаткиПоЗаймам.Заем
ИЗ
ОстаткиПоЗаймам КАК ОстаткиПоЗаймам)
Оставьте свое сообщение

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