AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQLite 3 Out of Memory

Ein Thema von Monday · begonnen am 19. Mai 2020 · letzter Beitrag vom 21. Mai 2020
Antwort Antwort
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: SQLite 3 Out of Memory

  Alt 20. Mai 2020, 10:13
Die Datenbank liegt auf Laufwerk D (mehrere GB frei). Auf Laufwerk C habe ich fast keinen freien Speicherplatz mehr (ein paar Hundert). Sodass ein neuerstellen auf Laufwerk C nicht geht und "Out of Memory" zwangsläufig kommen muss.
Hast Du probiert bei VACUUM mit INTO die Ziel datei anzugeben?
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#2

AW: SQLite 3 Out of Memory

  Alt 21. Mai 2020, 11:09
Hallo

Ich habe jetzt etwas herumgetüfftelt.

Zuerst hatte ich das Windows Temp Verzeichnis geändert. Das war wirkungslos.

Danach habe ich PRAGMA temp_store_directory = 'D:\...'; gesetzt. Auch das blieb wirkungslos.
Ich hatte allerdings dazu einen SQL Editor (SQLStudio) verwendet und auch über die Anwendung versucht. Bei beiden hat er trotzdem vacuum auf Laufwerk C angewendet.

Erst nachdem ich über die SQL Shell gegangen bin hat er das Verzeichnis angenommen!
Dann lief auch Vacuum schön und in aller Kürze durch. Die DB war nach vacuum um 90 % kleiner!
Sollte mal der Festplattenspeicher nicht ausreichen, ist es also denkbar einen USB Stick oder externe Festplatte dran zu hängen und dann über den Festplattenspeicher zu bewerkstelligen. Habe gesehen, man kann auch einstellen dass es rein über den Arbeitsspeicher geht. Wenn die SQL Datei klein genug ist, wäre es sogar denkbar es komplett über den Arbeitsspeicher zu machen. Man muss daran denken, dass er aber immer die komplette Datei laden will.


Da ich schon fast die Hoffnung aufgegeben hatte, wollte ich eine neue DB erstellen. Und die Daten mittels export/import neu erstellen. Mit dem SQLStudio und SQL Administrator lief der export/import schleppend langsam. Mit der SQL Shell lief es rasent schnell durch.
Spontan würde ich sagen, wenn man große DB über 100 MB hat, ist es wohl am schnellsten wenn man immer über die Shell arbeitet.

Eine SQlite Shell GUI wäre noch nice.

Indizes erstellt er offenbar immer über Laufwerk C. Allein über die Shell wenn ich mit PRAGMA temp_store_directory = 'D:\...'; nimmt er das Laufwerk an. Ich hatte gehofft, einmal temp_store_directory zu setzen und dann ist es standartmäßig. Aber das muss ich wohl immer setzen, wenn ich es brauche.


Ich hatte auch in der Doku nachgesehen wo die Grenzen und Limits liegen; Weil ich dachte das es hier limits gibt. Ich habe gesehen SQL kann durchaus mit 3-4 stelligen Terabyte umgehen.

LG
Monday
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#3

AW: SQLite 3 Out of Memory

  Alt 21. Mai 2020, 12:00
Du beschreibst zwar, was Du gemacht hast, aber Du beschreibst leider nicht, wie Du es gemacht hast.

Hast Du sowas in der Art gemacht:
Delphi-Quellcode:
SetEnvironmentVariable('SQLITE_TMPDIR','D:\Temp\');
SetEnvironmentVariable('TEMP','D:\Temp\');
SetEnvironmentVariable('TMP','D:\Temp\');
// oder sowas?
SetEnvironmentVariable('SQLITE_TMPDIR',ExtractFilePath(Application.ExeName));
SetEnvironmentVariable('TEMP',ExtractFilePath(Application.ExeName));
SetEnvironmentVariable('TMP',ExtractFilePath(Application.ExeName));
// oder sowas?
ZConnection1.Open;
ZConnection1.ExecuteDirect('PRAGMA temp_store_directory=D:\temp\');
Dann hat die TZConnection noch die Eigenschaft Properties, über die verschiedene Parameter an die Datenbank übergeben werden können, eventuell so:

ZConnection1.Properties.Add('temp_store_directory=D:\temp\');

Da ich SQLite noch nie aus Delphi heraus wirklich ernsthaft genutzt habe, kann ich nicht sagen, ob davon was im "realen Leben" funktioniert, aber eventuell so als Idee?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQLite 3 Out of Memory

  Alt 21. Mai 2020, 12:27
Hallo,
Änderungen werden in der Regel erst nach dem Neuanmelden oder sqlite-Neustart wirksam.
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#5

AW: SQLite 3 Out of Memory

  Alt 21. Mai 2020, 12:35
Oder man setzt Umgebungsvariabeln ... im eigenen Programm vor dem Öffnen der Datenbankverbindung.

Wenn ich das recht sehe, werden die Properties der TZConnection beim Verbinden mit der Datenbank gesetzt.
Wenn das kein günstiger Zeitpunkt ist, weiß ich es nicht.

Für einige meiner Programme setzte ich Temp ... beim Programmstart. Das hat die gleiche Wirkung, wie das Setzen dieser Variabeln über die Windowsoberfläche (und ggfls.'ne neue Anmeldung).

Ein weiterer Vorteil: Die Änderungen beim Programmstart gilt nur für das Programm.
Damit hat man keine negativen Auswirkungen auf andere Programme abzuwägen und muss die Änderungen auch nicht jeweils vor dem Programmstart systemweit durchführen und nach dem Programmende wieder rückgängig machen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz