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

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

Траблы с запросом [D6, IB6.x]


}|{yk ©   (2005-01-20 13:09:00) 

Такой вот запрос
SELECT APP_LOG_TIME,
            APP_LOG_OPERATION,
            APP_LOG_OLD_VALUE,
            APP_LOG_NEW_VALUE,
            DML_CODE,
            APP_LOG_ID,
            APP_LOG_TABLE,
            STATUS,
            REASON
     FROM APP_LOG
      where
      STATUS='not sended' or
      STATUS=:inSTATUS1 or
      STATUS=:inSTATUS2 or
      STATUS=:inSTATUS3
     order by APP_LOG_TIME

во первых, при исполнении хавает 60 Мб на таблице из 9000 записей. Но это ладно. Но при прохождении по таблице с начала до конца на 6 тыс записей сообщает Out of memory. Хотя прога занимает 35 Мб памяти, и свободной памяти много. Что сделано неправильно? FB 1.5.2


msguns   (2005-01-20 17:53:00) [1]

Жук, поясни для тупых: где тормоз-то: на выполнении запроса или на сканировании ?
И зачем вообще сканировать ?
Если не секрет, конечно.


Danilka   (2005-01-20 16:05:00) [2]

а грид тогда зачем? а если я в гриде буду листать, вылетит?


Ega23   (2005-01-20 16:02:00) [3]

2 }|{yk ©   (20.01.05 15:57) [14]

DisabledControls
EnabledControls
ставил?


}|{yk   (2005-01-20 15:57:00) [4]

Вобщем, решил эту проблему следующим образом. Перед проходом по датасету устанавливаю dataset грида в nil. После окончания - восстанавливаю обратно. Работает, причем довольно быстро


}|{yk   (2005-01-20 15:36:00) [5]

В продолжение... Если поставить UniDirectional в true то все работает быстро. Но! Первые двадцать записей с непонятных мне причин имебт такие индексы: 1,20,1,20,1,20...22,23,24 и дальше нормально! Если же UniDirectional = false, то на 6 тысяче Out of memory


Vlad   (2005-01-20 15:10:00) [6]


> }|{yk ©   (20.01.05 15:07) [11]

Сделай индекс по APP_LOG_TIME


}|{yk   (2005-01-20 15:07:00) [7]

Пожирание 60 Мб было связано с... order by APP_LOG_TIME. Поставил order by LOG_ID - FB на запрос отнимает всего 5 Мб!


Ega23   (2005-01-20 14:48:00) [8]

2 }|{yk ©   (20.01.05 13:09)
Оффтоп.
Я бы на твоём месте поле STATUS или целочисленным сделал, или вообще в отдельную таблицу бы вынес. Хранить строки как-то...


}|{yk   (2005-01-20 14:45:00) [9]

Можно поставить UniDirectional := True. Но случился какой-то непонятный глюк и 20 записей в нужный файл так и не попало


Johnmen   (2005-01-20 14:42:00) [10]

>}|{yk ©  

Какой размер записи ?


}|{yk   (2005-01-20 14:17:00) [11]

При выполнении в IBExpert запрос так же хавает 60 Мб памяти сервера. Но отфетчить записи можно.


Desdechado   (2005-01-20 14:16:00) [12]

у тебя случайно блобы не достаются?
это не блобы ли: APP_LOG_OLD_VALUE, APP_LOG_NEW_VALUE
Out of memory - это ClientDataSet может говорить, если фетчишь много и с блобами (поставь fetchblobondemand)


Danilka   (2005-01-20 13:39:00) [13]


> во первых, при исполнении хавает 60 Мб на таблице из 9000
> записей. Но это ладно. Но при прохождении по таблице с начала
> до конца на 6 тыс записей сообщает Out of memory. Хотя прога
> занимает 35 Мб памяти, и свободной памяти много. Что сделано
> неправильно? FB 1.5.2

Если запустить запрос в ИБЭксперте и пролистать результат выполнения до конца, то-же самое происходит?
Сдается мне что дело не в запросе и не в индексах (9к записей без всяких индексов такой запрос шустро отработает), а в том, что ты делаешь "при прохождении по таблице с начала до конца".


Соловьев   (2005-01-20 13:28:00) [14]

а какой тогда смысл проверки? 8)


Соловьев   (2005-01-20 13:27:00) [15]

тогда не надо


}|{yk   (2005-01-20 13:26:00) [16]

Смысл индекса в поле, где может быть только 4 варианта?


Соловьев   (2005-01-20 13:14:00) [17]

индекс есть по APP_LOG_TIME? STATUS?
Попробуй
...
where STATUS in('not sended', :inSTATUS1, :inSTATUS2, :inSTATUS3)
...


Наверх

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