2017-01-16 4 views
0

Ich habe eine einfache C# -Anwendung CSV-Dateien in eine SQLite-Datenbank lesen.SQLite läuft nicht mehr, ohne Ausnahme auszulösen

Wenn die Daten gelesen wurden (die Datenbankdatei ist zu diesem Zeitpunkt ungefähr 5 GB groß), erstelle ich einen Index für die einzelne Tabelle, die alle Daten enthält.

CREATE INDEX index_name ON table_name(col_a, col_b ASC) 

Ich kann dann die folgende Fehlermeldung in der Visual Studio-Debug-Ausgabefenster:

SQLite error (6154): os_win.c:41445: (8) winMapfile2() - Not enough storage is available to process this command. 

Die Fehlermeldung wiederholt sich ein paar hundert Mal während ein paar Sekunden, während der Index erstellt wird.

The SQLite documentation sagt der folgende:

(6154) SQLITE_IOERR_MMAP
Der SQLITE_IOERR_MMAP Fehlercode ist ein erweiterten Fehlercode für SQLITE_IOERR angibt, einen E/A-Fehler innerhalb die xFetch oder xUnfetch Methoden auf dem sqlite3_io_methods Objekt während versucht, einen Teil der Datenbankdatei in den Prozess Adressraum zuordnen oder auflösen.

Meine Festplatte hat noch ca. 30GB links, wird der Prozess nur über 300 MB Speicher verwendet, während der Befehl ausgeführt wird, und es gibt mindestens 30% verfügbaren physischen Speicher auf dem Computer, so dass ich bin mir nicht sicher, warum es passiert überhaupt.

Es werden keine Ausnahmen ausgelöst, es wird nur auf die Debug-Konsole gedruckt. Der Index scheint in der Datenbank ordnungsgemäß erstellt worden zu sein. Bedeutet das, dass die Fehlermeldung nicht schädlich ist? Kann ich es ignorieren? Kann ich eine tatsächliche Ausnahme auslösen, wenn etwas schief geht? Ich finde es irgendwie beängstigend, dass meine Datenbanken beschädigt sein können.

Antwort

0

MMAP ist nur eine Optimierung. Wenn dies fehlschlägt, verwendet SQLite wieder normale FileRead() Aufrufe.

Dass Sie nicht genügend Adressraum haben, um eine 5-GB-Datei zuzuordnen, ist wahrscheinlich auf Ihrem Computer in Ordnung.

+0

Großartig, nur die Informationen, die ich brauchte. Vielen Dank! –

Verwandte Themen