Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Выполнить несколько запросов параллельно  [new]
DM64
Guest
Первый мой вопрос перенесли в дохлый форум Тестирование.
Хотя вопрос у меня именно про T-SQL и SSMS

Коллеги, есть у меня типовые "тяжелые" вызовы процедур, список их.
Я могу в SSMS приблизительно смоделировать как пользователь запускает это из клиента системы.
А как смоделировать параллельную одновременную работу допустим 200 пользователей с разной последовательностью вызова процедур?

Для чего это надо: провести сравнительное тестирование старого и нового сервера с замером времени старта и финиша.
То есть хочется в SSMS запустить скрипт, в нем 200 типа-пользователей в своих сессиях что-то позапускали, дождаться завершения у последнего пользователя и сравнить общее время у двух серверов.

Прошу советов.
4 сен 14, 17:03    [16536223]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
DM64
Первый мой вопрос перенесли в дохлый форум Тестирование.
Хотя вопрос у меня именно про T-SQL и SSMS

Коллеги, есть у меня типовые "тяжелые" вызовы процедур, список их.
Я могу в SSMS приблизительно смоделировать как пользователь запускает это из клиента системы.
А как смоделировать параллельную одновременную работу допустим 200 пользователей с разной последовательностью вызова процедур?

Для чего это надо: провести сравнительное тестирование старого и нового сервера с замером времени старта и финиша.
То есть хочется в SSMS запустить скрипт, в нем 200 типа-пользователей в своих сессиях что-то позапускали, дождаться завершения у последнего пользователя и сравнить общее время у двух серверов.

Прошу советов.


Самый примитивный способ, ставьте циклы и запускайте в нескольких окнах SSMS -- штук 5-10-20 .

Я бы на C# програмулю быстро накатал, благо запуск нового потока в цикле это несколько строк кода.

Ещё можно в SSIS, задизайните квадрат с вашей процедурой, вставьте в цикл и раскопируйте этот квадрат в блоке цикла кучу раз.
4 сен 14, 17:17    [16536300]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
Glory
Member

Откуда:
Сообщений: 104760
DM64
А как смоделировать параллельную одновременную работу допустим 200 пользователей с разной последовательностью вызова процедур?

Открыть 200 коннектов и быстро-быстро переключаясь между ними моделировать
4 сен 14, 17:22    [16536333]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
SQL Server Distributed Replay
4 сен 14, 17:23    [16536337]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
sti
Member

Откуда:
Сообщений: 769
WAITFOR TIME
4 сен 14, 17:23    [16536340]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
a_voronin,
О, кстати, SSIS вариант, спасибо, оно же параллельно выполняется?
4 сен 14, 17:23    [16536343]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
invm
SQL Server Distributed Replay

мощная штука. даже слишком. но спасибо, учту
4 сен 14, 17:48    [16536476]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
sti
WAITFOR TIME

пытаюсь мысленно применить, не получается.
как предполагается это использовать, можно подробнее?
4 сен 14, 17:50    [16536490]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
aleks2
Guest
И ведь никто не сказал страдальцу, что его потуги практически бесполезны.

1. Сравнить быстродействие старого и нового сервера можно запустив запросы ОДИН раз.
2. Все остальное на новом будет "как на старом". Ибо причин для изменения ноль.
4 сен 14, 17:55    [16536519]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
aleks2
И ведь никто не сказал страдальцу, что его потуги практически бесполезны.

1. Сравнить быстродействие старого и нового сервера можно запустив запросы ОДИН раз.
2. Все остальное на новом будет "как на старом". Ибо причин для изменения ноль.


Неправда
4 сен 14, 18:37    [16536695]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
aleks2
Guest
a_voronin
aleks2
И ведь никто не сказал страдальцу, что его потуги практически бесполезны.

1. Сравнить быстродействие старого и нового сервера можно запустив запросы ОДИН раз.
2. Все остальное на новом будет "как на старом". Ибо причин для изменения ноль.


Неправда


Ну-ну.
Иллюзии, канешно, украшают жизнь.
4 сен 14, 18:42    [16536711]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
DM64
Коллеги, есть у меня типовые "тяжелые" вызовы процедур, список их.
Я могу в SSMS приблизительно смоделировать как пользователь запускает это из клиента системы.
А как смоделировать параллельную одновременную работу допустим 200 пользователей с разной последовательностью вызова процедур?
Если это моделирование заключается в последовательном выполнении процедур, то можно сделать джоб, который создаёт 200 джобов, запускает их, потом удаляет.

Или да, этот джоб может запустить 200 пакетов.

Только не забывайте, что имитация 200 клиентов нагружает не только сервер, но и комп, имитирующий клиентов, нжно, что бы его тоже хватило.
5 сен 14, 09:27    [16538224]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
alexeyvg
Если это моделирование заключается в последовательном выполнении процедур, то можно сделать джоб, который создаёт 200 джобов, запускает их, потом удаляет.
Или да, этот джоб может запустить 200 пакетов.
Только не забывайте, что имитация 200 клиентов нагружает не только сервер, но и комп, имитирующий клиентов, нжно, что бы его тоже хватило.

Вариант, ок, спасибо.
5 сен 14, 09:38    [16538270]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
msLex
Member

Откуда:
Сообщений: 8216
alexeyvg
Если это моделирование заключается в последовательном выполнении процедур, то можно сделать джоб, который создаёт 200 джобов, запускает их, потом удаляет.

Или да, этот джоб может запустить 200 пакетов.

Только не забывайте, что имитация 200 клиентов нагружает не только сервер, но и комп, имитирующий клиентов, нжно, что бы его тоже хватило.


можно делать "одноразовые" джобы, для у sp_add_job есть параметр @delete_level
http://msdn.microsoft.com/ru-ru/library/ms182079.aspx
5 сен 14, 09:43    [16538293]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
sti
Member

Откуда:
Сообщений: 769
DM64
sti
WAITFOR TIME

пытаюсь мысленно применить, не получается.
как предполагается это использовать, можно подробнее?


Написать Job, в нем поставить WAITFOR TIME "нужное время", заскриптовать, размножить 200 раз с разными именами.
5 сен 14, 10:49    [16538608]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
sti
Написать Job, в нем поставить WAITFOR TIME "нужное время", заскриптовать, размножить 200 раз с разными именами.

я так понял совет, поправьте если неправильно: у самих джобов время старта одинаковое. witfor пригодится если надо разнообразить действия пользователей, то есть в одинаковых джобах одни и те же трассы/процедуры запускаются в разное время, вплоть до случайного в интервале тестирования. грубо за час тестирования:
джоб1 (стартует в час х): sp1 (запускается в random от часа), sp2 (запускается в random от часа).....
джоб2 (стартует в час х): sp1 (запускается в random от часа), sp2 (запускается в random от часа).....
.........
джоб200 (стартует в час х): sp1 (запускается в random от часа), sp2(запускается в random от часа).....

тем самым вроде как в одинаковых джобах последовательность запуска этапов разная.
5 сен 14, 11:14    [16538792]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
Glory
Member

Откуда:
Сообщений: 104760
DM64
тем самым вроде как в одинаковых джобах последовательность запуска этапов разная.

ВЫ что серьезно считаете, что можете на коленке создать полноценный эмулятор двухсот пользователей ?
5 сен 14, 11:19    [16538825]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
o-o
Guest
DM64
смоделировать параллельную одновременную работу допустим 200 пользователей с разной последовательностью вызова процедур?


еще так можно:
допустим, есть 10 процедур, вызов каждой оформить в отдельном файле: 01.sql,..., 10.sql
затем написать батник вида

start cmd /k call sqlcmd -S<...> -U<...> -P<...> -i c:\01.sql,c:\cmd2.sql,...
start cmd /k call sqlcmd -S<...> -U<...> -P<...> -i c:\02.sql,c:\cmd1.sql,...
...

