Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Параллельная вставка/обновление таблиц в Stored Proc  [new]
SerVal
Member

Откуда: Москва, Ясенево
Сообщений: 139
Есть stored proc для обновления 3-х таблиц.

create stored proc update_3_tables
 @my_data int
 
as begin

update table T1 set data=@my_data  -- 30 секунд
update table T2 set data=@my_data  -- 30 секунд
update table T3 set data=@my_data  -- 30 секунд

end

Итого 90 секунд. Почему на 30 ? Никаких зависимостей между таблицами нет.
Я-то думал, что будет 30.
Есть ли возможность указать, что обновлять все 3 таблицы нужно одновременно ?

Microsoft SQL Server 2008.
10 авг 12, 21:42    [12996578]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Напишите 3 процедуры и запустите их в трех разных коннектах. Будет 30 секунд, если дисковая не сдохнет.

Сообщение было отредактировано: 10 авг 12, 21:51
10 авг 12, 21:51    [12996602]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
SerVal
Итого 90 секунд. Почему на 30 ? Никаких зависимостей между таблицами нет.
Я-то думал, что будет 30.
Есть ли возможность указать, что обновлять все 3 таблицы нужно одновременно ?
Увы, сиквел не умеет распаралеливать разные стейтменты, даже если нет явных зависимостей.
10 авг 12, 22:07    [12996656]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
SerVal
Member

Откуда: Москва, Ясенево
Сообщений: 139
А этот cost of parallelism ? Он по умолчанию = 5. Мож указать ему 0 или 1000 ?
Или он совсем не причём ?
10 авг 12, 22:14    [12996690]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
SerVal
А этот cost of parallelism ? Он по умолчанию = 5. Мож указать ему 0 или 1000 ?
Или он совсем не причём ?
Это относится к параллелизму в одном запросе.
10 авг 12, 22:32    [12996765]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
SerVal
Member

Откуда: Москва, Ясенево
Сообщений: 139
Спасибо.
:(
10 авг 12, 23:27    [12996968]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
SerVal,

По мотивам 12995711
Может как-то так:
CREATE TABLE tab01
(id int IDENTITY(1,1)
,tdate smalldatetime
,num int
,PRIMARY KEY CLUSTERED (id ASC)
)
-- остальные таблицы с аналогичной структурой
GO
SELECT	tdate
FROM	(
		UPDATE tab01 SET tdate =GETDATE()
		OUTPUT	[INSERTED].tdate INTO tab04 (tdate)			
		) UPDATE_01	
		,
		(
		UPDATE tab02 SET tdate =GETDATE()
		OUTPUT	INSERTED.tdate INTO tab03 (tdate)			
		) UPDATE_02

Как идея - придумать связь между таблицами 1=1 и некий LEFT JOIN.
Этот вариант не работает.
11 авг 12, 12:43    [12997565]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
trew
Как идея - придумать связь между таблицами 1=1 и некий LEFT JOIN.
Этот вариант не работает.
Ну какой ещё LEFT JOIN для 2-х апдэйтов :-)
11 авг 12, 19:34    [12998342]     Ответить | Цитировать Сообщить модератору
 Re: Параллельная вставка/обновление таблиц в Stored Proc  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
alexeyvg
trew
Как идея - придумать связь между таблицами 1=1 и некий LEFT JOIN.
Этот вариант не работает.
Ну какой ещё LEFT JOIN для 2-х апдэйтов :-)
"Станьте мыши ежиками" (c)
11 авг 12, 19:37    [12998348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить