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

Откуда:
Сообщений: 100
Microsoft SQL Server  2000 - 8.00.2039 (Intel X86) 
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

Есть клиент с регулярной периодичностью подключается и выполняет EXEC GetChange (хранимая процедура). В штатном режиме GetChange делает SELECT к таблице Change и возвращает результат (возможно пустой). В некоторых случаях (достаточно редких) прежде чем GetChange выдаст результат выборки таблицу Change надо предварительно заполнить (в штатном режиме она заполняется другими процедурами). Заполнение таблицы может занять продолжительное время и клиент будет ждать завершения (чего бы не хотелось, у него очередь запросов). Хотелось бы, что бы ХП делала примерно так:

IF @Flag = 0
  SELECT * FROM Change  -- Нормальная выборка
ELSE BEGIN
  SELECT * FROM Change WHERE 1<>1 -- Заведомо пустая выборка
  .... FillСhange -- Запуск задания серверу на заполнение Change, завершения которого клиент уже не ждет.
END

Есть ли более-менее простой способ решения?
7 авг 09, 11:54    [7510045]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
Glory
Member

Откуда:
Сообщений: 104760
А что мешает клиенту сделать 2 коннекта и в одном из них в асинхронном режиме запустить эту процедуру ?
7 авг 09, 11:56    [7510069]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36826
Запихать все в джоб и запускать его их хп.
7 авг 09, 11:56    [7510070]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ну и наманый код в даном случае ,задачу решает ,вот только

SELECT * FROM Change WHERE 1<>1
зачем в даном случае
-------------------------------------
Jedem Das Seine
7 авг 09, 11:56    [7510077]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
zenik
Member

Откуда:
Сообщений: 100
Попробую поподробней. Код приведенный мной - утрированный, на самом деле там все совсем не так, просто передать смысл языком программы. Условия там тоже нормальные а не 1<>1. Это абстрактность. Клиент обслуживает устройства (30 шт). Для каждого устройства делается GetChange N в цикле. GetChange возвращает данные на добавление на устройство. Иногда надо полностью произвести замену данных на устройстве, следовательно надо подготовить эту замену. Не хотелось бы, что бы вся очередь на остальные устройства стояла. Клиент работает следующим образом: в цикле вызывает GetChange, получает результат, запускает поток для записи результата в файл.
7 авг 09, 12:07    [7510179]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
zenik
Member

Откуда:
Сообщений: 100
Glory
А что мешает клиенту сделать 2 коннекта и в одном из них в асинхронном режиме запустить эту процедуру ?

А если понадобится все устройства сразу обновить. Получим 30 конектов. Пробовал как то для каждого устройства запускать свой поток и обслуживать их независимо. Получился полный алес.
Я стараюсь заставить работать SQL обрабатывать и подготавливать данные. От клиента требуется просто вызывать ХП и получать все готовое :)
7 авг 09, 12:14    [7510232]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
zenik
Member

Откуда:
Сообщений: 100
Гавриленко Сергей Алексеевич
Запихать все в джоб и запускать его их хп.

Можно по подробнее? Можно ли в него параметры передавать? И как его создать? Можно ли его создать программно?
7 авг 09, 12:15    [7510245]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
Glory
Member

Откуда:
Сообщений: 104760
zenik
Glory
А что мешает клиенту сделать 2 коннекта и в одном из них в асинхронном режиме запустить эту процедуру ?

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

30 коннектов - это ни о чем. Что такое "полный алес" - непонятно. Если это проблемы с производительностью, то значит у вас неоптимальные запросы и слабое оборудование
7 авг 09, 12:23    [7510301]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
Glory
Что такое "полный алес" - непонятно.

зав.мат
7 авг 09, 12:25    [7510320]     Ответить | Цитировать Сообщить модератору
 Re: EXEC не дожидаясь завершения  [new]
zenik
Member

Откуда:
Сообщений: 100
Glory
zenik
Glory
А что мешает клиенту сделать 2 коннекта и в одном из них в асинхронном режиме запустить эту процедуру ?

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

30 коннектов - это ни о чем. Что такое "полный алес" - непонятно. Если это проблемы с производительностью, то значит у вас неоптимальные запросы и слабое оборудование

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

Связка следующая:
1. 1С-Предприятие;
2. БД на MSSQL;
3. Клиент;
4. Устройства

Движение данных 2-х стороннее. От 1 в 2 через 3 в 4. И в обратном направлении: от 4 через 3 в 2, потом в 1. У клиента 2 конекта:
1-й данные от устройст;
2-й данные на устройства;

Задача у клиента проста, усложнять ее количеством подключений и асинхронным режимом не хочется.

Можно конечно создать 3-й конект и дергать его ради редкого случая, но это ситуация на столько редкая, что даже заморачиваться нет желания. И так все усложняется, когда в работу вступает 1С со своими запросами :)
7 авг 09, 12:36    [7510416]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить