powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сократить максимальное время выполнения запроса?
14 сообщений из 14, страница 1 из 1
Как сократить максимальное время выполнения запроса?
    #39848854
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: Запросы по вставке данных из табличного представления в таблицу с колоночным кластерным индексом, выполняющиеся каждую ночь - сначала запись данных из вьюхи во временную таблицу, а из неё - в таблицу с columnstore. При этом, суммарное время выполнения запросов может колебаться от семнадцати минут до пяти часов. И самое интересное, число записей не коррелирует с временем выполнения запросов.

Так как запросы запускаются ночью параллельно с заданием на бэкап всех баз, то вопрос - как может влиять процесс бэкапа базы на скорость выполнения запросов?

Встретил на форуме http://www.sql.ru/forum/778661/backup-i-blokirovka-raboty-bazy мнение
МуМуНапрямую бэкап не может приводить к блокировке а вот косвенно может приводить к блокировке на ресурсах. В результате бэкапа возникает высокая нагрузка в результате чего увеличивается среднее время транзакций и совместно с ними и время блокировок.

И вот как это всё ускорить?
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848866
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiИ самое интересное, число записей не коррелирует с временем выполнения запросов.
Прямо шахерезада какая-то. Сказки рассказывает.

Чо, 1 (одна) запись вставляется 5 часов?
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848868
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вставлять в пустую таблицу без индексов в несколько потоков, затем создать индексы и переключить эту таблицу как секцию в целевую таблицу
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848876
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,

ну и проблемы у вас могут быть отнюдь не на вставку, например, одна из таблиц вьюхи заблокирована
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848899
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,

то есть неизвестно - на каком запросе появляются задержки?
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848950
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовDaniilSeryi,

то есть неизвестно - на каком запросе появляются задержки?

Нет. Завтра доработаю журналирование.

КритикDaniilSeryi,

ну и проблемы у вас могут быть отнюдь не на вставку, например, одна из таблиц вьюхи заблокирована

Вот и у меня такие же подозрения, но тогда как эти блокировки отслеживать без создания лишней нагрузки на сервер?

Так как нагрузка на продуктовый сервер мне не нужна, то, по идее, Profiler не подходит. Так как с кем из админов не поговоришь - все утверждают, что профайлер сильно грузит сервер.

Другой вариант - sp_configure 'blocked process threshold (s)' + Extended Events. Про то, какую нагрузку создаст этот вариант - не в курсе. Кто подскажет?

Третий вариант - раз в 10-15 минут дергать sp_who2 и записывать её отфильтрованный результат в базу. В принципе, можно совместить с получением кода блокированной и блокирующей сессий.

Четвёртый вариант - периодическое дёрганье этого скрипта с записью в таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT  blocking.session_id AS blocking_session_id ,
	blocked.session_id AS blocked_session_id ,
	waitstats.wait_type AS blocking_resource ,
	waitstats.wait_duration_ms/1000 as wait_duration_sec ,
	waitstats.wait_duration_ms/1000/60 as wait_duration_min ,
	waitstats.wait_duration_ms/1000/60/60 as wait_duration_hour ,
	waitstats.resource_description ,
	blocked_cache.text AS blocked_text ,
	blocking_cache.text AS blocking_text
FROM    sys.dm_exec_connections AS blocking
	INNER JOIN sys.dm_exec_requests blocked
		ON blocking.session_id = blocked.blocking_session_id
	CROSS APPLY sys.dm_exec_sql_text(blocked.sql_handle)
						blocked_cache
	CROSS APPLY sys.dm_exec_sql_text(blocking.most_recent_sql_handle)
						blocking_cache
	INNER JOIN sys.dm_os_waiting_tasks waitstats
		ON waitstats.session_id = blocked.session_id
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848952
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222DaniilSeryiИ самое интересное, число записей не коррелирует с временем выполнения запросов.
Прямо шахерезада какая-то. Сказки рассказывает.

Чо, 1 (одна) запись вставляется 5 часов?

Были случаи когда полмиллиона строк вставлялись 5 часов, а два миллиона - 15 минут.
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848955
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DaniilSeryi,
Натрави на сервер SQLBlocks, для начальной оценки масштабов блокировок хватит.
Если админы знают о проблеме "17 минут-5 часов" и втирают, что профайлер будет сильно грузить сервер, то они либо ленивы, либо заинтересованы в том, чтобы проблема не исследовалась нормальными средствами - ночами майнят эфир :)
Не совпадает ли 5 часов с полным бекапом баз, а минуты - с дифференциальными или логами?
Не делается ли бекап на тот же диск, где лежат базы и где расположены файлы целевой таблицы?
Не зависает ли еще какая-нибудь закачка на "много часов", которая выполняется как раз когда целевая табличка заполняется 5 часов?
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39848996
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiВстретил на форуме мнение
Конечно, бакап потребляет ресурсы, и из за этого замедляются выполнение каких то других действий, требующих ресурсов, но объяснить этим колебания "от семнадцати минут до пяти часов" нельзя.

Явно тут дело в блокировке какого то ресурса, типа блокировки схемы, при выделении нового сегмента для колумнстор индекса (не изучал, это на уровне фантазий).

Вот некая информация о механизмах, блокировках, может, сумеете там что то почерпнуть: https://www.mssqltips.com/sqlservertip/4280/sql-server-2016-columnstore-index-enhancements--system-views-for-diskbased-tables/
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39849084
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DaniilSeryiДано: Запросы по вставке данных из табличного представления в таблицу с колоночным кластерным индексом, выполняющиеся каждую ночь - сначала запись данных из вьюхи во временную таблицу, а из неё - в таблицу с columnstore. При этом, суммарное время выполнения запросов может колебаться от семнадцати минут до пяти часов. И самое интересное, число записей не коррелирует с временем выполнения запросов.

Так как запросы запускаются ночью параллельно с заданием на бэкап всех баз, то вопрос - как может влиять процесс бэкапа базы на скорость выполнения запросов?

Встретил на форуме https://www.sql.ru/forum/778661/backup-i-blokirovka-raboty-bazy мнение
МуМуНапрямую бэкап не может приводить к блокировке а вот косвенно может приводить к блокировке на ресурсах. В результате бэкапа возникает высокая нагрузка в результате чего увеличивается среднее время транзакций и совместно с ними и время блокировок.

И вот как это всё ускорить?
Извините, а полка у вас какая? Ну, дисковая подсистема?
Шпиндели, на 4000 иопс суммарно, сферических, в вакууме? И вы запускаете бэкап пары десятков баз и параллельно со всем этим выгрузку и загрузку?
Я правильно угадал?
Ну, тогда ответ: "Процесс бэкапа баз будет влиять на скорость выполнения запросов - негативно".
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39849415
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,

sp_whoisactive поставить в расписание, скажем, раз в 10 минут
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39849520
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiТак как нагрузка на продуктовый сервер мне не нужна, то, по идее, Profiler не подходит. Так как с кем из админов не поговоришь - все утверждают, что профайлер сильно грузит сервер.

Другой вариант - sp_configure 'blocked process threshold (s)' + Extended Events. Про то, какую нагрузку создаст этот вариант - не в курсе. Кто подскажет? А чё админы сами не настроят мониторинг? Так то это их работа.
XEvents это самый легковесный и точный способ мониторинга блокировок. Немного нагрузки будет только в момент парсинга дурацкого XML. Если там вообще будет что просить.
Запускать же что то каждые 15 минут - бред хотя бы потому, а что если блокировка длилась 3 минуты? Отслеживать так долгие запросы - да, ловить так блокировки я бы не стал.
Профайлер только по блокировкам не намного хуже, но только не сам профайлер, а просто серверный трейс.
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39849523
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЯвно тут дело в блокировке какого то ресурса, типа блокировки схемы, при выделении нового сегмента для колумнстор индекса (не изучал, это на уровне фантазий).Телепат? Это может быть что угодно, включая слетающие периодически планы. Но блокировки конечно надо проверить.
Кстати, совсем забыл. их де можно легко вытащить из логов system health. Даже не настраивая ничего предварительно.
...
Рейтинг: 0 / 0
Как сократить максимальное время выполнения запроса?
    #39849583
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,
Параллельный бэкап базы, в то время как другой процесс вставляет записи в таблицу этой базы - это просто мега-плохая идея!
Вы пробовали потом такой бекап отресторить? Процедура будет идти весьма продолжительно, так как DBE в начале процедуры бекапа работает с базой как в модели FULL, и даже если она SIMPLE - то переключает ее неявно в данный режим, и дописывает все транзакции в журнал, что происходили от точки начала операции резервного копирования и в ее процессе. Если такой бекап потом восстанавливать - то на этапе 100% - DBE начинает накатывать те самые транзакции из журнала что, как сказано выше - может быть весьма долго и затратно.

Если бекапы входят в DR-план, который надо по-хорошему тестировать время от времени - то есть риск не уложиться в RTO
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сократить максимальное время выполнения запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]