ODBC Einstellung: "Use Declare/Fetch"

Alle Fragen und Probleme zu den externen Schnittstellen wie ODBC, JDBC, ...
Antworten
ipConfig
Erfahrener Benutzer
Beiträge: 125
Registriert: Mi 21. Feb 2007, 10:12
Wohnort: 56072 Koblenz

ODBC Einstellung: "Use Declare/Fetch"

Beitrag von ipConfig » Do 4. Jun 2009, 16:44

Hallo,

Ich habe das Problem einer "Out of Memory-Meldung":
PostgreSQL:7Out of memory while reading tuples.; Error while executing the query


Eine Suche hat ergeben, dass es mit einer Einstellung im ODBC-Treiber zu tun hat. Siehe auch: Re: [INTERFACES] psqlODBC/MS Access "Out of memory error (#1)"

Jetzt meine Frage: Die ODBC-Doku sagt folgendes:
Use Declare/Fetch: If true, the driver automatically uses declare cursor/fetch to handle SELECT statements and keeps 100 rows in a cache. This is mostly a great advantage, especially if you are only interested in reading and not updating. It results in the driver not sucking down lots of memory to buffer the entire result set. If set to false, cursors will not be used and the driver will retrieve the entire result set. For very large tables, this is very inefficient and may use up all the Windows memory/resources. However, it may handle updates better since the tables are not kept open, as they are when using cursors. This was the style of the old podbc32 driver. However, the behavior of the memory allocation is much improved so even when not using cursors, performance should at least be better than the old podbc32.


bzw.

Cache Size:When using cursors, this is the row size of the tuple cache. If not using cursors, this is how many tuples to allocate memory for at any given time. The default is 100 rows for either case.


Bishere hatte ich "Use Declare/Fetch" ausgeschaltet und bei "Cache Size" eine 20000 eingetragen...

Nachdem ich jetzt "Use Declare/Fetch" = 1 und "Cache Size" = 100 eingetragen habe, kommt die Fehlermeldung nicht mehr!

Was sind denn jetzt die Nebenwirkungen im gegensatz zu meinen vorherigen Einstellungen?
Habe ich im Speicher jetzt nur noch Platz für 100 tupels? (Tupels ist doch = Spalte oder?)
Was ist gemeint mit: "random-access to tuples" (wird in dem text aus dem Link erwähnt)
Was bedeutet aus der Doku das folgende: "...This is mostly a great advantage, especially if you are only interested in reading and not updating..." ? Mit meinem Programm werden auch updates gemacht.
etwa: Laden von 120 Datensätzen. Einen rauspicken. Ändern. Speichern. den nächsten Datensatz ändern, speichern usw...
Was ist "row size of the tuple cache"? Wieviel Zeichen eine Zeile in einer Spalte haben darf???

Antworten