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-07-02 18:51:00) [21]


> А дергать записи пакетами по 100 000 штук нельзя ?


Я не уверен, есть ли гарантии, что не пропустится какая-то одна (а часто бывает, что именно одна-две из миллиона и нужны). Так как в базу частенько пишут (добавляют/удаляют) другие потоки. Хотя это не очень критично и есть надежда, что в пределах одной транзакции каша не должна возникнуть. Хотелось бы, конечно, одним селектом ограничится, но если иначе - никак, то буду что-то с несколькими селектами думать.

Посмотрел Unidirectional. Похоже на то, что нужно, по крайней мере, на кэширование записей влияет точно. Попробую.


PEAKTOP   (2009-07-02 18:36:00) [22]

А дергать записи пакетами по 100 000 штук нельзя ?

Из спецификации оператора SELECT:

SELECT
   [ DISTINCT| ALL]
   [ FIRST{<record_number> | (:param_recordnumber) } [ SKIP<record_number> | (:param_recordnumber) ] ]
.....
[ ORDER BY<sort_value_list>    ]
..........


Дмитрий Белькевич   (2009-07-02 18:10:00) [23]

>Я что то не въезжаю.

Как уже народ сказал, пользователь - не живой. Есть программный цикл, который последовательно выбирает записи и обрабатывает информацию. Ему в единицу времени нужна только одна запись.

>Поиск что-ли ?

Можно сказать и так. В базе - линки на файлы. Поиск недостающих и излишних.

>Уменьшить количество полей в селекте.

Это временно поможет, но не решит проблему. 6 млн (или 10) опять будут валить программу. Тем не менее, я уже выбираю достаточный минимум полей.


stas   (2009-07-02 17:20:00) [24]

>Дмитрий Белькевич   (02.07.09 14:57) [1]
Уменьшить количество полей в селекте.


DrPass   (2009-07-02 17:03:00) [25]


> Sergey13 ©   (02.07.09 16:55) [10]
> Замена пользователя на клиента ничего для меня лично не
> прояснила. Ну да ладно.

Пользователь - это живой человек. Клиент - это в общем случае бездушная программа. Которая может выгребать 3 млн записей для того, чтобы закачать в другую СУБД, сделать статистический анализ или нарисовать по ним кардиограмму.


Sergey13   (2009-07-02 16:55:00) [26]

> [8] DrPass ©   (02.07.09 16:22)

Замена пользователя на клиента ничего для меня лично не прояснила. Ну да ладно.


PEAKTOP   (2009-07-02 16:54:00) [27]

> Записей около 3-х млн. Можно ли что-то придумать, кроме
> рекомендации меньше фетчить? Все записи в памяти не нужны,
>  нужна только одна, текущая запись.


А описать задачу нельзя ?
Чего-то совсем я не пойму, зачем вообще понадобилось все 3 млн фетчить. Поиск что-ли ?


DrPass   (2009-07-02 16:22:00) [28]


> Sergey13 ©   (02.07.09 15:58) [7]

Там, вообще-то, про пользователя ни слова не было сказано :)


Sergey13   (2009-07-02 15:58:00) [29]

> [4] Дмитрий Белькевич   (02.07.09 15:42)

Я что то не въезжаю.
Запрашиваем в запросе все записи из трехмиллионной таблицы. Сколько то уже закачалось на клиента. Пользователь решает, что полуторамиллионная запись - это, в принципе то, что ему надо. Так что ли? Или ему надо взять любую запись?


Anatoly Podgoretsky   (2009-07-02 15:52:00) [30]

Не смотреть, а делать.


Дмитрий Белькевич   (2009-07-02 15:43:00) [31]


> Можно. Unidirectional:= true


Спасибо, посмотрю.


Дмитрий Белькевич   (2009-07-02 15:42:00) [32]


> А что значит текущая запись, если она еще не на клиенте?


Которую клиент себе уже забрал и с ней может работать.


DrPass   (2009-07-02 15:29:00) [33]


> Можно ли что-то придумать

Можно. Unidirectional:= true


Sergey13   (2009-07-02 15:03:00) [34]

> [0] Дмитрий Белькевич   (02.07.09 14:57)
> нужна только одна, текущая запись.

А что значит текущая запись, если она еще не на клиенте?


Дмитрий Белькевич   (2009-07-02 14:57:00) [35]

3 млн селектов тоже не предлагать ;) Базе и так тяжело...


Страницы:   1 2

Наверх

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