![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]А че такой старый сервер? Может пора обновляться?