Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизInterbase 5.6 жрет память Найти похожие ветки
← →
Извращенец2 (2005-09-30 06:51) [0]Доброе время суток!
Помогите пожалуйста, уважаемые, с такой проблемой. Поставил Windows 2000 Server, сверху Interbase 5.6 "как есть" без каких либо настроек. Отресторил последний бэкап, запустил юзеров - и тут катастрофически начала кончаться память. Pagefile за сутки разбухает до 900Мб. В этот момент Interbase занимает 120Мб в памяти.
Грешу на него. Подскажите, в чем проблема? Где зарыта собака? Interbase.log молчит, ошибки только 10054(оторванный клиент), когда насильно сервер перегружал.
← →
Sergey13 © (2005-09-30 09:10) [1]А че такой старый сервер? Может пора обновляться?
← →
Johnmen © (2005-09-30 09:21) [2]http://www.ibase.ru/ibfaq.htm#memory
← →
Os © (2005-09-30 10:38) [3]IB не жрет, жрут программы, которые оставляют открытые запросы и соединения, а IB просто пытается их удержать.
← →
DSKalugin © (2005-09-30 13:25) [4]а по версии сервера сразу можно судить о том как написаны программы..
← →
Desdechado © (2005-09-30 13:54) [5]Замечу, что причина по ссылке [2] раскрыта не полностью.
Я наблюдал картину, когда сервер поедает память при использовании корректной UDF. Суть была в том, что транзакция была длительной, UDF использовалась в каждом запросе в ней, память освобождалась, но сервер (или ОС?) этого не подтверждали до конца транзакции. После завершения транзакции использованная память скачком освобождалась.
Кстати, я эту UDF написал в двух вариантах (освобождение памяти в самой UDF и через инструкцию серверу FREE_IT) - результат одинаков был. Для первого варианта только скорость поедания памяти была чуть-чуть меньше.
← →
Sergey_Masloff (2005-10-01 11:16) [6]DSKalugin © (30.09.05 13:25) [4]
>а по версии сервера сразу можно судить о том как написаны программы..
Нормально написаны раз не потребовалась доработка за столько лет.
IB5.6 отличный сервак а то что описывает Desdechado © (30.09.05 13:54) [5] имело место быть да и сейчас имеет, насколько я знаю, и в последних версиях
← →
Извращенец2 (2005-10-11 12:02) [7]Добрый вам!
Господа, сузил круг поиска утечки памяти - она утекает только когда выполняется такой запрос:
select id
from allclients
where Upper(clname) like "%ИВАНОВ%"
order by idcl
allclients - это view, а не таблица
Вся остальная память освобождается при отключении, а вот сколько отъел этот запрос(замерял) - столько прибавляется к значению, которое было до подключения. И каждое выполнение запроса(даже с теми же параметрами) отъедает память безжалостно.
Варианты с "кривым" сервером, "кривой" UDF, "кривой" ОС не подтвердились.
Может кто подскажет, где тут "волшебство" в запросе? Вещи вроде элементарные...
← →
Sergey13 © (2005-10-11 12:10) [8]2[7] Извращенец2 (11.10.05 12:02)
Наверное было бы логично запостить и код создания вьюхи? Не находишь?
← →
Desdechado © (2005-10-11 12:22) [9]Откуда взята UPPER и как она определена в БД? Ведь можно элементарно "забыть" объявить FREE_IT, чтобы память утекала рекой...
Кстати, строка подключения к ЛОКАЛЬНОМУ серверу тоже влияет (если по локальному протоколу, то другие механизмы выделения памяти используются)
← →
Johnmen © (2005-10-11 12:31) [10]>Desdechado © (11.10.05 12:22) [9]
>Откуда взята UPPER
Она ТАМ была...:)
← →
ANB © (2005-10-11 12:36) [11]
> select id
> from allclients
> where Upper(clname) like "%ИВАНОВ%"
> order by idc
Имхо. Такая конструкция приводит к полному сканированию таблицы без использования индексов.
← →
Sergey_Masloff (2005-10-11 12:52) [12]ANB © (11.10.05 12:36) [11]
>Имхо. Такая конструкция приводит к полному сканированию таблицы без >использования индексов.
И что? И памяти должна занять немеряно под область сортировки. Но все это не повод потом эту память не отдавать.
← →
ANB © (2005-10-11 12:53) [13]
> Sergey_Masloff (11.10.05 12:52) [12]
- я ж написал - имхо. Оракла у меня память не жрет.
← →
Извращенец2 (2005-10-11 17:28) [14]Благодарю всех, кто откликнулся на призыв!
Нашел я все-таки дыру - это была UDF не-FREE_IT внутри вьюхи:) Респект тем, кто просек это с самого начала. Не меньший респект остальным участвующим!
Еще раз всем последователям: все UDF-ки, которые "by Reference", должны быть Free_IT! Иначе не напасатесь памяти на сервак.
← →
Sergey_Masloff (2005-10-11 17:31) [15]Извращенец2 (11.10.05 17:28) [14]
Все UDF возвращающие ссылки на динамическую память а не все "by reference".
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.053 c