Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
VFP 9 SP2
Win 7x64 (ОЗУ 16 Гб) Вдруг напоролся на ошибку 43: There is not enough memory to complete this operation Сама процедура может быть длительная (больше дня). Схематично исходные такие (репро в данной ситуации не представляю как воссоздать): - Открывается много таблиц (их может быть больше 1000 - типовые спр-ки), которые потом используются в цикле и участвуют в запросах. По этой причине вначале их все и открываю, чтобы не дергать ОКТР/ЗАКР. - В цикле основная обработка идет через запросы SQL, где собираются сводные данные в промежут. курсоры. После чего всё собирается в общую результатную таблицу. Тут еще использую
В какой-то момент (зависимость не нашел пока) вылетает эта ошибка. Я уже понатыкал много запись в лог, но не могу поймать, где рушится. Грешил на много открытых курсоров, но вроде до 65 тыщ алиасов можно. Добавил закрытие всех временных курсоров (результатов запросов) СРАЗУ после ненадобности - стало меньше валиться, но не решило проблему. Заковыка еще и в том, что ошибка не ловится обработчиком, а возникает просто по ходу в произвольных местах Хотя весь цикл сидит внутри TRY CATCH ENDTRY Курил тему по подобной ошибке и в инете и тут на форуме, но не могу найти у себя такие точки 1) Может ли влиять на такую ошибку неск вложенных опросов клавы через INKEY()? Т.к. случается и полный зависон VFP при нажатии ESC: по логу видно, что дальше цикл остановился (в логе нет записей), UI не реагирует на нажатие и VFP 25% проца жрет, но байтики памяти почти не пользует. При этом закрыть можно только убитием процесса Фокса. 2) Может ли FLUSH как-то мешать или наоборот хорошо что сбрасывает на диск? 3) Может ли помочь SYS(1104) / SYS(1016) / SYS(3050) или вообще не та тема? 4) Есть ли смысл в данном случае в закрытии времен. курсоров, если в следующей итерации цикла они открываются заново? В какую сторону вообще копать? Исправлено 2 раз(а). Последнее : VeterVFP, 17.05.22 16:04 |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
PaulWist Сообщений: 14698 Дата регистрации: 01.04.2004 |
Ищи косяки в данных, которые используешь forum.foxclub.ru
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
Эту тему видел. В открываемых таблицах есть МЕМО-поля, но они не используются мной вообще. Или сам факт наличия испорченного МЕМО-поля может вредить? UPD. Ошибся, в используемых табл. нет МЕМО вообще. Там неск десятков Гигов данных При открытии таблиц никаких ошибок нет. И обработчик не ловит почему такую ошибку (как упоминал, ошибка рандомна)? Исправлено 2 раз(а). Последнее : VeterVFP, 18.05.22 08:20 |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
of63 Сообщений: 25638 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> через запросы SQL
так бывает, когда соединяешь 1-2 ГБ-йтные таблицы, фокс строит промежуточные какие-то курсоры (временные файлы), а больше 2Г он не может файлы обслуживать, т.к 32-разрядный (хотя и 32-приложения могут работать с файлами > 2Г), но вот такие ограничения |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
В моих таблица нет таких размеров (макс это 700-800 Мб). Да и, если не ошибаюсь, там другая ошибка вылетает, если превышает курсор 2Гб - и она отлавливается обработчиком. |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
PaulWist Сообщений: 14698 Дата регистрации: 01.04.2004 |
Не обязательно Мемо, могут быть индексы. Предлагаю, открыть таблички и просканировать их обновив какое-то поле
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
Taran Сообщений: 13740 Откуда: Красноярск Дата регистрации: 16.01.2008 |
А каков режим буферизации промежуточных курсоров?
М.б. полное отключение поможет. Все-таки где-то это хранится. |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
Вчера спецом у всех табл индексы пересоздал. Но попробую предложенное |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
Речь про CURSORSETPROP("Buffering", 1) глобально для всех открываемых? В SET-ах у меня SET MULTILOCKS ON есть только. Как проверить буф-ю именно для временных курсоров? Через CURSORGETPROP("Buffering", DBF('TempCurs'))? |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
PaulWist Сообщений: 14698 Дата регистрации: 01.04.2004 |
Вот ещё, что может быть - это создание фоксом курсора без кляузы NOFILTER, те фактическое наложение фильтра на исходный алиас. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 18.05.22 09:56 |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
Taran Сообщений: 13740 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Глобально для всех последующих открытий таблиц и курсоров задать третий параметр
|
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
Taran Сообщений: 13740 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Касательно отлова Escape... Не понравилась мне изначально такая идея. Поэтому ваял небольшой COM/EXE сервер и запускал его при старте долгоиграющей процедуры. В этом сервере одна кнопка "Прервать", которая меняет некоторый признак этого сервера-объекта, а основная программа отлавливает не нажатие Esc, а анализирует этот признак. Сервер в отдельном процессе, поэтому реагирует адекватно на интерактив. |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
Прогнал таблы - никаких ошибок не выявлено. Всё корректно открылось и записалось. Upd. Только что обратил внимание на "просканировать", а я открывал таблу и REPLACE поле 1й записи - индекс же должен перестроиться по-идее? Или обязательно REPLACE ALL сделать? Исправлено 1 раз(а). Последнее : VeterVFP, 18.05.22 10:32 |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
PaulWist Сообщений: 14698 Дата регистрации: 01.04.2004 |
Лучше просканировать, тогда можно словить запись на которой возникнет проблема. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
Просканировал и зареплейсил по всем записям - ошибок нет.
Значит лучше во все запросы добавить NOFILTER? Тогда оптимизация отключится ведь. Т.е. проблема с памятью из-за нарастающего буфера может быть? |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
Taran Сообщений: 13740 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Утверждать не буду, но буферизация - довольно таки вкусный ништяк. А за все ништяки приходится расплачиваться ресурсами. |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
sphinx Сообщений: 31624 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Может есть какая-то динамически собираемая строка?
В каких-то случаях пишет "Слишком длинная строка", а именно нехватку памяти. Нет рекурсии? ------------------ "Veni, vidi, vici!"(с) |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
В данном цикле динамических строк нет, рекурсия тут тоже не используется. Ошибка была только про нехватку памяти. Но не могу понять, почему она вылетает поверх процесса (замораживая его). Но при этом, если нажать ОК, то процесс идет дальше (т.е. обработчик не схватил её). И дальше может вылезать опять много раз. |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
sphinx Сообщений: 31624 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Не пробовал поставить задержку, типа WAIT '-----' WINDOW TIMEOUT 0.01?
------------------ "Veni, vidi, vici!"(с) |
Re: Ошибка 43 - There is not enough memory to complete this operation | |
---|---|
VeterVFP Автор Сообщений: 413 Откуда: Москва Дата регистрации: 26.12.2006 |
А где? В начале какого-то из циклов? Что она даст? |
© 2000-2024 Fox Club  |