Interbase, как закачать всю базу в память

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Dimka
Сообщения: 5
Зарегистрирован: 29 июн 2006, 09:23

Interbase, как закачать всю базу в память

Сообщение Dimka » 29 июн 2006, 09:51

Использую interbase 5.5 или Intebase 6.0. Компонент TIBQuery.
Запрос типа select * from Database
Открываю базу. Активной становится первая запись.
Выполняю команду Database.Last.
Результат: переход к последней записи не всегда происходит, иногда (непонятно почему) зависает. Вопрос: почему?
Как можно по другому загрузить всю базу в память?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 июн 2006, 10:39

interbase 5.5
устал я уже комментировать 5.5...
http://www.sql.ru/forum/actualthread.as ... =1#2822824
или Intebase 6.0.
а это вообще. 6 лет этому серверу. ШЕСТЬ ЛЕТ. Нельзя на таком старье работать.
Результат: переход к последней записи не всегда происходит, иногда (непонятно почему) зависает. Вопрос: почему?
судя по всему, никакого зависания нет. Просто в это время с сервера тащатся данные, а клиент пытается их "пережевать".
Ты посмотри на объем памяти, занимаемый твоим приложением. У тебя с определенного момента небось все в своп уходит, отсюда и зависание.
Как можно по другому загрузить всю базу в память?
а это надо?

Dimka
Сообщения: 5
Зарегистрирован: 29 июн 2006, 09:23

Сообщение Dimka » 29 июн 2006, 11:26

Размер памяти диспетчер задач показывает:
1. Когда выполняется команда last, то размер (по ходу выполнения команды) возрастает и в конечном итоге при переходе к последней записи размер становится около 150 Мб.
2. А когда значит зависает, то происходит следующее:
размер памяти доходит (например) до 70 Мб, потом становится 60 Мб, потом 70 и т.д.

Всю базу я хочу загрузить в память для того, чтобы можно было быстро найти необходимую запись (поиск идет по трем полям командой Locate).

Если я буду использовать server Interbase 7, поможет?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 29 июн 2006, 11:31

А если отбор сделать через where в запросе?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 29 июн 2006, 11:41

Оказывается в лесах до сих пор живут партизаны... и поезда под откос пускают... :shock:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 июн 2006, 11:54

Если я буду использовать server Interbase 7, поможет?
тебе с таким подходом, взятым из фокса или чего-ниьбудь вроде, и на Оракле не поможет. В клиент-сервере обычно принято ограничивать выборку, считываемую на клиента. На то он и сервер, чтобы не копировать все данные для клиента. Конечно, случаи, когда всю таблицу надо закачать локально бывают, но в этом случае разработчик четко должен понимать, зачем он это делает и к чему это приведет.

Например. Если у тебя полный набор после скачивания на клиенте в памяти занимает 150 мегабайт, значит ты должен ориентироваться на компы с 512мб RAM, минимум. И сервер тут ни при чем, абсолютно.

Зависание же на уровне 60-70 мегабайт может зависеть от двух факторов:
1. операционная система
2. клиентские компоненты (IBX, FIBPlus, BDE...), используемые в приложении.
Судя по вопросу, у тебя IBX, значит тебе надо поставить его самую последнюю версию.
Почитай статьи
http://www.interbase-world.com/ru/artic ... _id=207737
http://www.ibase.ru/devinfo/clientrefresh.htm
и еще скачай
www.ibase.ru/download/gbdatasets.zip
прочитай readme.rus. Однако, gbdatasets тебе можно будет использовать только когда ты прочитаешь первые две упомянутые статьи.

Dimka
Сообщения: 5
Зарегистрирован: 29 июн 2006, 09:23

Сообщение Dimka » 29 июн 2006, 15:51

Спасибо за информацию и ссылки!

Ответить