Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Производительнось SQL SERVER / 11 сообщений из 11, страница 1 из 1
31.08.2020, 15:29
    #39994139
Leonid1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Добрый день, друзья!
Прошу Вас пожалуйста подсказать может быть кто-то сталкивался с подобным вопросом.

Версия базы данных SQL SERVER 2016 SP2 CU8.
Имеется четыре базы данных BASE, BASE1, BASE2, BASE3.

В базе BASE при добавлении новой записи, срабатывает триггер (FOR UPDATE) и в зависимости от данных, вызывается процедура из BASE1, либо из BASE2, либо из BASE3.

USE BASE
CREATE TRIGGER [dbo].[TR_Doc_U] ON [dbo].[Doc] FOR UPDATE
AS
BEGIN
DECLARE @Base INTEGER
DECLARE @ID INTEGER
DECLARE @Name VARCHAR(50)

SELECT @Base = Base, @ID = ID, @Name = Name FROM INSERTED
IF @Base = 1 BEGIN
EXEC BASE1.dbo.SP_Change @ID, @Name
END ELSE
IF @Base = 2 BEGIN
EXEC BASE2.dbo.SP_Change @ID, @Name
END ELSE
IF @Base = 3 BEGIN
EXEC BASE3.dbo. SP_Change @ID, @Name
END
END


При каждом изменении переменной @Base, SQL Server для вызова процедуры SP_Change каждый раз генерирует новый “execution plan”, что приводит к потере производительности. Для решения данной проблемы ждем ваших рекомендаций.

Буду очень Вам признателен и благодарен за любую помощь!
...
Рейтинг: 0 / 0
31.08.2020, 18:31
    #39994207
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Leonid1980,

можно включить принудительную параметризацию запросов на уровне базы, это будет иметь свои последствия, или создать структуру план запроса (руководство планов), но это имеет свои неудобства.
...
Рейтинг: 0 / 0
31.08.2020, 19:32
    #39994223
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
На месте MS SQL Server я б ваще лежачую забастовку объявил. До момента увольнения "труженика, написавшего этот триггер".

PS."При каждом изменении переменной @Base, SQL Server для вызова процедуры SP_Change каждый раз генерирует новый “execution plan" - "после этого" не означает "вследствие этого" .
...
Рейтинг: 0 / 0
31.08.2020, 22:08
    #39994247
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Leonid1980
При каждом изменении переменной @Base, SQL Server для вызова процедуры SP_Change каждый раз генерирует новый “execution plan”, что приводит к потере производительности. Для решения данной проблемы ждем ваших рекомендаций.

новые "execution plan" генерятся для вызова процедуры или для запросов в ней?
...
Рейтинг: 0 / 0
01.09.2020, 08:24
    #39994302
Leonid1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
При каждом изменении переменной @Base, генерирует новый “execution plan” в теле триггера.
...
Рейтинг: 0 / 0
01.09.2020, 09:26
    #39994319
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Leonid1980,

принудительная параметризация не поможет, но разве велики затраты на компиляцию этого кода? Несколько миллисекунд от силы.
...
Рейтинг: 0 / 0
01.09.2020, 10:00
    #39994329
Leonid1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Владислав Колосов,

Да затраты велики на компиляцию этого кода, около 600 миллисекунд.
...
Рейтинг: 0 / 0
01.09.2020, 10:23
    #39994337
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Leonid1980
Да затраты велики на компиляцию этого кода, около 600 миллисекунд.
Там нечему компилироваться 600 мс.
Вероятнее всего это ожидания блокировок.

Настройте профайлер на отлов SP:Recompile и SP:StmtRecompile и выясните причины рекомпиляций.

ЗЫ: Заодно подумайте - что будет в этом триггере, если в таблице обновят одной инструкцией несколько строк.
...
Рейтинг: 0 / 0
01.09.2020, 11:32
    #39994369
Leonid1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
invm,

600 миллисекунд проходит не на рекомпиляцию, а на генерирования нового “execution plan”-а в теле триггера.
...
Рейтинг: 0 / 0
01.09.2020, 11:37
    #39994370
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Leonid1980
а на генерирования нового “execution plan”-а в теле триггера.
Это вы так называете компиляцию/рекомпиляцию процедур SP_Change?

Тогда все равно берете профайлер и выясняете причину.
...
Рейтинг: 0 / 0
01.09.2020, 13:57
    #39994460
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительнось SQL SERVER
Leonid1980,

невозможно тратить столько времени на несколько строк кода. Убедитесь, что это не процедуры. Может это запрос в другие базы.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Производительнось SQL SERVER / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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