Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Out of memory в результате фетча большого числа записей. [D7, FB 2.1]


Страницы:   1 2

Дмитрий Белькевич ©   (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-ами, благо организация данных позволяла.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо