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

Код: 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
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39822969
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мсье, определенно, знает толк в извращениях.
Вы вот этим все безобращием что пытаетесь сделать?
...
Рейтинг: 0 / 0
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39822976
Ёжик25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей АлексеевичМсье, определенно, знает толк в извращениях.
Вы вот этим все безобращием что пытаетесь сделать?

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

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

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

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

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

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

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

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

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

Существует такая вещь, как "прикладное программное обеспечение". То, что вы делаете - полное извращение, как справедливо заметили.
...
Рейтинг: 0 / 0
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823022
Ёжик25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823034
Ёжик25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав КолосовЁжик25,

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

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

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

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

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

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

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

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

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

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

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

простите, а 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
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823054
Ёжик25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222Гавриленко Сергей АлексеевичДелайте очередь и разгребайте ее джобами. Все в пределах стандартных сервисов.

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

Почему?
...
Рейтинг: 0 / 0
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823080
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёжик25Почему?Опишите, что делает эта процедура и вам объяснят почему. Или сочтут ваш подход приемлимым.
...
Рейтинг: 0 / 0
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823128
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823131
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так-то да, всё по делу советуют - не для этого sql система,
все приблуды не будут полноценными
т.к. предназначены только как вспомогательные средства
и платформа изначально заточена под несколько другие цели,

так что нечего горевать что упирается в ограничения да
не работает как мечталось и как выше намекнули .. на кактус ..
...
Рейтинг: 0 / 0
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823215
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вот занимаюсь, представь себе. Мне еще за это и деньги платят. Удивительно наверно, да?))Не удивительно. В ИТ половина случайных людей. Даже с высокими зарплатами. Так везде, а не только в ИТ.
...
Рейтинг: 0 / 0
Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
    #39823349
Ёжик25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ограничение в запуске экземпляров sqlcmd через OLE автоматизацию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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