|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Может кто объяснит, почему при Insert и Update все время съедается оперативная память (commit хоть после каждого Insert, Update)? Высвобождение происходит только после diconnect. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 10:38 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Баго-фича, ИМХО... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 10:40 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Баго-фича, ИМХО... :) Какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 10:52 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Думаю так, при дисконнекте закрывается SetTransObject и соответственно прибиваются все внутренние кэши (дестроются) и сборщик мусора память освобождает. При коммитах, кэши чистятся, но не прибиваются (иначе бы тормоз был) и посему лишняя память (отхапанная ранее) не освобождается. Вот как это можно объяснить (скорее всего так и сделано), а как там реально - в sybase ^)) и то вряд-ли ответят... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 11:46 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Думаю так, при дисконнекте закрывается SetTransObject и соответственно прибиваются все внутренние кэши (дестроются) и сборщик мусора память освобождает. При коммитах, кэши чистятся, но не прибиваются (иначе бы тормоз был) и посему лишняя память (отхапанная ранее) не освобождается. Вот как это можно объяснить (скорее всего так и сделано), а как там реально - в sybase ^)) и то вряд-ли ответят... Сжирание памяти наблюдается даже без использования DW, те в скрипте:"Insert Into tab1(val1, val2, ... ) Values(:v1, :v2, ... ))" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 11:54 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
А много жрет-то? Если это так критично - предлагаю отказаться от PB (в этом смысле он является черным ящиком) и все писать С++ & Нативный интерфейс СУБД (например у ASA SQL препроцессор есть для С) - вот там можно будет все отследить до последнего байта... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 12:09 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Можно ещё попробывать GarbageCollect() вызвать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 12:43 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
А много жрет-то? Если это так критично - предлагаю отказаться от PB (в этом смысле он является черным ящиком) и все писать С++ & Нативный интерфейс СУБД (например у ASA SQL препроцессор есть для С) - вот там можно будет все отследить до последнего байта... Жрёт ровно столько, или почти столько же, сколько весят данные для вставки. Интерфейс а-ля С конечно хорошо, но данные надо умно-хитро раскладывать в разные места. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 12:50 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Есть такаой баг для 9.0 и MS SQLServer (отжирается около 100 М :( ), Sybase выслали они нам новую dll и все, вроде, нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 13:16 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Иех, давно это было... В смысле, давненько я интересовался этим вопросом, потому и приврать могу, так что все нижесказанное - ИМХО! :) SQLCA (и прочие подобные) откусывают память под свой кэш по размеру максимального пропускаемого SQL запроса. При очередном запросе ента гадость сравнивает размер запроса с размером кэша и если кэш меньше - увеличивает его. Чистки мусора и прочие пляски с бубном - не помогают. При дисконнекте SQLCA фактически дестроится и потому кэши рухають и память высвобождается. Так что, такова селява... :)) ЗЫ: Повторяю и наставиаю - усе сказаное - ИМХО! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 13:18 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Из всего вышесказанного - вот что можно посоветовать, попробуйте делить вставку блоками и после каждого блока коммит, может поможет? В крайнем случае, после коммита - ретрив... При такой схеме кэши не должны расти больше чем максимальный объем кэша одного блока. Если не поможет, значит все вышеперечисленные схемы грешат :( ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 13:25 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Вот еще что вспомнил, в бытность играясь с ягуаром После инициализации DW (можно даже после ретрива) сохранять его полностью (GetFullState). И после отработки каждого блока (занесение данных, Save, Commit) делать GetFullState... Правда не уверен в сильном эффекте... Ну и еще в форумах было предложение в свое время дисконнектить после каждого Save. И коннектить заново перед новым Save()... Тоже может помочь :)). Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 13:31 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
>Ikar Иех, давно это было... В смысле, давненько я интересовался этим вопросом, потому и приврать могу, так что все нижесказанное - ИМХО! :) SQLCA (и прочие подобные) откусывают память под свой кэш по размеру максимального пропускаемого SQL запроса. При очередном запросе ента гадость сравнивает размер запроса с размером кэша и если кэш меньше - увеличивает его. Чистки мусора и прочие пляски с бубном - не помогают. При дисконнекте SQLCA фактически дестроится и потому кэши рухають и память высвобождается. Так что, такова селява... :)) ЗЫ: Повторяю и наставиаю - усе сказаное - ИМХО! :) Специально делал тест типа: do while i < 10000 Update tab1 Set column1 = :val where id = :val_id ; loop Всеравно сжирает методично и постоянно по маленькому кусочку. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 14:12 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Уважаемые, просьба. При постановке вопроса указывать версию и билд PB, а также сервак БД (при необходимости) ! 2Геннадич Сжирание памяти наблюдается даже без использования DW, те в скрипте:"Insert Into tab1(val1, val2, ... ) Values(:v1, :v2, ... ))" А что значит и просто с использованием dw сжирается :) ?, поясни. 2andy753 Ну и еще в форумах было предложение в свое время дисконнектить после каждого Save. Ага и еще пулл коннектов написать итд :), каждый коннект может давольно много времени занимать :(, что зависти от базы и бл. Также можно поиграться с SetTrans и с SetTransObject ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 14:41 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
>Sergey Rijkov Уважаемые, просьба. При постановке вопроса указывать версию и билд PB, а также сервак БД (при необходимости) ! 2Геннадич Сжирание памяти наблюдается даже без использования DW, те в скрипте:"Insert Into tab1(val1, val2, ... ) Values(:v1, :v2, ... ))" А что значит и просто с использованием dw сжирается :) ?, поясни. 1 - PB Enterprise 6.5.1 , Oracle 8.1.5 2 - Имеется приложение, которое закачивает данные из файловых источников в БД ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 14:55 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
За много лет работы на PB единственный раз столкнулся с проблемой памяти, когда забыл сделать destroy для datastore. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 15:19 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Хмм... странно, недавно делал примерно тоже самое, но все нормально. Как то давным давно, встречался с таким казусом :) DECLARE lc_cur DYNAMIC CURSOR FOR SQLSA ; ls_sql = "..." PREPARE SQLSA FROM :ls_sql ; for i ... OPEN DYNAMIC lc_cur USING :LN_PK_VALUE; FETCH lc_cur INTO :LN_REZ; CLOSE lc_cur; next Дык вот этот кусок страшно с гем. прогр. жрал память. И что вы думаете ? Спасло вот что ... ... FETCH lc_cur INTO :LN_REZ; Sleep (10) CLOSE lc_cur; Sleep (10) ... ------------- Сергей Рыжков ЗАО "НПО Балтрос" http://pbl.narod.ru (PowerBuilder + Oracle) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 15:25 |
|
Память и PowerBuilder
|
|||
---|---|---|---|
#18+
Ну и еще , чтоб не рсслоблялись :) Официально признаннй баг (хотя сибес никогда ничего не признает!) При использовании PB 7 и MS SQL директ драйвера возникает утечка пямяти при долгом коннекте. (при dissconect все возвращается). Рекомендуют: The fix is to put something in the DBParm property of the SQLCA object. Something like "Application='MyApp'" or whatever. In the development environment, edit the connection properties and make sure something is in the Application Name or Workstation Name on the Network tab О как :), непостигаемый бЫлдер :) ------------- Сергей Рыжков ЗАО "НПО Балтрос" http://pbl.narod.ru (PowerBuilder + Oracle) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 16:12 |
|
|
start [/forum/topic.php?fid=15&msg=32267522&tid=1339503]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 234ms |
total: | 369ms |
0 / 0 |