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

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

Interbase 5.6 жрет память


Извращенец2 ©   (2005-09-30 06:51:00) 

Доброе время суток!

Помогите пожалуйста, уважаемые, с такой проблемой. Поставил Windows 2000 Server, сверху Interbase 5.6 "как есть" без каких либо настроек. Отресторил последний бэкап, запустил юзеров - и тут катастрофически начала кончаться память. Pagefile за сутки разбухает до 900Мб. В этот момент Interbase занимает 120Мб в памяти.

Грешу на него. Подскажите, в чем проблема? Где зарыта собака? Interbase.log молчит, ошибки только 10054(оторванный клиент), когда насильно сервер перегружал.


Sergey_Masloff   (2005-10-11 17:31:00) [1]

Извращенец2   (11.10.05 17:28) [14]
Все UDF возвращающие ссылки на динамическую память а не все "by reference".


Извращенец2   (2005-10-11 17:28:00) [2]

Благодарю всех, кто откликнулся на призыв!

Нашел я все-таки дыру - это была UDF не-FREE_IT внутри вьюхи:) Респект тем, кто просек это с самого начала. Не меньший респект остальным участвующим!

Еще раз всем последователям: все UDF-ки, которые "by Reference", должны быть Free_IT! Иначе не напасатесь памяти на сервак.


ANB   (2005-10-11 12:53:00) [3]


> Sergey_Masloff   (11.10.05 12:52) [12]
- я ж написал - имхо. Оракла у меня память не жрет.


Sergey_Masloff   (2005-10-11 12:52:00) [4]

ANB ©   (11.10.05 12:36) [11]
>Имхо. Такая конструкция приводит к полному сканированию таблицы без >использования индексов.
И что? И памяти должна занять немеряно под область сортировки. Но все это не повод потом эту память не отдавать.


ANB   (2005-10-11 12:36:00) [5]


> select id
> from allclients
> where Upper(clname) like "%ИВАНОВ%"
> order by idc

Имхо. Такая конструкция приводит к полному сканированию таблицы без использования индексов.


Johnmen   (2005-10-11 12:31:00) [6]

>Desdechado ©   (11.10.05 12:22) [9]
>Откуда взята UPPER

Она ТАМ была...:)


Desdechado   (2005-10-11 12:22:00) [7]

Откуда взята UPPER и как она определена в БД? Ведь можно элементарно "забыть" объявить FREE_IT, чтобы память утекала рекой...

Кстати, строка подключения к ЛОКАЛЬНОМУ серверу тоже влияет (если по локальному протоколу, то другие механизмы выделения памяти используются)


Sergey13   (2005-10-11 12:10:00) [8]

2[7] Извращенец2   (11.10.05 12:02)
Наверное было бы логично запостить и код создания вьюхи? Не находишь?


Извращенец2   (2005-10-11 12:02:00) [9]

Добрый вам!

Господа, сузил круг поиска утечки памяти - она утекает только когда выполняется такой запрос:

select id
from allclients
where Upper(clname) like "%ИВАНОВ%"
order by idcl

allclients - это view, а не таблица

Вся остальная память освобождается при отключении, а вот сколько отъел этот запрос(замерял) - столько прибавляется к значению, которое было до подключения. И каждое выполнение запроса(даже с теми же параметрами) отъедает память безжалостно.

Варианты с "кривым" сервером, "кривой" UDF, "кривой" ОС не подтвердились.

Может кто подскажет, где тут "волшебство" в запросе? Вещи вроде элементарные...


Sergey_Masloff   (2005-10-01 11:16:00) [10]

DSKalugin ©   (30.09.05 13:25) [4]
>а по версии сервера сразу можно судить о том как написаны программы..
Нормально написаны раз не потребовалась доработка за столько лет.
IB5.6 отличный сервак а то что описывает Desdechado ©   (30.09.05 13:54) [5] имело место быть да и сейчас имеет, насколько я знаю, и в последних версиях


Desdechado   (2005-09-30 13:54:00) [11]

Замечу, что причина по ссылке [2] раскрыта не полностью.
Я наблюдал картину, когда сервер поедает память при использовании корректной UDF. Суть была в том, что транзакция была длительной, UDF использовалась в каждом запросе в ней, память освобождалась, но сервер (или ОС?) этого не подтверждали до конца транзакции. После завершения транзакции использованная память скачком освобождалась.
Кстати, я эту UDF написал в двух вариантах (освобождение памяти в самой UDF и через инструкцию серверу FREE_IT) - результат одинаков был. Для первого варианта только скорость поедания памяти была чуть-чуть меньше.


DSKalugin   (2005-09-30 13:25:00) [12]

а по версии сервера сразу можно судить о том как написаны программы..


Os   (2005-09-30 10:38:00) [13]

IB не жрет, жрут программы, которые оставляют открытые запросы и соединения, а IB просто пытается их удержать.


Johnmen   (2005-09-30 09:21:00) [14]

http://www.ibase.ru/ibfaq.htm#memory


Sergey13   (2005-09-30 09:10:00) [15]

А че такой старый сервер? Может пора обновляться?


Наверх

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