powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Временные таблицы ,мусор и подводные камни
41 сообщений из 41, показаны все 2 страниц
Временные таблицы ,мусор и подводные камни
    #40084000
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

возникла задача импорта больших текстовых файлов с последующим разбором их содержимого по другим таблицам. Поскольку при импорте информация берётся из разных частей файлов и т.к. файлы очень большие возникла идея сначала зачитывать их во временные таблицы а потом уже разбирать и импортировать в целевые таблицы (разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб). Поскольку после импорта эти данные не нужны хотелось бы эти временные таблицы потом удалять так что бы не оставлять в базе мусор.
Соотв. начал искать информацию по использованию временных таблиц в FB 2.5.9 и в перспективе в 3й версии.
Нашел что согласно документации при создании временных таблиц (мне по видимому нужно уровня соединения) надо использовать "GLOBAL TEMPORARY" и "COMMIT PRESERVE ROWS".
Далее возник вопрос - после того как таблица автоматически удаляется остаётся ли мусор в базе и до какого момента этот мусор будет существовать? Например будет ли он удаляться только при восстановлении из резервной копии или его можно собрать другим способом.
Хотелось бы ещё услышать что то о подводных камнях которые могут ждать при использовании временных таблиц с большим объёмом данных, на что стоит обратить внимание и где "подстелить соломки".
Где можно подробнее почитать о теме временных таблиц кроме документации (её сейчас активно штудирую на эту тему но информаци в ней не так много).

Спасибо за любые советы и информацию.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084009
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели так сложно открыть документацию?
http://www.ibase.ru/files/firebird/Firebird_3_0_Language_Reference_RUS.pdf
стр 126

Глобальные временные таблицы (в дальнейшем сокращённо GTT) так же, как и
обычные таблицы, являются постоянными метаданными, но данные в них ограничены по
времени существования транзакцией (значение по умолчанию) или соединением с БД.
Каждая транзакция или соединение имеет свой собственный экземпляр GTT с данными,
изолированный от всех остальных. Экземпляры создаются только при условии обращения к
GTT, и данные в ней удаляются при завершении транзакции или отключении от БД.
Метаданные
GTT могут быть изменены или удалены с помощью инструкций ALTER TABLE и DROP TABLE.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084010
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что за формат файлов такой, что их непременно надо целиком в память грузить
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084011
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений,

Datanorm
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084013
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подводный камень будет такой - временные таблицы будут скидыватся на диск в %FIREBIRD_TMP% , если эта переменная не переопеределена по умолчанию, то в Windows возможна нехватка места на системном диске и последующие проблемы.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084014
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunДалее возник вопрос - после того как таблица автоматически удаляется остаётся ли мусор в базе и до какого момента этот мусор будет существовать?

Таблица никуда не удаляется. Удаляются только данные. Поскольку GTT размещены во временных файлах, то в БД мусора никакого нет. Но версии могут существовать в этих временных файлах. Собственно можно наткнуться даже на сборку мусора в рамках своего же коннекта. Я бы вообще на этот счёт не заморачивался. Кривая работа с GTT никому не может повредить, кроме самого соединения в котором эта работа происходит.

Про резервные копии вообще билеберда какая-то. Содержимое временных таблиц в них никогда не попадёт.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084015
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Где можно подробнее почитать о теме временных таблиц кроме документации (её сейчас активно штудирую на эту тему но информации в ней не так много ).

не верю
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084018
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

если что в 4.0 для их размещения отдельный параметр сделали в конфиге.


hlopotunСоотв. начал искать информацию по использованию временных таблиц в FB 2.5.9 и в перспективе в 3й версии.

в перспективе надо уже на 4.0 смотреть, в вот какой смысл делать миграцию на предыдущую версию, когда уже есть новая с кучей дополнительных возможностей. Боишься на свежие баги наткнуться, ну так подожди 4.0.1, всё равно мигрировать ты долго будешь, раз до сих пор даже на 3.0 не смог перейти
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084020
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Дегтярев Евгений,
Datanorm

