Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
Здравствуйте.
Возникла у меня проблема, разобраться с которой сам я пока не могу. Проблема заключается в следующем.
Есть большая база данных. Есть куча организаций. Есть специальный софт для "общения" бд организации и нашей большой базой. Назовем его транспорт. Иногда возникают ситуации, когда организации "А" нужен определенный документ, по каким-то причинам отсутствующий у них. В этом случае все просто - посылаем документ в специальную таблицу, документ дублируется во вторую таблицу-"буфер" и ждет, когда Транспорт заберет его и отправит по адресу. Если транспорт забрал - из таблицы-буфера уходит запись, а в целевой таблице появляется запись - "ок". И, когда проблемных документов 1-2-3 - это никакая и не проблема.
Однако, есть довольно большое (более 25000 документов), которые надо отправить определенной организации.
Вспомнив школьные навыки программирования и вооружившись googl'oм, я породил монстра:
DECLARE @temporary TABLE (id INT IDENTITY(1,1),  myID BIGINT)
INSERT INTO @temporary (myID)
       (вношу в таблицу нужные документы)

DECLARE @income AS BIGINT
DECLARE @_count AS INT
SET @_count = (SELECT COUNT(t.myID) FROM @temporary t)
WHILE @_count > 0 
BEGIN
Тут я присваиваю переменной @income id документа, передаю в процедуру, которая кидает документ в таблицу отправки, после этого:
WHILE  ((SELECT distinct DOC_ID FROM BUFFER WHERE DOC_ID = @income AND ADRESS = Адрес назначения) IS NOT NULL) BEGIN 
   WAITFOR DELAY '00:00:01' END (т.е. я смотрю - ушла запись с таблицы-буфера? продолжаем. Нет - чекаем снова. И так каждую секунду (пять секунд, десять-двадцать))
SET @_count = @_count - 1 
END

И монстр работает. Прекрасно работает, если я шлю документы сотнями. Но вот 500 документов и выше - перебор, прихожу с утра на работу - все, out of memory говорит мне sql и, соответственно, ничего не работает, никуда не отправляется.

Как бы мне это дело победить? Или хотя бы - где почитать?
Кажется мне, что это WAITFOR виновно, но как без него - не придумал. Есть ли у вас подсказки?
Спасибо.
24 окт 13, 16:02    [15027344]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
out of memory говорит мне sql


Точно SQL Server говорит, а не клиентское приложение? Номер ошибки какой?
24 окт 13, 16:06    [15027358]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kirill_Krang
Прекрасно работает, если я шлю документы сотнями. Но вот 500 документов и выше - перебор, прихожу с утра на работу - все, out of memory говорит мне sql и, соответственно, ничего не работает, никуда не отправляется.

И где же вы запускаете своего "монстра" ?
В окне QA на своей рабочей станции ?
24 окт 13, 16:08    [15027372]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
pkarklin
Точно SQL Server говорит

Ага.
Номера ошибки нет. Точнее - оно наверняка есть, но QA мне говорит "Out of memory", просмотреть логи я не могу. Да и вообще зайти на сервер и глянуть хоть на что-то, кроме Management Studio не могу. Нет прав. А у кого права есть - тот в отпуске и не берет телефон.

Glory
И где же вы запускаете своего "монстра" ?
В окне QA на своей рабочей станции ?

В окне QA самого сервера.

pkarklin
24 окт 13, 16:15    [15027418]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kirill_Krang
В окне QA самого сервера.

Так это QA про себя сообщает "Out of memory". А не про сервер
24 окт 13, 16:16    [15027431]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
Glory,
Это понятно. Но QA при этом более не выполняется и ничего нужного уже не шлет. А выслать надо - кровь из носу. Вот и думаю, как бы выкрутиться.
24 окт 13, 16:19    [15027449]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
Хм... А если я опробую sqlcmd? С тем же самым запросом?
24 окт 13, 16:21    [15027463]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kirill_Krang
Но QA при этом более не выполняется и ничего нужного уже не шлет.

Ну разумеется, он же "Out of memory"

Kirill_Krang
А выслать надо - кровь из носу. Вот и думаю, как бы выкрутиться.

Посмотреть в закладки results/messages и решить, а зачем скрипт отправляет столько информации на клиента, что тому не хватает памяти
24 окт 13, 16:21    [15027467]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
А затем скрипт отправляет столько информации на клиента, что на клиенте этой информации нет. А клиенту эта информация нужна для работы. И без этой информации клиент стоит. А клиент стоять не любит, так как время - деньги.
И отправляет сервер клиенту по одному документу секунд за пять-шесть. Если загружен - минута между отправками, не более. Сервер справится и не с такими нагрузками, он работает одновременно и с куда более внушительным наплывом документов и на сотни клиентов по всему центральному округу.
Есть решение вкинуть эти 25к сразу, и через сутки, я уверен, информация будет на этом клинте. А вот то, что будет выполняться обмен с другими клиентами - это я сомневаюсь, очередь забьется и тогда будет очень плохо.
24 окт 13, 16:30    [15027538]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Kirill_Krang, последним постом просто меня запутали.
На всякий случай посмотрите на загрузку по сети, на очередь дисковую и проверьте все ли индексы на местах.
24 окт 13, 16:36    [15027584]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kirill_Krang
А затем скрипт отправляет столько информации на клиента, что на клиенте этой информации нет.

Какой "этой" ?
У вас там наверное в закладке messages полно сообщений о количестве обработанных записей и подобной "ерунде"
Вам действительно так необходима эта информация ?
Клиент - это ваше клиентское приложение. А не какой то абстрактный человек, который ждет каких то ваших действий
24 окт 13, 16:36    [15027585]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
Glory
Какой "этой" ?
У вас там наверное в закладке messages полно сообщений о количестве обработанных записей и подобной "ерунде"
Вам действительно так необходима эта информация ?
Клиент - это ваше клиентское приложение. А не какой то абстрактный человек, который ждет каких то ваших действий

Да, путано я объяснил, прошу прощения.
Клиент - это организация. Организация-клиент, наш клиент.
А пересылаемая информация - это лицензии. Список других организаций. Ключи. Информация об изменениях документов. Изменениях статуса организаций. Номенклатура, версии номенклатуры. Сертификатов.
Иными словами, у вас есть товар, который неплохо бы реализовать, а реализовать вы его не можете, т.к. у вас отсутствует в списке организация, куда вы хотите отгрузить этот товар. Или организация есть - но просрочена лицензия, а новой версии этой лицензии у вас нет. Или вы не можете принять товар по той причине, что в вашей базе этот товар отсутствует.

Вкладку messeges я не нажимал, как-то упустил это из виду=( Как снова подвиснет - прогляжу.
24 окт 13, 16:47    [15027663]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
SET NOCOUNT ON


Я бы еще влепил в самое начало скрипта.
24 окт 13, 16:57    [15027715]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
Александр52
Kirill_Krang, последним постом просто меня запутали.
На всякий случай посмотрите на загрузку по сети, на очередь дисковую и проверьте все ли индексы на местах.


Каюсь - запутал. Попытался объяснить, но как-то слишком пространно.
Про нагрузку на сеть я спрашивал - сеть работает идеально, сказали сетевики. С базой то же все в порядке, все на месте. А вот дисковую очередь проглядеть не могу. Но вряд ли дело в ней.
24 окт 13, 16:58    [15027723]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
pkarklin
SET NOCOUNT ON


Я бы еще влепил в самое начало скрипта.


Но, если я не ошибаюсь - тогда я не увижу результата. И если ушло хотя бы 200-300 документов - я этого не увижу, так ведь? И придется все делать заново.
24 окт 13, 17:01    [15027732]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Kirill_Krang
Но, если я не ошибаюсь - тогда я не увижу результата. И если ушло хотя бы 200-300 документов - я этого не увижу, так ведь? И придется все делать заново.


Что есть для Вас результат?
24 окт 13, 17:17    [15027807]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
pkarklin
Kirill_Krang
Но, если я не ошибаюсь - тогда я не увижу результата. И если ушло хотя бы 200-300 документов - я этого не увижу, так ведь? И придется все делать заново.


Что есть для Вас результат?


Передавая идентификатор документа процедуре отправки, в окне результата я вижу запись о том, что определенный документ передан на отправку.
В случае, если все навернется, я хотя бы увижу где именно, на чем именно, прогляжу какие документы были успешно отправлены и больше к ним не вернусь.
24 окт 13, 17:29    [15027887]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Kirill_Krang
Передавая идентификатор документа процедуре отправки, в окне результата я вижу запись о том, что определенный документ передан на отправку.
В случае, если все навернется, я хотя бы увижу где именно, на чем именно, прогляжу какие документы были успешно отправлены и больше к ним не вернусь.


SET NOCOUNT ON не подавит результаты SELECT. Но лучше направить его результат в таблицу из которой при необходимости почитывать.
24 окт 13, 17:42    [15027971]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
Kirill_Krang
Member

Откуда:
Сообщений: 10
pkarklin
Kirill_Krang
Передавая идентификатор документа процедуре отправки, в окне результата я вижу запись о том, что определенный документ передан на отправку.
В случае, если все навернется, я хотя бы увижу где именно, на чем именно, прогляжу какие документы были успешно отправлены и больше к ним не вернусь.


SET NOCOUNT ON не подавит результаты SELECT. Но лучше направить его результат в таблицу из которой при необходимости почитывать.


Не подавит?
Хорошо, спасибо, я попробую.

А насчет перенаправления результатов. Будет ли жива временная таблица, если QA снова зависнет?
24 окт 13, 17:51    [15028036]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сообщает "Out of memory".  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Kirill_Krang
А насчет перенаправления результатов. Будет ли жива временная таблица, если QA снова зависнет?


У Вас не временная таблица, а табличная переменная, которая живет до окончания бача. Сохранять же предлагается в постоянную таблицу.
24 окт 13, 17:55    [15028069]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить