Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird List sort error: not enough memory (https://www.delphipraxis.net/171849-firebird-list-sort-error-not-enough-memory.html)

dataspider 28. Nov 2012 11:54

Datenbank: Firebird • Version: 2.13 • Zugriff über: IBO

Firebird List sort error: not enough memory
 
Hallo,

kann es sein, dass in Firebird LIST noch fehlerhaft ist.
Ich habe in einer View eine Spalte, welche mir zu einer Adresse alle Nummern (Kunde, Lieferant etc.) als VARCHAR liefert.

(select result from sp_partnernummern(a.adresse_id))

Code:
create or alter procedure sp_partnernummern (
    adresse_id integer$)
returns (
    result sys_varchar_255)
as
begin
  select substring(list(nummer) from 1 for 255) from sp_partner_zu_adresse$(:adresse_id)
         into :result;
  suspend;
end
wenn ich jetzt eine Abfrage mache:
select * from view_adresse a where a.partner_nummern containing '102768' or a.partner_nummern containing '192733' or a.partner_nummern containing '111795'

so steigt der Speicherverbrauch von Firebird bis zum Crash an (hier um ca. 1,5 GB)
Mit jerder zusätzlichen Nummer steigt auch der Verbrauch.

Jetzt habe ich die Procedure umgeschrieben:

Code:
create or alter procedure sp_partnernummern$ (
    adresse_id integer$)
returns (
    result sys_varchar_255)
as
declare variable nummer sys_nummer_null;
begin
  result = null;
  for select nummer from sp_partner_zu_adresse$(:adresse_id) order by nummer
      into :nummer do
  begin
    if (coalesce(:nummer, '') <> '') then
      if (:result is null) then
        result = :nummer;
      else
        result = :result||','||:nummer;
  end
  suspend;
end
Kaum noch erhöhter Speicherverbrauch (ca. 40 kB)

Sollte man LIST jetzt lieber nicht benutzen?
Kennt jemand das Problem und kann bestenfalls auch sagen, dass das schon bekannt ist?
Ich habe bei meiner Suche in der Trrackinglist von FB noch nichts gefunden.


Frank

tsteinmaurer 28. Nov 2012 14:29

AW: Firebird List sort error: not enough memory
 
Das hängt vermutlich mit den angelegten temporären BLOBs zusammen, da ja LIST als Rückgabewert einen BLOB liefert und wenn dann darauf ein SUBSTRING erfolgt, ist ein temporärer BLOB notwendig. Es gibt dazu ein paar Einträge im Tracker. In deinem zweiten Beispiel ist kein BLOB, sondern max. ein VARCHAR(255) mit im Spiel, darum dürfte dort auch das Problem nicht auftreten.

Welche Firebird Version setzt du exakt ein? Es gab doch den einen oder anderen Bugfix zu den temporären BLOBs in den unterschiedlichen Releases.

dataspider 28. Nov 2012 14:47

AW: Firebird List sort error: not enough memory
 
Zitat:

Zitat von tsteinmaurer (Beitrag 1193426)
Welche Firebird Version setzt du exakt ein? Es gab doch den einen oder anderen Bugfix zu den temporären BLOBs in den unterschiedlichen Releases.

2.1.3.18185 32-bit

Ich werde es auch mit einer neueren Version testen und berichten.

[EDIT]
Ich habe die 2.13 durch die 2.15 manuell ersetzt.
Jetzt werden ca. 40 kB Speicher verbraucht.
Also sollte ich wohl auch beim Kunden die Version erneuern!

Vielen Dank, Thomas.
[/EDIT]

Frank

tsteinmaurer 28. Nov 2012 14:59

AW: Firebird List sort error: not enough memory
 
Wennst auf der 2.1er Linie bleiben mußt, dann versuche 2.1.5, weil dort z.B. http://tracker.firebirdsql.org/browse/CORE-1658 gefixt ist, was in direktem Zusammenhang mit deinem Problem stehen könnte.

Edit: Oops, zu spät. ;-)

dataspider 28. Nov 2012 19:15

AW: Firebird List sort error: not enough memory
 
Zitat:

Zitat von tsteinmaurer (Beitrag 1193438)
Wennst auf der 2.1er Linie bleiben mußt...

...ich habe jetzt auch den Kundenserver auf 2.15 geupdatet und nach meinen Tests ist nun alles OK.
Ich muss nicht auf 2.1x bleiben, mir war der Aufwand nur etwas zu hoch bis jetzt.
Obwohl der Kunde schon Vorteile hätte, er hat mehrere Datenbanken - und da kann wohl FB 2.5 schon SMP - Feeling andeuten.
Na ja, vielleicht zwischen Wihnachten uns Sylvester...

Vielen Dank noch einmal!

Frank

tsteinmaurer 28. Nov 2012 19:26

AW: Firebird List sort error: not enough memory
 
SMP-Feeling gibt es mit Classic auch schon unter 2.1.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz