![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Out of memory в результате фетча большого числа записей. [D7, FB 2.1]
Дмитрий Белькевич © (2009-07-02 14:57:00)Записей около 3-х млн. Можно ли что-то придумать, кроме рекомендации меньше фетчить? Все записи в памяти не нужны, нужна только одна, текущая запись.
Компоненты - IBX
Виталий Панасенко (2009-10-05 12:07:00) [1]Таки пожалуйста...:-)
Дмитрий Белькевич (2009-10-05 11:50:00) [2]>И еще: а если использовать TIBSQL, вместо TIBDataSet?
Посмотрел. И что бы ви таки думали? Таки да :) Eof есть, Next есть. Попробовал - всё работает... Спасибо, опять всё переписывать :)
Я-то почему-то думал, что у IBSQL eof/next нету...
Виталий Панасенко(дом) (2009-10-04 12:29:00) [3]
> Дмитрий Белькевич (02.10.09 18:26) [30]
> >TIBSQL
>
> И как же мне в нём все записи перебрать? Делать миллионы
> запросов?
ты гонишь! ОДИН!!!! точно такой же как у TIBdataSet!
turbouser (2009-10-02 20:31:00) [4]
> turbouser © (02.10.09 20:30) [31]
+ или тут :)
http://rapidshare.com/files/171425897/UIB.rar
turbouser (2009-10-02 20:30:00) [5]
> Дмитрий Белькевич (02.10.09 18:26) [30]
> ока остановился на UIB. Всё отлично работает, только под
> 2009 пока UIB'а нет в поставке JEDI...
Есть отдельно:
http://rapidshare.com/files/172766840/UIB20081212.rar
Дмитрий Белькевич (2009-10-02 18:26:00) [6]Возвращаясь...
>Локально на сервере или на клиенте?
Локально на сервере, или на расшаренных папках в сети.
>А сами IBX обновлялись?
Да.
>TIBSQL
И как же мне в нём все записи перебрать? Делать миллионы запросов?
>dbexpress'овские
Неудобны тем, что еще одну дллку таскать нужно. Стараюсь количество файлов в проекте держать минимально возможножным.
Пока остановился на UIB. Всё отлично работает, только под 2009 пока UIB'а нет в поставке JEDI...
Виталий Панасенко (2009-08-12 09:49:00) [7]И еще: а если использовать TIBSQL, вместо TIBDataSet?
Виталий Панасенко (2009-08-12 09:41:00) [8]А сами IBX обновлялись?
Ega23 (2009-08-12 07:18:00) [9]
> Файлы расположены локально (или на присоединённых шарах).
Локально на сервере или на клиенте?
Игорь Шевченко (2009-08-11 14:39:00) [10]
> Может быть в самом деле dbexpress'овские компоненты попробовать.
> ..
Мне помогли, об чем в ветке из [20] и написано, пост № 45
Дмитрий Белькевич (2009-08-11 14:38:00) [11]
> Все-таки так и не понял какого лешего это "переливание"
> выполнять на клиенте. Или при обработке могут возникать
> ситуации, требующие вмешательство человека ?
Объясняю. В таблице лежат линки на файлы (и еще некоторая информация). Файлы расположены локально (или на присоединённых шарах). Нужно пробежаться по всем записям, и у несуществующих файлов, но имеющихся в базе, проставить пометки (в отдельном поле), что их нет.
MsGuns (2009-08-11 14:34:00) [12]Все-таки так и не понял какого лешего это "переливание" выполнять на клиенте. Или при обработке могут возникать ситуации, требующие вмешательство человека ?
Дмитрий Белькевич (2009-08-11 14:19:00) [13]
> Как насчет компонентов UIB ? http://www.progdigy.com/?page_id=5
Под 2009-й вроде бы не работают. По крайней мере, их почему-то в поставке jedi нету.
> Кстати по сути одноправленен только dbexpress, остальные
> многовекторны.
Может быть в самом деле dbexpress'овские компоненты попробовать...
Дмитрий Белькевич (2009-08-11 14:13:00) [14]Пока не ясно, где именно датасет отжирает память, что бы знать, куда дальше двигаться. Где-то же он это делает.
IBAlloc вызывается только при старте запроса.
В модуле IBCustomDataSet GetMem/SetLength вызывается несколько раз при старте запроса и больше не дёргается.
В TDataSet FBuffers тоже вроде бы никто не трогает.
Никто случаем не знает, где данные хранятся, которые отжирают память?
Замечено еще одно. UniDirectional есть непосредственно в TIBCustomDataSet и в предке, TDataSet - FIsUniDirectional. Так вот. В самом TIBCustomDataSet UniDirectional действительно устанавливается в True, в предке же FIsUniDirectional остаётся False.
Anatoly Podgoretsky (2009-08-11 13:41:00) [15]Кстати по сути одноправленен только dbexpress, остальные многовекторны.
По проблеме, можно еще повозиться с сервными курсорами.
Игорь Шевченко (2009-08-11 13:26:00) [16]Вот, кстати, ветка с моими поисками решения
http://delphimaster.net/view.php?folder=18&file=1-1160361442
turbouser (2009-08-11 13:03:00) [17]
> Дмитрий Белькевич (11.08.09 12:54) [18]
>
>
Как насчет компонентов UIB ? http://www.progdigy.com/?page_id=5
Дмитрий Белькевич (2009-08-11 12:54:00) [18]
> Я пробовал и BDE, и IBX и ADO и dbExpress, которые unidirectional
> по сути.
Мда... Малообещающе.
Продолжаю воевать с ibx'ами. Замечены некоторые закономерности.
С выключенным unidirectional память 'течёт' всегда.
С включенным unidirectional память 'течёт' только в одном случае - если доступаемся к полям блоб. Если к char, integer, просто пустой цикл - то количество занимаемой памяти не меняется.
Опять баги VCL? Или просто особенности? Буду разбираться дальше...
Sergey13 (2009-07-03 08:48:00) [19]> [15] Дмитрий Белькевич (02.07.09 18:51)
> Я не уверен, есть ли гарантии, что не пропустится какая-то одна
ИМХО, если выбирать по диапазону ID-шников, то вряд ли пропустится что-либо
where id>=:Par1 and id<:Par2
Игорь Шевченко (2009-07-03 02:46:00) [20]У меня не вышло, в свое время (два года назад) - надо было выбрать из большой таблицы данные (хоть по одной записи) в результате одного select.
Как раз из Firebird, вытащить надо было много миллионов записей.
Я пробовал и BDE, и IBX и ADO и dbExpress, которые unidirectional по сути.
В результате выбирал многими select-ами, благо организация данных позволяла.