Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Андрей Ч. Member Откуда: Челябинск Сообщений: 173 |
Добрый день! Помогите пожалуйста решить следующую проблему: Есть в MS SQL 2008 R2 линк к Oracle 11g. В базе MS SQL есть таблица CREATE TABLE [dbo].[PROPVALUE]( [BOLD_ID] [int] NULL, [BOLD_TYPE] [smallint] NULL, [BU_MAX] [float] NULL, [BU_MIN] [float] NULL, [BU_ORIGIN] [float] NULL, [FORMATTYPE] [int] NULL, [TEXTVALUE] [varchar](255) NULL, [ENUMITEM] [int] NULL, [CONTEXT] [int] NULL, [PROPHAVINGOBJECT] [int] NULL, [PROPDEF] [int] NULL, [OPTIONS] [int] NULL ) ON [PRIMARY] В базе Oracle есть идентичная таблица. На таблицу в MS SQL есть тригер SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create TRIGGER [dbo].[CHANGE_PROPVALUE] ON [dbo].[PROPVALUE] AFTER INSERT, DELETE, UPDATE as BEGIN SET NOCOUNT ON; IF EXISTS(SELECT * FROM DELETED) AND EXISTS(SELECT * FROM INSERTED) update MISORA..DBMISIMP.PROPVALUE set [BOLD_TYPE] = INSERTED.BOLD_TYPE, [BU_MAX] = INSERTED.BU_MAX, [BU_MIN] = INSERTED.BU_MIN, [BU_ORIGIN] = INSERTED.BU_ORIGIN, [FORMATTYPE] = INSERTED.FORMATTYPE, [TEXTVALUE] = INSERTED.TEXTVALUE, [ENUMITEM] = INSERTED.ENUMITEM, [CONTEXT] = INSERTED.CONTEXT, [PROPHAVINGOBJECT] = INSERTED.PROPHAVINGOBJECT, [PROPDEF] = INSERTED.PROPDEF, [OPTIONS] = INSERTED.OPTIONS from INSERTED where PROPVALUE.BOLD_ID in (select BOLD_ID from INSERTED) IF EXISTS(SELECT * FROM DELETED) AND NOT EXISTS(SELECT * FROM INSERTED) delete from MISORA..DBMISIMP.PROPVALUE where bold_id in (select bold_id from DELETED) IF NOT EXISTS(SELECT * FROM DELETED) AND EXISTS(SELECT * FROM INSERTED) insert MISORA..DBMISIMP.PROPVALUE([BOLD_ID],[BOLD_TYPE],[BU_MAX],[BU_MIN],[BU_ORIGIN],[FORMATTYPE],[TEXTVALUE],[ENUMITEM],[CONTEXT],[PROPHAVINGOBJECT],[PROPDEF],[OPTIONS]) select [BOLD_ID],[BOLD_TYPE],[BU_MAX],[BU_MIN],[BU_ORIGIN],[FORMATTYPE],[TEXTVALUE],[ENUMITEM],[CONTEXT],[PROPHAVINGOBJECT],[PROPDEF],[OPTIONS] from INSERTED END GO Проблема следующая, если удалять строку в таблице или обновлять, то с включенным триггером одна строка обрабатывается 1,5 минуты. Всего в таблицах 375549 строк. Можно ли как нибудь ускорить? Такое ощущение, что проблема в транзакции, которую создает тригер. Если выполнить запрос delete from MISORA..DBMISIMP.PROPVALUE where bold_id=12345 То он выполняется моментально. Вставка строки триггером отрабатывается тоже быстро. |
20 май 15, 06:48 [17664487] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А так begin transaction delete from MISORA..DBMISIMP.PROPVALUE where bold_id=12345 commit transaction |
||
20 май 15, 08:19 [17664651] Ответить | Цитировать Сообщить модератору |
Андрей Ч. Member Откуда: Челябинск Сообщений: 173 |
Glory, тоже за секунду выполнилось, значит не в транзакциях дело, что может быть еще, куда копать? |
20 май 15, 10:33 [17665232] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Как вы вообще измерили время выполнения команд в триггере ? |
||
20 май 15, 10:34 [17665240] Ответить | Цитировать Сообщить модератору |
Андрей Ч. Member Откуда: Челябинск Сообщений: 173 |
Glory, в студии выполнял удаление одной строки из таблицы в MS SQL (при этом отрабатывал тригер который удалял в Oracle), тоесть у меня есть общее время удаления и в MS SQL и в Oracle, которое пишет студия. |
20 май 15, 11:27 [17665503] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И что вам студия дает временную раскладку по каждой команде триггера ? |
||
20 май 15, 11:29 [17665509] Ответить | Цитировать Сообщить модератору |
Андрей Ч. Member Откуда: Челябинск Сообщений: 173 |
Glory, нет только общее время выполнения запроса. |
20 май 15, 11:41 [17665578] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Тогда зачем вы так ответили на вопрос "Как вы вообще измерили время выполнения команд в триггере ?" ? |
||
20 май 15, 11:43 [17665590] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
Зачем это вообще тригером делать? |
20 май 15, 12:16 [17665754] Ответить | Цитировать Сообщить модератору |
Андрей Ч. Member Откуда: Челябинск Сообщений: 173 |
Владислав Колосов, задача вообще состоит в том, чтобы обеспечить идентичность таблиц на MS SQL и Oracle. Есть еще варианты решения? |
20 май 15, 13:03 [17666039] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Про репликацию слышали ? |
||
20 май 15, 13:05 [17666055] Ответить | Цитировать Сообщить модератору |
Андрей Ч. Member Откуда: Челябинск Сообщений: 173 |
Glory, спасибо большое уже читаю. |
20 май 15, 13:29 [17666241] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |