Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию / 25 сообщений из 25, страница 1 из 1
05.06.2019, 16:56
    #39822964
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Собственно, сабж.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table dbo.test_table  (a int);
--delete from [dbo].[test]


create proc [dbo].[test_proc]
as 
begin
insert into  [dbo].[test_table] values (1)
end;


while 1=1 
begin
declare @object int
declare @src varchar(255)
exec @rc = sp_oacreate 'wscript.shell', @object out
exec  @rc = sp_oamethod @object,
                     'run',
                     null,
                    'sqlcmd -E -d db_name -S server_name -q "test_proc"'
exec sp_oadestroy @object
end
--select * from [dbo].[test_table]



При выполнении вышеприведенного SQL-скрипта с OLE процедурами, запускается новый экземпляр программы sqlcmd и после выполнения он остается запущенным.
При добавлении EXIT после завершения закрывается программа. Но столкнулся с тем, что таких экземпляров можно открыть 111 штук (ну во всяком случае у меня на сервере). То есть если даже обернуть в EXIT(), но долго идет выполнение ХП, то таких параллельных сеансов можно вызвать всего лишь 111 штук. 112 сеанс просто не запускает программу sqlcmd. Что это за ограничение такое? И как его преодолеть?
...
Рейтинг: 0 / 0
05.06.2019, 17:03
    #39822969
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Мсье, определенно, знает толк в извращениях.
Вы вот этим все безобращием что пытаетесь сделать?
...
Рейтинг: 0 / 0
05.06.2019, 17:15
    #39822976
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Гавриленко Сергей АлексеевичМсье, определенно, знает толк в извращениях.
Вы вот этим все безобращием что пытаетесь сделать?

Ассинхронную работу процедуры. Есть таблица с разными значениями в каждой строке, и мне нужно обработать всю таблицу, то есть взять значение и запустить процедуру с этим значением.

Допустим, сложная процедура выводит отчет по определенным параметрам. В течении дня от пользователей собираются в таблицу эти параметры. В течении ночи таблица обрабатывается. Однако процедура сложная. и может занять некоторое время на обработку. По этому потребовалась ассинхронный запуск (параллельная работа) одной и тоже процедуры, но с разными параметрами. Соответственно, если вычисления идут параллельно и асинхронно, процесс занимает гораздо меньше времени.
...
Рейтинг: 0 / 0
05.06.2019, 17:36
    #39822993
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Что мешает сделать ХП, которая в цикле переберет нужные ИД и запустит с ними сабжевую ХП ?

Пусть даже с ДинамикСКЛ, но без идиотской командной строки.
...
Рейтинг: 0 / 0
05.06.2019, 17:40
    #39822997
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
L_argoЧто мешает сделать ХП, которая в цикле переберет нужные ИД и запустит с ними сабжевую ХП ?

Пусть даже с ДинамикСКЛ, но без идиотской командной строки.
асинхронно?

Не знаю что там нового, но асинхронность на уровне sql делали
1. 2..N джобов на потоки
2. server broker
3. создание/прибивание/запуск джобов из управляющей хп
...
Рейтинг: 0 / 0
05.06.2019, 17:47
    #39823004
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Ёжик25,

Читайте справку по sqlcmd о разнице между -q и -Q
...
Рейтинг: 0 / 0
05.06.2019, 17:56
    #39823011
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
TaPaKL_argoЧто мешает сделать ХП, которая в цикле переберет нужные ИД и запустит с ними сабжевую ХП ?

Пусть даже с ДинамикСКЛ, но без идиотской командной строки.
асинхронно?

Не знаю что там нового, но асинхронность на уровне sql делали
1. 2..N джобов на потоки
2. server broker
3. создание/прибивание/запуск джобов из управляющей хп

У меня динамическое количество таких записей. По моему, для каждой итеррации создавать, выполнять и затем убивать "временный" джоб - еще большее извращение)). А service broker, я так понимаю - это решение. Но оно усложнит и без того сложную логику работы базы и ее поддержки.
Скажем так, если работу на уровне sqlcmd администратор знает (не DBA), и может потом что то сделать, как то разобраться и покилять зависшие процессы (ну или еще чего), то с service broker'ом он точно не справится. По этому пытаюсь решить пока без SB. И вот столкнулся с таким ограничением.
...
Рейтинг: 0 / 0
05.06.2019, 18:02
    #39823016
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Ёжик25,

Существует такая вещь, как "прикладное программное обеспечение". То, что вы делаете - полное извращение, как справедливо заметили.
...
Рейтинг: 0 / 0
05.06.2019, 18:06
    #39823022
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
invmЁжик25,

Читайте справку по sqlcmd о разнице между -q и -Q

-Q = EXIT()

Я выше писал, что мне не подходит такой метод (точнее подходит, конечно же, но без ограничений в количестве запускаемых экземпляров программы), так как я не знаю, как долго будет выполняться нужная процедура.
Если поставить в test_proc строку
Код: sql
1.
waitfor delay '00:00:59'


то за 2 минуты вставилось как раз 222 записи. То есть запустилось 111 экземпляров sqlcmd, они подождали 59 секунд и выполнились.
За эту минуту цикл while продолжает работать, но запуск новых экземпляров sqlcmd не происходит. После освобождения "пула" запущенных экземпляров while продолжился и опять запустил 111 экземпляров программы.
...
Рейтинг: 0 / 0
05.06.2019, 18:14
    #39823034
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Владислав КолосовЁжик25,

Существует такая вещь, как "прикладное программное обеспечение". То, что вы делаете - полное извращение, как справедливо заметили.

То есть что бы как то обойти это ограничение, нужно будет морочится с дополнительными сервисами, службами и прочими прикладными ПО?

Задача просто запускать одну и ту же процедуру в разных сессиях автоматически, для ее параллельной работы. Больше ничего не требуется. Устанавливать сервисы, ПО и прочее, и прикручивать к скулю - такое же извращение, имхо. Зачем? Если средствами скуля все прекрасно работает, и полностью удовлетворяет поставленную задачу, но сейчас только для 111 итерраций почему то. Где откопать это ограничение на количество одновременно работающих экземпляров sqlcmd?
Я так и не пойму, чье это ограничение, винды или скуля.

ps кстати для osql таких одновременно работающих экземпляров может быть 114.
...
Рейтинг: 0 / 0
05.06.2019, 18:23
    #39823040
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Что делают ежики, когда делать нечего?

ЗЫ. PowerShell способен запустить "до хрена" витков.
Ну... и выполнить в каждом вызов процедуры.

ЗЗЫ. Хотя, если бы ежики всей страны бросили свои силы на банальную оптимизацию процедуры - да никому эти витки не нужны бы были.
...
Рейтинг: 0 / 0
05.06.2019, 18:24
    #39823041
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Делайте очередь и разгребайте ее джобами. Все в пределах стандартных сервисов.

Вариантов -- вагон, маленькая тележка и вдеро .
...
Рейтинг: 0 / 0
05.06.2019, 18:31
    #39823047
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Гавриленко Сергей АлексеевичДелайте очередь и разгребайте ее джобами. Все в пределах стандартных сервисов.

Вариантов -- вагон, маленькая тележка и вдеро .

Не. 100 джобов - это фиаско, братан.

А 500 асинхронных соединений с сервером в .ps1 - это лехко.
...
Рейтинг: 0 / 0
05.06.2019, 18:37
    #39823051
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
aleks222Не. 100 джобов - это фиаско, братан.Аргументировано.
...
Рейтинг: 0 / 0
05.06.2019, 18:39
    #39823052
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Гавриленко Сергей АлексеевичДелайте очередь и разгребайте ее джобами. Все в пределах стандартных сервисов.

Вариантов -- вагон, маленькая тележка и вдеро .

простите, а sqlcmd разве не стандартный сервис?

Вот как раз по этой ссылке и нашел самое простое решение - OLE автоматизация и запуск sqlcmd.

