On Sat, Nov 5, 2011 at 2:56 PM, swamir <sw...@infineta.com> wrote:

>
> Hi,
>    Using sqlite version 3.6.x, so WAL mode not available. Need to see if i
> need to upgrade to 3.7.x.
>
> By the way, in WAL mode, i understand that whenever the WAL file reaches
> 1000 page of changes(which is the default), only then checkpoint/write
> happens to the real database file . How will it handle when system is
> restarted while transaction is in progress ?
>

If an incomplete transaction is partially written to the WAL file prior to
a crash, then after the crash, the incomplete transaction is simply
ignored.  The has the effect of rolling back the incomplete transaction.


>
>
> Regards
> swami
>
>
> Jean-Christophe Deschamps-3 wrote:
> >
> >
> >>Is there a good practice /setting for such high rate of concurrent writes
> >>with reads ?
> >>I understand that multiple readers with single writer at any time t is
> the
> >>model which sqlite has with various locks/states (unlocked, pending ,
> >>shared
> >>, reserved , exclusive).
> >
> > "with" is a bit unclear.
> >
> > To clarify, unless you're using WAL mode, there in no actual
> > concurrency in SQLite.
> > Quoting Richard Hipp who recently wrote:
> >
> >>(1) You only have to set WAL mode once for the database. The database
> >>remembers that it is in WAL mode and all subsequent opens bring it back
> up
> >>in WAL mode again (until you deliberately change it out of WAL mode.) You
> >>do *not* have to set WAL mode every time you open the database file.
> >>
> >>(2) WAL really does give better concurrency since it allows other
> >>processes
> >>to continue reading while a single process is writing to the database. In
> >>rollback mode you can have one writer *or* multiple readers. In WAL mode
> >>you can have one writer *and* multiple readers. On a busy system, or in a
> >>system with long-running transactions, the difference can be significant.
> >>
> >>(3) Transactions commit a lot faster with WAL. Depending on your app, you
> >>might see a measurable performance improvement just by switching to WAL.
> >>
> >>(4) WAL mode is much more resistant to corruption following a power
> >>failure
> >>that occurs soon after the disk drive lied and said that content was
> >>committed to oxide when in fact it was still in a volatile track buffer.
> >>And pretty much all consumer-grade disk drives tell such lies these days.
> >
> > The part relevant to you is in (2).
> >    rollback mode: 1 writer OR  many readers
> >    WAL mode:      1 writer AND many readers
> >
> >>Will a busy_timeout setting for all connections and making write
> >>transactions as "begin immediate"  handle the situation ?
> >
> > Yes, try using the same timeout for _all_ conections and always use
> > IMMEDIATE transactions for RMW (Read Modify Write) SQL blocks, just
> > BEGIN for read-only SQL blocks and autocommit for stand-alone statements.
> >
> > You have to decide on the value of the timeout, and the ideal value in
> > rollback mode is NOT the time it takes for the worst case transaction
> > plus some margin.
> >
> > To see why look at how SQLite behaves when your transaction (A) is
> > locked by a blocking transaction (B): it retries internally a certain
> > number of times for a short period, then puts (A) to sleep for a
> > while.  During this short sleep (B) may terminate and another blocking
> > transaction (C) may proceed.  When (A) gets out of sleep it still sees
> > the DB locked (this time by (C) not by (B) but noone notices).  This
> > ends with either: the longest sequence of the worst-case transactions
> > terminates and your (A) proceeds normally OR your timeout expires and
> > you get "DB locked".
> >
> > WAL dramatically simplifies this that since readers can by concurrent
> > to one writer: the right timeout is actually the worst-case write
> > transaction plus some margin.
> >
> > I've been using this setup (with 10 minutes timeout, that's close to
> > forever!) for years in my business-type applications and never got any
> > issue.  (I'm currently switching to WAL mode.)
> >
> > Please someone corrects me if this doesn't reflect SQLite current
> > behavior anymore.
> >
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> >
>
> --
> View this message in context:
> http://old.nabble.com/concurrent-writes-and-reads-to--from-DB-tp32784852p32787541.html
> Sent from the SQLite mailing list archive at Nabble.com.
>
> _______________________________________________
> 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