где передавать эти файлы sqlcmd в разном порядке.
200 строк комбинаций файлов с процедурами в разном порядке нагенерить чем угодно :)
5 сен 14, 11:40    [16538957]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
еще так можно:

Вы тоже серьезно считаете, что ваш start cmd эмулирует реальную нагрузку одного сервера на другом ?
На основании чего вы сделаете какие сравнения и выводы ?
5 сен 14, 11:47    [16539007]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
sti
Member

Откуда:
Сообщений: 769
Glory
DM64
тем самым вроде как в одинаковых джобах последовательность запуска этапов разная.

ВЫ что серьезно считаете, что можете на коленке создать полноценный эмулятор двухсот пользователей ?

Присоединяюсь к вопросу )

DM64
Я имел в виду как раз, что время старта джобов какое угодно, но нужные запросы запускаются в нужное время с помощью WAITFOR.
Что вы получите с помощью рандома и какой в этом смысл - мне непонятно.
5 сен 14, 11:50    [16539031]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
o-o
Guest
Glory,
нет!
извиняюсь, цитата не та, ответ скорее вот на это:
"Выполнить несколько запросов параллельно"
но с учетом "200 пользователейсессий с разной последовательностью вызова процедур"

вот будут люди гуглить на название темы и ответ найдут.
а что это не эмуляция нагрузки от 200 пользователей -- подписываюсь
5 сен 14, 11:54    [16539085]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Glory
Вы тоже серьезно считаете, что ваш start cmd эмулирует реальную нагрузку одного сервера на другом ?
Да понятно, что реальную нагрузку можно эмулировать либо реальным приложением с реальными пользователями, либо написав сложную программу-эмулятор.

Но в принципе приближение можно хорошее дать и такими упрощёнными средствами, если разработчик хорошо представляет поток запросов на сервер.

Это же лучше, чем вообще не нагружать, или нагружать бессмысленным "циклом", как многие сравнивают серверы. И при этом достаточно просто, недорого.
5 сен 14, 11:59    [16539135]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
Glory
Member

Откуда:
Сообщений: 104760
alexeyvg
Но в принципе приближение можно хорошее дать и такими упрощёнными средствами,

Приближение можно дать, выполнив тестовый набор на двух серверах в одном коннекте.
200 параллельно выполняемых случайных наборов дадут фигню, а не приближение.
5 сен 14, 12:04    [16539189]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
alexeyvg
Да понятно, что реальную нагрузку можно эмулировать либо реальным приложением с реальными пользователями, либо написав сложную программу-эмулятор.
Но в принципе приближение можно хорошее дать и такими упрощёнными средствами, если разработчик хорошо представляет поток запросов на сервер.
Это же лучше, чем вообще не нагружать, или нагружать бессмысленным "циклом", как многие сравнивают серверы. И при этом достаточно просто, недорого.

+1
мне не реальную работу смоделировать, мне сравнить два сервера на "приближенной к реальности" нагрузке. которая вполне себе представима в моем случае в виде последовательности десятка тяжелых процедур и выборок.
всяко лучше, чем синтетические тесты с потолка запускать.
5 сен 14, 12:07    [16539226]     Ответить | Цитировать Сообщить модератору
 Re: Выполнить несколько запросов параллельно  [new]
DM64
Guest
o-o
еще так можно:
допустим, есть 10 процедур, вызов каждой оформить в отдельном файле: 01.sql,..., 10.sql
затем написать батник вида
start cmd /k call sqlcmd -S<...> -U<...> -P<...> -i c:\01.sql,c:\cmd2.sql,...
start cmd /k call sqlcmd -S<...> -U<...> -P<...> -i c:\02.sql,c:\cmd1.sql,...
...
где передавать эти файлы sqlcmd в разном порядке.
200 строк комбинаций файлов с процедурами в разном порядке нагенерить чем угодно :)

спасибо, записал.
5 сен 14, 12:09    [16539249]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить