GUI program exits silently (32 bit, low RAM, LOB)

Discussion of open issues, suggestions and bugs regarding ODAC (Oracle Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
cis-wurzen
Posts: 75
Joined: Tue 04 Jan 2005 10:26

GUI program exits silently (32 bit, low RAM, LOB)

Post by cis-wurzen » Mon 18 May 2020 18:25

Fetching many rows with lobs does sometimes not show an EOutOfMemory exception.
The program vanishes silently.
Very good reproducable with 19.6 oracle client, server version does not matter.
Tested with ODAC 10.3.9 and 11.1.3

Running form Delphi throws (internally) exception class $C0000005 'access violation at 0x72a0c823: read of address 0xfffffffb' from OraClasses.pas

Code: Select all

Check(OCI8.OCIDescriptorAlloc(OCISvcCtx.hOCIEnv, LOBLocator, OCI_DTYPE_LOB, 0, nil));

From the user's point of view, it is very annoying if the program disappears without a message.
Although fetching gigabytes of data is not very smart.




Running the console (see sample code) prints stack trace from oracle client.

Code: Select all

ODAC: 11.1.3
Mem: 7.208.960
Mem: 1.819.230.208
Client: 19.6.0.0.0
Server: 12.2.0.1.0
Start 1
Open OK 1
Last OK 1  999 records
Mem: 1.874.677.760
Mem: 1.874.714.624
Start 2
Open OK 2

Errors in file :
OCI-21500: Interner Fehlercode, Argumente: [kgepop: no error frame to pop to], [], [], [], [], [], [], []
OCI-21503: Programm durch schwerwiegenden Fehler beendet
OCI-04030: Zu wenig Prozessspeicher für Versuch 16336 Byte zuzuweisen (koh-kghu sessi,alloc lob locator)


----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
02D488C7             CALLrel  02ED2448             18D3D4 1 2D48520 2D48980
                                                   2D48520 2D48980
71F80150             CALLreg  00000000             301C200 3
71FE61D8             CALLrel  71F7FDC0             301C200 3025E68 0 1 72E8B110
                                                   72E8B214
71FF998D             CALLrel  71FE4EE0             301C200 3063CC0 3FD0 0
                                                   3063CEC 0
72039E89             CALLrel  71FF8D70             301C200 3063CC0 3FC4 0 0
                                                   2F241A0
72262E50             CALLrel  72039B70             301C200 3063CB0 FA4 1 2F241A0
                                                   305CA18
72262830             CALLrel  72262CF0             301C200 FA0 A 1 2F241A0 0 0
7225DBE5             CALLrel  72262220             301C200 FA0 A 1 2F241A0 0 0
02B3FDD5             CALLrel  02ED2AD8             301BAF0 FA0 A 2F241A0 0 40
02B374AA             CALLrel  02B3D230             301BAF0 18FC20 32 1 0 0 0 0
_OCIDescriptorAlloc  CALLptr  00000000             301BAF0 18FC20 32 0 0
()+43
...





Sample code

Code: Select all


{$APPTYPE CONSOLE}

program odactest19ram;

uses
  SysUtils, Windows, PsAPI, Ora;

procedure WriteMemUsage;
var
  MemCnt: PROCESS_MEMORY_COUNTERS;
begin
  if GetProcessMemoryInfo(GetCurrentProcess, @MemCnt, SizeOf(MemCnt)) then
    Writeln(Format('Mem: %.0n', [MemCnt.WorkingSetSize / 1]));
end;

var
  Session: TOraSession;
  Query: TOraQuery;
  I: Integer;
  P: Pointer;

procedure DoTest(ASql: string);
begin
  Inc(I);
  Writeln('Start ', I);

  Query.SQL.Text := ASql;
  Query.Open;
  Writeln('Open OK ', I);

  try
    Query.Last;
    Writeln('Last OK ', I, '  ', Query.RecordCount, ' records');
    WriteMemUsage;
  except
    on E: Exception do
    begin
      Writeln('Last not OK ', I, '  ', Query.RecordCount, ' records');
      Writeln(E.ClassName, ' ', E.Message);
      WriteMemUsage;
    end;
  end;

  Query.Close;
  WriteMemUsage;
end;

begin
  Writeln('ODAC: ', ODACVersion);

  I := 96 * 1024 * 1024; // 96 MB - try different values - YMMV

  WriteMemUsage;
  while True do // waste some RAM - if no big table is available
  begin
    try
      GetMem(P, I);
      FillChar(P^, I, $FF);
    except
      Break;
    end;
  end;
  WriteMemUsage;


  I := 0;
  Session := TOraSession.Create(nil);
  Query   := TOraQuery.Create(nil);

  Query.Session := Session;

  Session.ConnectString := 'system/manager@server';
  Session.Connect;

  Writeln('Client: ', Session.Home.OCIVersionSt);
  Writeln('Server: ', Session.OracleVersion);

  DoTest('SELECT O.*, TO_CLOB(OBJECT_NAME) AS CLOB FROM ALL_OBJECTS O WHERE ROWNUM < 1000');

  DoTest('SELECT O.*, TO_CLOB(OBJECT_NAME) AS CLOB FROM ALL_OBJECTS O');

  Writeln('End');
end.
Last edited by cis-wurzen on Thu 10 Jun 2021 12:26, edited 1 time in total.

MaximG
Devart Team
Posts: 1822
Joined: Mon 06 Jul 2015 11:34

Re: GUI program exits silently (low RAM, LOB)

Post by MaximG » Mon 25 May 2020 06:06

Thank you for the information. We will investigate the described issue and let you know the results shortly.

cis-wurzen
Posts: 75
Joined: Tue 04 Jan 2005 10:26

Re: GUI program exits silently (low RAM, LOB)

Post by cis-wurzen » Fri 14 May 2021 09:23

Oracle 19.11 ODAC 11.4.2 still same behavior

Code: Select all

ODAC: 11.4.2
Mem: 4.972.544
Mem: 1.917.714.432
Client: 19.11.0.0.0
Server: 19.0.0.0.0
Start 1
Open OK 1
Last OK 1  999 records
Mem: 1.975.554.048
Mem: 1.975.586.816
Start 2
Open OK 2
Errors in file :
OCI-21503: Programm durch schwerwiegenden Fehler beendet
OCI-04030: Zu wenig Prozessspeicher für Versuch 16336 Byte zuzuweisen (koh-kghu sessi,alloc lob locator)


----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
02A43917             CALLrel  02BF677A             18D3D0 1 2A43570 2A439D0
                                                   2A43570 2A439D0
042978A0             CALLreg  00000000             397E20 3
042FF5FC             CALLrel  04297510             397E20 3A1A98 0 1 51C4294
                                                   51C43A4
04312B5B             CALLrel  042FE220             397E20 74A313E8 3FD0 0
                                                   74A31414 0
04353269             CALLrel  04311F50             397E20 74A313E8 3FC4 0 0
                                                   2C558A0
04587720             CALLrel  04352F50             397E20 74A313D8 FA4 1 2C558A0
                                                   3D8654
04587100             CALLrel  045875C0             397E20 FA0 A 1 2C558A0 0 0
04582455             CALLrel  04586AF0             397E20 FA0 A 1 2C558A0 0 0
0283D0B5             CALLrel  02BF6E10             397708 FA0 A 2C558A0 0 40
0283376A             CALLrel  0283A510             397708 18FC20 32 1 0 0 0 0
_OCIDescriptorAlloc  CALLptr  00000000             397708 18FC20 32 0 0
()+43
0073B4A0             CALLreg  00000000             397708 18FC20 32 0 0
007335C2             CALLreg  00000000             0 70B5AC 0 19 77AE79A6
                                                   77AE5C8C
00737B8B             CALL???  00000000             782E3D 20DA838 18FCF8 71A91D
                                                   79B9FFC0 0
0073831E             CALL???  00000000             18FE58 738AF2 18FE40 18FF48 0
                                                   782E3D
007364AC             CALLrel  00737F3C             112F0 20112F0 18FE84 65591B
                                                   18FE64 655928
0065591B             CALL???  00000000             18FE64 655928 18FE84 18FE8C
                                                   65596C 18FE84
00739DE0             CALL???  00000000             18FE98 739E25 18FEB8 18FEC0
                                                   739E36 18FEB8
0073A097             CALLrel  00739CBC             18FEDC 73A0B2 18FED4 0
                                                   20112F0 18FEEC
0073A36D             CALL???  00000000             18FF00 73A39B 18FEEC 20112F0
                                                   18FEF8 5E0310
005E0310             CALL???  00000000             208D330
00523A97             CALL???  00000000             18FF1C 523ADF 18FF14 782E3D
                                                   208D330 18FF4C
0077797C             CALLrel  00523A50             18FF28 7779DF 18FF4C 18FF54
                                                   777AAE 18FF4C
00782F15             CALLrel  007778D8             18FF70 782F49 18FF80 782D9C
                                                   782D9C 7FFDE000
76E56A12             CALLreg  00000000             7FFDE000 76E569F0 8264BCFC
                                                   18FFDC 772CAB2F 7FFDE000
772CAB2D             CALLreg  00000000             7FFDE000 83A7FBC8 0 0
                                                   7FFDE000 7FF9
772CAAF5             CALLrel  772CAB00             FFFFFFFF 772AFE31 0 0 782D9C
                                                   7FFDE000
00000000             CALL???  00000000

Call stack signature: 0xe5b8866a9ee1f71f



call stack performance statistics:
total                  : 0.110000 sec
setup                  : 0.063000 sec
stack unwind           : 0.000000 sec
symbol translation     : 0.031000 sec
printing the call stack: 0.016000 sec
printing frame data    : 0.000000 sec
printing argument data : 0.000000 sec
printing kernel stack  : 0.000000 sec


----- End of Call Stack Trace -----

Errors in file :
OCI-21500: Interner Fehlercode, Argumente: [kgepop: no error frame to pop to], [], [], [], [], [], [], []
OCI-21503: Programm durch schwerwiegenden Fehler beendet
OCI-04030: Zu wenig Prozessspeicher für Versuch 16336 Byte zuzuweisen (koh-kghu sessi,alloc lob locator)


----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
02A43917             CALLrel  02BF677A             18EA64 1 2A43570 2A439D0
                                                   2A43570 2A439D0
0429D5D7             CALLreg  00000000             397E20 3 208D330 0 4C0043
                                                   42004F
0429CB24             CALLrel  0429CF80             397E20 3A1A98 53FF
050165FE             CALLrel  0429CA90             397E20 520624C 5206240
04582455             CALLrel  04586AF0             397E20 FA0 A 1 2C558A0 0 0
0283D0B5             CALLrel  02BF6E10             397708 FA0 A 2C558A0 0 40
0283376A             CALLrel  0283A510             397708 18FC20 32 1 0 0 0 0
_OCIDescriptorAlloc  CALLptr  00000000             397708 18FC20 32 0 0
()+43
0073B4A0             CALLreg  00000000             397708 18FC20 32 0 0
007335C2             CALLreg  00000000             0 70B5AC 0 19 77AE79A6
                                                   77AE5C8C
00737B8B             CALL???  00000000             782E3D 20DA838 18FCF8 71A91D
                                                   79B9FFC0 0
0073831E             CALL???  00000000             18FE58 738AF2 18FE40 18FF48 0
                                                   782E3D
007364AC             CALLrel  00737F3C             112F0 20112F0 18FE84 65591B
                                                   18FE64 655928
0065591B             CALL???  00000000             18FE64 655928 18FE84 18FE8C
                                                   65596C 18FE84
00739DE0             CALL???  00000000             18FE98 739E25 18FEB8 18FEC0
                                                   739E36 18FEB8
0073A097             CALLrel  00739CBC             18FEDC 73A0B2 18FED4 0
                                                   20112F0 18FEEC
0073A36D             CALL???  00000000             18FF00 73A39B 18FEEC 20112F0
                                                   18FEF8 5E0310
005E0310             CALL???  00000000             208D330
00523A97             CALL???  00000000             18FF1C 523ADF 18FF14 782E3D
                                                   208D330 18FF4C
0077797C             CALLrel  00523A50             18FF28 7779DF 18FF4C 18FF54
                                                   777AAE 18FF4C
00782F15             CALLrel  007778D8             18FF70 782F49 18FF80 782D9C
                                                   782D9C 7FFDE000
76E56A12             CALLreg  00000000             7FFDE000 76E569F0 8264BCFC
                                                   18FFDC 772CAB2F 7FFDE000
772CAB2D             CALLreg  00000000             7FFDE000 83A7FBC8 0 0
                                                   7FFDE000 7FF9
772CAAF5             CALLrel  772CAB00             FFFFFFFF 772AFE31 0 0 782D9C
                                                   7FFDE000
00000000             CALL???  00000000

Call stack signature: 0xe5b8866a9ee1f71f



call stack performance statistics:
total                  : 0.469000 sec
setup                  : 0.078000 sec
stack unwind           : 0.000000 sec
symbol translation     : 0.032000 sec
printing the call stack: 0.343000 sec
printing frame data    : 0.000000 sec
printing argument data : 0.000000 sec
printing kernel stack  : 0.000000 sec


----- End of Call Stack Trace -----

Errors in file :
OCI-21500: Interner Fehlercode, Argumente: [kgepop: no error frame to pop to], [], [], [], [], [], [], []
OCI-21503: Programm durch schwerwiegenden Fehler beendet
OCI-04030: Zu wenig Prozessspeicher für Versuch 16336 Byte zuzuweisen (koh-kghu sessi,alloc lob locator)


----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
02A43917             CALLrel  02BF677A             18EA64 1 2A43570 2A439D0
                                                   2A43570 2A439D0
0429D617             CALLreg  00000000             397E20 3 208D330 0 4C0043
                                                   42004F
0429CB24             CALLrel  0429CF80             397E20 3A1A98 53FF
050165FE             CALLrel  0429CA90             397E20 520624C 5206240
04582455             CALLrel  04586AF0             397E20 FA0 A 1 2C558A0 0 0
0283D0B5             CALLrel  02BF6E10             397708 FA0 A 2C558A0 0 40
0283376A             CALLrel  0283A510             397708 18FC20 32 1 0 0 0 0
_OCIDescriptorAlloc  CALLptr  00000000             397708 18FC20 32 0 0
()+43
0073B4A0             CALLreg  00000000             397708 18FC20 32 0 0
007335C2             CALLreg  00000000             0 70B5AC 0 19 77AE79A6
                                                   77AE5C8C
00737B8B             CALL???  00000000             782E3D 20DA838 18FCF8 71A91D
                                                   79B9FFC0 0
0073831E             CALL???  00000000             18FE58 738AF2 18FE40 18FF48 0
                                                   782E3D
007364AC             CALLrel  00737F3C             112F0 20112F0 18FE84 65591B
                                                   18FE64 655928
0065591B             CALL???  00000000             18FE64 655928 18FE84 18FE8C
                                                   65596C 18FE84
00739DE0             CALL???  00000000             18FE98 739E25 18FEB8 18FEC0
                                                   739E36 18FEB8
0073A097             CALLrel  00739CBC             18FEDC 73A0B2 18FED4 0
                                                   20112F0 18FEEC
0073A36D             CALL???  00000000             18FF00 73A39B 18FEEC 20112F0
                                                   18FEF8 5E0310
005E0310             CALL???  00000000             208D330
00523A97             CALL???  00000000             18FF1C 523ADF 18FF14 782E3D
                                                   208D330 18FF4C
0077797C             CALLrel  00523A50             18FF28 7779DF 18FF4C 18FF54
                                                   777AAE 18FF4C
00782F15             CALLrel  007778D8             18FF70 782F49 18FF80 782D9C
                                                   782D9C 7FFDE000
76E56A12             CALLreg  00000000             7FFDE000 76E569F0 8264BCFC
                                                   18FFDC 772CAB2F 7FFDE000
772CAB2D             CALLreg  00000000             7FFDE000 83A7FBC8 0 0
                                                   7FFDE000 7FF9
772CAAF5             CALLrel  772CAB00             FFFFFFFF 772AFE31 0 0 782D9C
                                                   7FFDE000
00000000             CALL???  00000000

Call stack signature: 0xe5b8866a9ee1f71f



call stack performance statistics:
total                  : 0.531000 sec
setup                  : 0.109000 sec
stack unwind           : 0.000000 sec
symbol translation     : 0.031000 sec
printing the call stack: 0.360000 sec
printing frame data    : 0.000000 sec
printing argument data : 0.000000 sec
printing kernel stack  : 0.000000 sec


----- End of Call Stack Trace -----


MaximG
Devart Team
Posts: 1822
Joined: Mon 06 Jul 2015 11:34

Re: GUI program exits silently (32 bit, low RAM, LOB)

Post by MaximG » Fri 18 Jun 2021 11:38

Our investigation revealed that the issue on the Oracle side. There's no issue when you use the Direct mode which doesn't rely on the Oracle client.

Post Reply