On Thu, Sep 2, 2010 at 9:59 AM, Marcus Grimm <mgr...@medcom-online.de>wrote:

>
> Michele Pradella wrote:
> >   ok, I'll wait for the walk around.
> > I always use a BEGIN; COMMIT; transaction but often, after a COMMIT; the
> > -wal file does not change in size, it seams it's not checkponted.
> > Anyway do you think that with WAL journal mode I should continue to use
> > BEGIN; COMMIT; statement? or not?
>
> as Richard mentioned, the wal mode is not intended to work well
> for bulk-insert kind of actions. You may try to split your insert
> cycles into smaller pieces.
>
> However, that might not help if you do sql statements which involve
> a huge implicit transaction, for example "CREATE INDEX .." on a huge table.
> At least on windows it can fail with IO error on a GB sized db.
>

We are working on that problem.  In the meantime, your workaround is to
switch to journal_mode=DELETE before creating large indices.


>
> Btw, I think the wal file doesn't shrink because sqlite doesn't truncate
> that file after completing the checkpoint. That's by design I guess.
>

Correct.  The -wal file is deleted when the last connection to the database
is closed.  But prior to that, the WAL file is kept open and is not
truncated.  This is a performance optimization.  Most filesystems are faster
at overwriting an existing file than they are at appending to the end of a
file.  (Note the qualifier "Most" in the previous sentence.  There are
exceptions to the rule.  We try to optimize for the common case.)


>
> Marcus
>
>
>
> >
> >
> > Il 02/09/2010 14.43, Richard Hipp ha scritto:
> >> On Thu, Sep 2, 2010 at 8:34 AM, Michele Pradella<
> michele.prade...@selea.com
> >>> wrote:
> >>>   Hi,
> >>> I found a strange behavior of the sqlite 3.7.2 with WAL journal mode.
> >>> Yesterday I found my application DB with a -wal file of 1,5GB and a
> -shm
> >>> file of few MB (about 9MB) with a DB file of 1,2GB: in this
> >>> situation I got the process memory wasted by "mapped file" of the -shm
> >>> file. It seams that the file is mapped a lot of times in memory so the
> >>> process memory become 2GB and it can't allocate more memory. In that
> >>> situation operation made on the DB cause I/O disk errors probably due
> to
> >>> the wasted memory.
> >>>
> >> By coincidence, the SQLite developers were just discussing this problem
> >> earlier this morning.  There are technical issues with windows that make
> a
> >> solution difficult.  We are trying to come up with a work-around.  (The
> >> problem you describe is specific to the windows backend and does not
> come up
> >> in unix.)
> >>
> >>
> >>> I'm doing some other test to reproduce the problem, but I think that
> >>> could be when I got a lot of operation between a BEGIN; COMMIT;
> >>> So is it ok to use the BEGIN; COMMIT; with the WAL journal activated?
> >>> is there some kind of limit in the number of operation between a BEGIN;
> >>> COMMIT; statement?
> >>>
> >> SQLite will not checkpoint the journal until you commit your
> transaction.
> >> So if you leave the transaction open too long, the WAL file and the -shm
> >> file will grow excessively large.  WAL works best with many smaller
> >> transactions.  If you have one or two big transactions, then using a
> >> traditional rollback-journal mode works better.
> >>
> >>
> >>
> >>> I try to use the PRAGMA wal_checkpoint; to try resolve this situation,
> >>> but seams that command was ignored by sqlite because the -wal file does
> >>> not change in size, even the DB file.
> >>> _______________________________________________
> >>> sqlite-users mailing list
> >>> sqlite-users@sqlite.org
> >>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >>>
> >>
> >
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to