Сторонние сбоки ставить не позволяют требования безопасности.
Стороннее ПО так же не подойдет по этим же причинам.
Джобы тоже не подходят (не плодить же для каждой строки "временный" джоб).
Service Broker тяжело поддерживать (к примеру) непосвященному человеку (в данному случае обычному сисадмину). Он не будет в дальнейшем разбираться в этой технологии. А вот метод, который я выбрал для него будет понятен и очевиден на мой взгляд.


Ошибка винды при попытке запуска 112-го экземпляра sqlcmd:

Faulting application name: SQLCMD.EXE, version: 2014.120.5000.0, time stamp: 0x5764ad7d
Faulting module name: KERNELBASE.dll, version: 6.3.9600.18821, time stamp: 0x59ba86db
Exception code: 0xc0000142
Fault offset: 0x00000000000ece70
Faulting process id: 0x7f90
Faulting application start time: 0x01d51baf58809552
Faulting application path: C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE
Faulting module path: KERNELBASE.dll
Report Id: 963175b3-87a2-11e9-80cc-0050568030e2
Faulting package full name:
Faulting package-relative application ID:

хм, значит ограничения dll библиотеки что ли некое?
...
Рейтинг: 0 / 0
05.06.2019, 18:44
    #39823054
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
aleks222Гавриленко Сергей АлексеевичДелайте очередь и разгребайте ее джобами. Все в пределах стандартных сервисов.

Вариантов -- вагон, маленькая тележка и вдеро .

Не. 100 джобов - это фиаско, братан.

А 500 асинхронных соединений с сервером в .ps1 - это лехко.

Простите за назойливость). Плохо очень с PS знаком, может быть есть ссылка на примерные решения? А то боюсь, что долго очень ковыряться буду.
...
Рейтинг: 0 / 0
05.06.2019, 18:51
    #39823058
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Ёжик25aleks222пропущено...


Не. 100 джобов - это фиаско, братан.

А 500 асинхронных соединений с сервером в .ps1 - это лехко.

Простите за назойливость). Плохо очень с PS знаком, может быть есть ссылка на примерные решения? А то боюсь, что долго очень ковыряться буду.

1. Цикл там называется for
2. создание подключение - сам освоишь.
3. ну и каждое подключение имеет метод асинхронного вызова процедуры.

Можно также на C# или VBA/VBS.

PS. Извини, я не ежик и ерундой не занимаюсь.
Любая процедура, которая требует запуска более 2-х экземпляров из соображений "так быстрее" - подлежит уничтожению.
...
Рейтинг: 0 / 0
05.06.2019, 19:06
    #39823062
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
aleks222Ёжик25пропущено...


Простите за назойливость). Плохо очень с PS знаком, может быть есть ссылка на примерные решения? А то боюсь, что долго очень ковыряться буду.

1. Цикл там называется for
2. создание подключение - сам освоишь.
3. ну и каждое подключение имеет метод асинхронного вызова процедуры.

Можно также на C# или VBA/VBS.

PS. Извини, я не ежик и ерундой не занимаюсь.
Любая процедура, которая требует запуска более 2-х экземпляров из соображений "так быстрее" - подлежит уничтожению.

А я вот занимаюсь, представь себе. Мне еще за это и деньги платят. Удивительно наверно, да?))
Ну не будем спорить, кто тут из нас ерундой занимается.
В целом попробую на PS все это замутить. Благодарствую.

На вопрос никто так и не ответил про ограничения. Так что тему пока не закрываю. Просто уже интересно стало, что это за ограничение такое в запуске ограниченного количества экземпляров slqcmd.
...
Рейтинг: 0 / 0
05.06.2019, 19:15
    #39823069
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Еще раз, 500 экземпляров, исполняющейся параллельно, процедуры бесполезны.
...
Рейтинг: 0 / 0
05.06.2019, 19:18
    #39823073
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
aleks222Еще раз, 500 экземпляров, исполняющейся параллельно, процедуры бесполезны.

Почему?
...
Рейтинг: 0 / 0
05.06.2019, 20:05
    #39823080
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Ёжик25Почему?Опишите, что делает эта процедура и вам объяснят почему. Или сочтут ваш подход приемлимым.
...
Рейтинг: 0 / 0
05.06.2019, 23:04
    #39823128
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
aleks222Еще раз, 500 экземпляров, исполняющейся параллельно, процедуры бесполезны.
может у него стресс-тестирование, там и миллион запросов без проблем послать, да с разных машин под разными пользователями


Ёжик25
вот PS образец запускающий множество $z параллельных job-ов (минус время на запуск и выделение ресурсов)
просто генерирующий случайное int число с максимумом $mx , можно под соединения/sql скрипты переделать и пускать на каждый job свой сервер/connection string/пользователя и т.д. из какого-то массива (который тоже может прилететь из SQL)
Код: powershell
1.
2.
3.
4.
5.
cls;[int]$z=32;[Array]$a=@(1..$z);[Array]$b=@();[int]$mx=99;foreach($jb in Get-Job){$jb|Remove-Job -Force >$null}
foreach($x in $a){Start-Job -ScriptBlock{param([int]$max,[int]$d)Start-Sleep -Seconds 1;Get-Random -Maximum $max -SetSeed $d} -ArgumentList $mx,$x|Out-Null}
while((Get-Job|Where-Object{$_.State -eq "Running"}).Count -ge 2){cls;write-output "running jobs";Get-Job;start-sleep -Seconds 1}
write-output "collecting results..";foreach($jb in Get-Job){$jb|Receive-Job -Wait -OutVariable jb_out -ErrorAction SilentlyContinue >$null;$jb|Remove-Job -Force;$b=$b+$jb_out}
write-output "here goes your result: $b";Remove-Variable * -ea 0;$Error.Clear()
...
Рейтинг: 0 / 0
05.06.2019, 23:10
    #39823131
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
а так-то да, всё по делу советуют - не для этого sql система,
все приблуды не будут полноценными
т.к. предназначены только как вспомогательные средства
и платформа изначально заточена под несколько другие цели,

так что нечего горевать что упирается в ограничения да
не работает как мечталось и как выше намекнули .. на кактус ..
...
Рейтинг: 0 / 0
06.06.2019, 08:45
    #39823215
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
А я вот занимаюсь, представь себе. Мне еще за это и деньги платят. Удивительно наверно, да?))Не удивительно. В ИТ половина случайных людей. Даже с высокими зарплатами. Так везде, а не только в ИТ.
...
Рейтинг: 0 / 0
06.06.2019, 12:02
    #39823349
Ёжик25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
vikkivaleks222Еще раз, 500 экземпляров, исполняющейся параллельно, процедуры бесполезны.
может у него стресс-тестирование, там и миллион запросов без проблем послать, да с разных машин под разными пользователями


Ёжик25
вот PS образец запускающий множество $z параллельных job-ов (минус время на запуск и выделение ресурсов)
просто генерирующий случайное int число с максимумом $mx , можно под соединения/sql скрипты переделать и пускать на каждый job свой сервер/connection string/пользователя и т.д. из какого-то массива (который тоже может прилететь из SQL)
Код: powershell
1.
2.
3.
4.
5.
cls;[int]$z=32;[Array]$a=@(1..$z);[Array]$b=@();[int]$mx=99;foreach($jb in Get-Job){$jb|Remove-Job -Force >$null}
foreach($x in $a){Start-Job -ScriptBlock{param([int]$max,[int]$d)Start-Sleep -Seconds 1;Get-Random -Maximum $max -SetSeed $d} -ArgumentList $mx,$x|Out-Null}
while((Get-Job|Where-Object{$_.State -eq "Running"}).Count -ge 2){cls;write-output "running jobs";Get-Job;start-sleep -Seconds 1}
write-output "collecting results..";foreach($jb in Get-Job){$jb|Receive-Job -Wait -OutVariable jb_out -ErrorAction SilentlyContinue >$null;$jb|Remove-Job -Force;$b=$b+$jb_out}
write-output "here goes your result: $b";Remove-Variable * -ea 0;$Error.Clear()



Премного благодарен.

Но вопрос все равно остается открытый. Что за ограничение такое в запуске n-ого количества экземпляров sqlcmd? Это неизлечимо, или можно что нибудь придумать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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