Параллельное выполнение процедур

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Параллельное выполнение процедур

Сообщение abc » 19.01.2009 (Пн) 13:17

У меня есть ряд процедур (SQL Server 2000), если они вызываются в процедуре
exec sp_1
exec sp_2

exec sp_n, то время выполнения равно сумме времени выполнения всех вызываемых процедур. А если я их выполняю из Query Analyzer, одновременно, то общее время выполнения значительно меньше.
Вопрос такой: Можно ли в процедуре вызвать другие процедуры, но так что бы они выполнялись не последовательно а параллельно (одновременно). Или есть какое-то другое решение?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Параллельное выполнение процедур

Сообщение HandKot » 19.01.2009 (Пн) 16:41

как вариант, использовать асинхронное выполннеие процедур на стороне клиента
I Have Nine Lives You Have One Only
THINK!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Параллельное выполнение процедур

Сообщение alibek » 19.01.2009 (Пн) 17:19

Только для каждой процедуры нужен будет отдельный коннект.
В одном коннекте асинхронно может запускаться только одна команда.
Lasciate ogni speranza, voi ch'entrate.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Параллельное выполнение процедур

Сообщение HandKot » 20.01.2009 (Вт) 7:56

Только для каждой процедуры нужен будет отдельный коннект.
В одном коннекте асинхронно может запускаться только одна команда.


скорее всего не отдельный коннект, а отдельный объект ADODB.Command для каждой процедуры
I Have Nine Lives You Have One Only
THINK!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Параллельное выполнение процедур

Сообщение alibek » 20.01.2009 (Вт) 8:56

Нет, отдельный ADODB.Connection.
Lasciate ogni speranza, voi ch'entrate.

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Re: Параллельное выполнение процедур

Сообщение abc » 20.01.2009 (Вт) 11:16

Чего-то не въезжаю. Какой коннект? Какие клиенты? Все происходит на одном Сервере. Я так подумал, что самое простое просто написать несколько джобов, которые запускают разные процедуры (по расписанию) в одно и тоже время.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Параллельное выполнение процедур

Сообщение alibek » 20.01.2009 (Вт) 11:56

Там это делается точно так же.
Каждую процедуру надо запускать в отдельном коннекте. Либо с помощью джоба, либо непосредственно из процедуры.
Lasciate ogni speranza, voi ch'entrate.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Параллельное выполнение процедур

Сообщение HandKot » 20.01.2009 (Вт) 13:55

Чего-то не въезжаю. Какой коннект? Какие клиенты? Все происходит на одном Сервере. Я так подумал, что самое простое просто написать несколько джобов, которые запускают разные процедуры (по расписанию) в одно и тоже время.


тогда уж лучше DTS-пакет
I Have Nine Lives You Have One Only
THINK!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Параллельное выполнение процедур

Сообщение HandKot » 21.01.2009 (Ср) 8:09

2 alibek
и все-таки, в ВБ, нужено не отдельное соединение, а отдельный объект комманд
посмотрел профайлером, для каждого запуска в сиквеле образовался свой SPID (отдельный поток) и получается ХП запущены одновременно
и в коде ВБ не было ожидания окончания предыдущей команды при запуске ХП


Код: Выделить всё
    Dim cn As ADODB.Connection
    Dim cmd1 As ADODB.Command
    Dim cmd2 As ADODB.Command
    Dim cmd3 As ADODB.Command
   
    On Error GoTo EH
   
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=sqloledb; Data Source=MyDB;Initial Catalog=Test;Integrated Security=SSPI; Trusted_Connection=True;"
    cn.CommandTimeout = 0
    cn.CursorLocation = adUseClient
    cn.Open
   
    Set cmd1 = New ADODB.Command
    Set cmd2 = New ADODB.Command
    Set cmd3 = New ADODB.Command
   
    Set cmd1.ActiveConnection = cn
    Set cmd2.ActiveConnection = cn
    Set cmd3.ActiveConnection = cn
   
    cmd1.CommandTimeout = 0
    cmd2.CommandTimeout = 0
    cmd3.CommandTimeout = 0
   
    cmd1.CommandText = "exec test..test"
    cmd2.CommandText = "exec test..test"
    cmd3.CommandText = "exec test..test"
   
    cmd1.Execute , , adAsyncExecute
    cmd2.Execute , , adAsyncExecute
    cmd3.Execute , , adAsyncExecute
I Have Nine Lives You Have One Only
THINK!

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Re: Параллельное выполнение процедур

Сообщение abc » 22.01.2009 (Чт) 12:36

HandKot писал(а):2 alibek
и все-таки, в ВБ, нужено не отдельное соединение, а отдельный объект комманд
посмотрел профайлером, для каждого запуска в сиквеле образовался свой SPID (отдельный поток) и получается ХП запущены одновременно
и в коде ВБ не было ожидания окончания предыдущей команды при запуске ХП


...[/code]
Блин, откуда взялся VB? Речь идет о SQL Server 2000 В DTS таже беда, процедуры выполняются последовательно.
Наверное таки следует строить на каждую процедуру свой джоб. :?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Параллельное выполнение процедур

Сообщение HandKot » 23.01.2009 (Пт) 8:26

ВБ взялся оттого, что это форум по ВБ
последний мой пост связан только с дискуссией с alibek об асинхронном выполнении в ВБ

DTS таже беда, процедуры выполняются последовательно.

с чего Вы это взяли. Скорее всего что-то не так сделали
сделайте DTS-пакет с тремя задачами (SQL-task), в каждом из которых и вызывается ХП. Задачки без связи
Выполнятся все будет параллельно
пакет вызываетет либо руками, либо джобом

можно конечно для каждой ХП сделать свой джоб, но тогда если надо будет изменить время запуска, то придется менять его в трех джобах
в случае первого варианта - только в одном
I Have Nine Lives You Have One Only
THINK!


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 225

    TopList