примеров не нашел, эт какой-то местечковый формат? в гугле ссылки только на немецком
написано что это текстовый формат
закажи если не секрет что за зверь
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084022
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
если что в 4.0 для их размещения отдельный параметр сделали в конфиге.

Спасибо за информацию
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084026
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Gallemar,
если что в 4.0 для их размещения отдельный параметр сделали в конфиге.

да погоди, похоже, автор хочет странного
64bit по какой-то причине не использует, на 32bit распарсить почему то не может и движет в направлении проктостоматологии
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084027
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений
Симонов Денис
Gallemar,
если что в 4.0 для их размещения отдельный параметр сделали в конфиге.

да погоди, похоже, автор хочет странного
64bit по какой-то причине не использует

Ну бывает, нет у него возможности собрать ПО х32, это не странность, до сих пор куча софта на Delphi 7
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084034
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений
hlopotun
Дегтярев Евгений,
Datanorm

примеров не нашел, эт какой-то местечковый формат? в гугле ссылки только на немецком
написано что это текстовый формат
закажи если не секрет что за зверь

формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками.
Целиком зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла). Предведущая версия софта что это делает (написанная ещё в 2005м) наткнулась на проблемы с памятью при импорте больших файлов в этом году. Начиная примерно от 10 млн строк софт вываливается примерно на 80% зачитывания данных с "Out of memory". Можно конечно вынести импорт в отдельное приложение и скомпилироватрь его как x64, но гарантии что файлы не будут расти дальше нет. Опять же, в приложении задействовано куча модулей используемых в основной 32х битной программе и все их вычленить и тоже перекомпилить под х64 проблематично.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084039
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками.

Выглядит то он как? И если хочется вывести импорт в отдельное приложение, то лучше и БД отдельную сделать. А потом в основную передавать уже обработанные данные.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084041
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Целиком зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла).

А можно такой обмен данными выкинуть и написать нормальный, без обработки млн строк?
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084064
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun
разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб

В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084065
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
hlopotun
разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб
В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/
не взлетит.
тут программист нужен. ©
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084066
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemar
hlopotun
Целиком зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно позиционироваться в разные части файла).

А можно такой обмен данными выкинуть и написать нормальный, без обработки млн строк?

не получится, не от нас зависит. Стандарт принят за основу кучей поставщиков и только в нём они присылают данные.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084067
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
и только в нём они присылают данные.

и каждый раз по млн строк файлы?
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084070
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
hlopotun
разбирать их в памяти 32битного приложения просто нехватит памяти в 2 Гб

В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/


примерно так предведущий коллега и пробовал поступить. Использовал допиленный TbufferedFileStream в сочетании с индексами в памяти в которых и хранилась нужная информация для позиционирования в этом файле в последствии. И как раз этот индекс и вызывал переполнение в последствии. Т.к. Файлов может импортироваться за раз несколько, причём надо между ними прыгать итп. Там достаточно замороченная логика где неудобство формата сталкивается с логикой самого приложания. В эту часть мне ещё надо вникать самому. Сейчас надо определиться с архитектурой пока.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084071
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками.

это мне гугльтраслейт с немецкого перевел
ты формат покажи... пример текста, еще ли оно текстовое как пишуть в интернетах
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084072
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunЦеликом зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится
только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно
позиционироваться в разные части файла).

Могли бы Вы привести пример такой "понятности что зачитывать"?
И в чём проблемы с позиционированием в файле?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084074
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemar
hlopotun
и только в нём они присылают данные.

и каждый раз по млн строк файлы?

с десятками миллионов строк. У крупных поставщиков огромное количество артиклей, которые тоже разбиваются на различные варианты одного и того же артикля (сочетание цвет, состав, итп).
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084076
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun
ъъъъъ
пропущено...

В MS Windows есть MMF. Так вот, при формировании "окна" для работы с файлам , указывается 64-битное смещение от начала файла и 32-битный размер. То есть, используя MMF, можно обрабатывать файлы любого размера. ("64 бит должно быть достаточно для каждого" )/


