|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Добрый день, друзья! Прошу Вас пожалуйста подсказать может быть кто-то сталкивался с подобным вопросом. Версия базы данных 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”, что приводит к потере производительности. Для решения данной проблемы ждем ваших рекомендаций. Буду очень Вам признателен и благодарен за любую помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2020, 15:29 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Leonid1980, можно включить принудительную параметризацию запросов на уровне базы, это будет иметь свои последствия, или создать структуру план запроса (руководство планов), но это имеет свои неудобства. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2020, 18:31 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
На месте MS SQL Server я б ваще лежачую забастовку объявил. До момента увольнения "труженика, написавшего этот триггер". PS."При каждом изменении переменной @Base, SQL Server для вызова процедуры SP_Change каждый раз генерирует новый “execution plan" - "после этого" не означает "вследствие этого" . ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2020, 19:32 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Leonid1980 При каждом изменении переменной @Base, SQL Server для вызова процедуры SP_Change каждый раз генерирует новый “execution plan”, что приводит к потере производительности. Для решения данной проблемы ждем ваших рекомендаций. новые "execution plan" генерятся для вызова процедуры или для запросов в ней? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2020, 22:08 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
При каждом изменении переменной @Base, генерирует новый “execution plan” в теле триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 08:24 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Leonid1980, принудительная параметризация не поможет, но разве велики затраты на компиляцию этого кода? Несколько миллисекунд от силы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 09:26 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Владислав Колосов, Да затраты велики на компиляцию этого кода, около 600 миллисекунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 10:00 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Leonid1980 Да затраты велики на компиляцию этого кода, около 600 миллисекунд. Вероятнее всего это ожидания блокировок. Настройте профайлер на отлов SP:Recompile и SP:StmtRecompile и выясните причины рекомпиляций. ЗЫ: Заодно подумайте - что будет в этом триггере, если в таблице обновят одной инструкцией несколько строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 10:23 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
invm, 600 миллисекунд проходит не на рекомпиляцию, а на генерирования нового “execution plan”-а в теле триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 11:32 |
|
Производительнось SQL SERVER
|
|||
---|---|---|---|
#18+
Leonid1980 а на генерирования нового “execution plan”-а в теле триггера. Тогда все равно берете профайлер и выясняете причину. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 11:37 |
|
|
start [/forum/topic.php?fid=46&msg=39994139&tid=1685707]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 406ms |
0 / 0 |