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

Версия базы данных 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
Производительнось SQL SERVER
    #39994207
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid1980,

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

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

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

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

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

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

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

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

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

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


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