примерно так предведущий коллега и пробовал поступить. Использовал допиленный TbufferedFileStream в сочетании с индексами в памяти в которых и хранилась нужная информация для позиционирования в этом файле в последствии. И как раз этот индекс и вызывал переполнение в последствии. Т.к. Файлов может импортироваться за раз несколько, причём надо между ними прыгать итп. Там достаточно замороченная логика где неудобство формата сталкивается с логикой самого приложания. В эту часть мне ещё надо вникать самому. Сейчас надо определиться с архитектурой пока.


Ну да, вместо того, чтобы разбираться в логике и править баги, куда приятнее заниматься якобы полезным делом: например, поговорить о том, как долго остается мусор в базе.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084085
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

hlopotunЦеликом зачитывать надо потому что всё в одном файле и понятно что зачитывать, становится
только когда всё или проиндексировано или торчит в памяти (т.е. надо многократно
позиционироваться в разные части файла).

Могли бы Вы привести пример такой "понятности что зачитывать"?
И в чём проблемы с позиционированием в файле?

да, выше уже написал, что в память не лезет уже сам индекх позволяющий позиционироваться в этих файлах.
тут накладываеся ещё софт в котором это всё запускается, который тоже хорошо кушает память. Хорошое решение было бы просто выделить импорт в отдельное x64 приложене но это практически невозможно. Слишком много связей с другими х32 модулями а у тех с третьими. Софту уже больше 25 лет, для интерфейса одних только самописных фреймворков внутри использовано более трёх. Короче проще переписать нежели выделить и в х64 перекомпилить.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084086
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Короче проще переписать нежели выделить и в х64 перекомпилить.
us-us! ©
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084089
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemar
hlopotun
формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками.

Выглядит то он как?...

обычный файл с разделителями, каждая срока имеет свой тип, количество полей итп со всякой вложенностью итп немного напоминает IDE но попроще тогоже PRICAT
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084096
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemar
А подводный камень будет такой - временные таблицы будут скидыватся на диск в %FIREBIRD_TMP% , если эта переменная не переопеределена по умолчанию, то в Windows возможна нехватка места на системном диске и последующие проблемы.

спасибо, тогда примерно понятна логика работы FB со временными таблицами. С FIREBIRD_TMP проблема не большая, софт имеет инсталлятор который может её создать.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084097
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
С FIREBIRD_TMP проблема не большая, софт имеет инсталлятор который может её создать.
Прямо там где нужно сервису?
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084098
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,FIREBIRD_TMP будет на сервере! Не на клиентской стороне.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084100
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunвыше уже написал, что в память не лезет уже сам индекх позволяющий позиционироваться в
этих файлах.

"Не верю!" (с)
Каков размер ключа и в какую структуру этот индекс складывается?

hlopotunобычный файл с разделителями, каждая срока имеет свой тип, количество полей итп со всякой
вложенностью итп немного напоминает IDE но попроще тогоже PRICAT

Так прыгать-то зачем? Импортируй во временные таблицы сразу по мере чтения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084102
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

дык он вроде это и хотел сделать
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084107
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисдык он вроде это и хотел сделать

Вроде, конечно, это, но кто ж его точно знает, вопросы-то у него странные, что здесь, что
в Рустамовском загончике...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084168
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вот в базе разбирать будет на два порядка медленнее, чем в памяти =)
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084170
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

ошибаешься. Если тупо парсить то да медленнее. Если из GTT раскидывать по другим таблицам, то однозначно быстрее
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084318
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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

"Не верю!" (с)
Каков размер ключа и в какую структуру этот индекс складывается?

hlopotunобычный файл с разделителями, каждая срока имеет свой тип, количество полей итп со всякой
вложенностью итп немного напоминает IDE но попроще тогоже PRICAT

Так прыгать-то зачем? Импортируй во временные таблицы сразу по мере чтения.


Размер самого ключа не мерял, мерял использование памяти всей программой в процессе импорта этой процедурой:

delphi function _CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize + MemCounters.PagefileUsage
else
RaiseLastOSError;
end;


до момента получения сообщения "Out of memory". Ключ составной, пихается в разные свойства одного из обьектов, которые в свою очередь являются массивами объектов. В итоге это приводит к тому что если грубо то объём используемой памяти на одну запись увеличивается в 2-3 раза в сравнеии с размером самой записи в файле.
В ключ пихается много чего, потом проводится пересорторовка данных итп. Сначала думал где утечки памяти есть, но проверил в процессе импорта этой процедурой через FastMM:

delphi function _CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize + MemCounters.PagefileUsage
else
RaiseLastOSError;
end;


и утечек не обнаружил.
Код большой и сложный, яркий пример того как ненадо делать такой импорт. По сути автор попробовал реализовать свою базу с индексом и частично данными в памяти где всё парсит и потом запихивает всё в базу которая в одних версиях ещё парадоксовая а в других firebird. Собственно отсюда и все проблемы. Но код работает на файлах приемлемого размера (до 600 Мб примерно). По любому прийдётся всё переписывать. От парадокса скорее всего уже отказываться (лишний аргумент клиентам переходить на новую версию).
И да, пихать сразу всё во временные таблицы и от туда уже раскидывать дальше.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084319
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemar
hlopotun,FIREBIRD_TMP будет на сервере! Не на клиентской стороне.

инсталляция и ведётся на сервере.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084339
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun
Предведущая версия софта что это делает (написанная ещё в 2005м) наткнулась на проблемы с памятью при импорте больших файлов в этом году. Начиная примерно от 10 млн строк софт вываливается примерно на 80% зачитывания данных с "Out of memory".


Была такая же ситуация лет 5-7 назад. 32-битная утилита, занимавшаяся обработкой справочников ФИАС в формате DBF после очередного обновления этих справочников "захлебнулась". PE-флаг IMAGE_FILE_LARGE_ADDRESS_AWARE флаг спас и с тех пор всё работает как и прежде без разбора чужого кода или написания нового. Флаг можно поставить любым HEХ-редактором, а если есть исходники, добавить дефайн для линкера. Например, в Delphi это {$SETPEFLAGS $20}. Флаг дает полуторократный прирост адресного пространства, а вам не хватает где-то 20%, так что он должен помочь.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084340
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ggreggory
hlopotun
Предведущая версия софта что это делает (написанная ещё в 2005м) наткнулась на проблемы с памятью при импорте больших файлов в этом году. Начиная примерно от 10 млн строк софт вываливается примерно на 80% зачитывания данных с "Out of memory".


Была такая же ситуация лет 5-7 назад. 32-битная утилита, занимавшаяся обработкой справочников ФИАС в формате DBF после очередного обновления этих справочников "захлебнулась". PE-флаг IMAGE_FILE_LARGE_ADDRESS_AWARE флаг спас и с тех пор всё работает как и прежде без разбора чужого кода или написания нового. Флаг можно поставить любым HEХ-редактором, а если есть исходники, добавить дефайн для линкера. Например, в Delphi это {$SETPEFLAGS $20}. Флаг дает полуторократный прирост адресного пространства, а вам не хватает где-то 20%, так что он должен помочь.


спасибо огромное! проверю.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084348
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun
Сначала думал где утечки памяти есть, но проверил в процессе импорта этой процедурой через FastMM:

delphi function _CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize + MemCounters.PagefileUsage
else
RaiseLastOSError;
end;


и утечек не обнаружил.
FastMM всего-то позволяет выяснить, вся ли память освободилась при завершении приложения.
Если ты бездумно хапашь память, а освобождается лишь в самом конце - FastMM ничего не скажет.
...
Рейтинг: 0 / 0
Временные таблицы ,мусор и подводные камни
    #40084349
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
hlopotun
Сначала думал где утечки памяти есть, но проверил в процессе импорта этой процедурой через FastMM:

пропущено...


и утечек не обнаружил.

FastMM всего-то позволяет выяснить, вся ли память освободилась при завершении приложения.
Если ты бездумно хапашь память, а освобождается лишь в самом конце - FastMM ничего не скажет.

указанная выше процедура как раз и посволяла проверять выделение и освобождение в ходе каждой итерации импорта.
Проверка при завершении приложения давно включена но не об ней речь.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Временные таблицы ,мусор и подводные камни
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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