Page 1 of 2 1 2 LastLast
Results 1 to 15 of 17

Thread: Geheugen gebruik

  1. #1
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579

    Geheugen gebruik

    Met behulp van de Oracle connection maak ik verbinding met een Oracle database. Vervolgens haal ik met een query tabelnamen op. Dit kost erg veel geheugen. Namelijk 1 GB. Bij een wat ingewikkeldere query is het geheugengebruik zo groot dat Win xp het opgeeft. (>2 GB).
    Hoe kan ik het geheugen gebruik beperken bij het gebruik van een query?

  2. #2
    Kan het zijn dat je heel veel data probeert op te halen?

    Draait Oracle dan op dezelfde machine, of heb je die op een server staan?

  3. #3
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Het zijn maar een paar honderd regels (< 1000) bestaande uit 2 kolommen.

    Op de xp machine staat een Oracle client. De database zelf staat op een server.

  4. #4
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Dit kom ik tegen op wiki (Ik krijg een out of memory melding).
    Helaas geeft dat de volgende melding: "Operation cannot be performed on an unidirectional dataset".




    wiki:

    Out of memory errors

    TSQLQuery is a descendant of BufDataset, a dataset that buffers the data it receives into memory. If you retrieve a lot of records (e.g. when looping through them for an export), your heap memory may become full (with records you already looped through) and you will get out of memory errors.

    A solution is to tell bufdataset to discard the records you have already read by setting the Unidirectional property to true before opening the query:

  5. #5
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Quote Originally Posted by Hansvb View Post
    de volgende melding: "Operation cannot be performed on an unidirectional dataset"
    Dit klinkt niet als een geheugen probleem.
    Probeer je soms te schrijven naar een uit verschillende tabellen op een samengestelde query?
    Tja en dat gaat meestal niet zo.

    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  6. #6
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Nee, het is een heel eenvoudige select statement dat 2 attributen uit 1 tabel opvraagt. Met als resultaat minder dan 500 records.

  7. #7
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    als ik het goed lees op http://forum.lazarus.freepascal.org dan loop ik tegen een bug aan.

  8. #8
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Heeft iemand nog een tip? Een odbc connectie zie ik niet zitten. Dan ben ik afhankelijk van de op de pc aangemaakte odbc connecties. Daar mag een reguliere gebruiker vaak niet bijkomen.

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Bart, ik heb het even getest met een firebird embedded. Een tabel met twee velden aangemaakt en even 4000 records ingezet.
    Daarna, zonder disablecontrols, de tabel gelezen. Dat ging in een rap tempo. Ik kon niet lezen hoeveel geheugen er werd gebruikt (kan niet de procedure vinden die dat voor mij uitrekent). Dit heb ik getest op een Windows Vista, lazarus build 1.0.12, SQLdb componenten

  10. #10
    Quote Originally Posted by Hansvb View Post
    Nee, het is een heel eenvoudige select statement dat 2 attributen uit 1 tabel opvraagt. Met als resultaat minder dan 500 records.
    maar je foutmelding "Operation cannot be performed on an unidirectional dataset" komt niet door die select die je doet maar een actie daarna gok ik. Als die andere actie verantwoordelijk is voor de foutmelding weet je dan ook zeker dat diezelfde actie niet verantwoordelijk is voor het geheugen beslag?

  11. #11
    Quote Originally Posted by Hansvb View Post
    Heeft iemand nog een tip? Een odbc connectie zie ik niet zitten. Dan ben ik afhankelijk van de op de pc aangemaakte odbc connecties. Daar mag een reguliere gebruiker vaak niet bijkomen.
    Denk ook dat je meer doet dan een select. Als ik het me goed herinner kan bijv een dbgrid niet met unidrectional overweg dus dat gaat niet werken.

    Welke versie van Oracle? Welke client lib? Misschien beste om bug aan te maken met demoprogramma incl Oracle DDL? Kunnen we (tzt - ben zelf wschl druk binnenkort alsmede niet zo'n guru) kijken of het ook in FPC trunk+Lazarus voorkomt en of het op te lossen valt...

  12. #12
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Niet zo bescheiden BigChimp, je bent een guru tegenwoordig :-)

  13. #13


    <bloost & kruipt stilletjes in hoek>

  14. #14
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Ik heb een eenvoudig vergelijk gemaakt.

    Een leeg Form aangemaakt. Zeos Lib aan lazarus toegevoegd en vervolgens het zeos connection component en het sqlquery component op een form gezet.
    3 edit boxen voor de benodigde inloggegevens en een knop die connectie maakt met de database. En tot slot een knop met een sql statement.
    Resultaat: --> in taakbeheer wordt iets van 36 mb geheugen gebruik getoond tijdens de uitvoering van de query.

    Op hetzelfde form de oracle connection , transaction en sqlquery component van lazarus gezet.
    Ook weer wat edit boxen voor de inloggegevens en een knop voor connectie en uitvoer van dezelfde sql statement. --> in taakbeheer wordt iets van 1,8 GB geheugen gebruik getoond tijdens de uitvoering van de query.
    Dus een verschil van dag en nacht.

    Ik ga mijn progje ombouwen zodat het gebruik gaat maken van zeos database componenten voor wat betreft de Oracle connectie en sql uitvragen.
    Zeos kent helaas weer geen optie om met access te verbinden. Maar dat kunnen de lazarus componenten weer goed.

    Wellicht wil iemand dit toetsen hier? En, mocht ik gelijk hebben, hoe maak je een nette bug melding aan?

  15. #15
    http://wiki.lazarus.freepascal.org/D..._bug_reporting
    http://wiki.lazarus.freepascal.org/T...ng_bug_reports

    Svp inclusief Oracle DDL, gebruikte oracle server, client versie, OSen.

    Alvast bedankt.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •