Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
4-1127247140
ArtemESC
2005-09-21 00:12
2005.11.20
Как убрать строку с Caption


3-1128597127
a80h19
2005-10-06 15:12
2005.11.20
Создание БД через ADO


11-1111908939
Serr
2005-03-27 11:35
2005.11.20
Вопрос по базам


4-1126964773
NikNet
2005-09-17 17:46
2005.11.20
У меня есть HDC как мне нарисовать иконку на ней?


11-1109298582
Lars
2005-02-25 05:29
2005.11.20
A Perfect use for KOL?? CGI web server?