> Thanks!  I ran the example code and it seems like every UPDATE fails
> with errors like the following:
>
> SqlStep Timeout on handle: 8 (rc = 6)
> SqlStep tries on handle 8: 200
> BeginTrans Timeout/Error on handle:  8, Errorcode = 6
> Write Thread: DB is busy! tries = 142 handle = 8
>
> Looking at the database contents it looks like none of the updates
> were successful at all (though I didn't look extremely carefully).
>
> Are these errors normal?

A moderate number of timeout messages is "normal", they where
also added to understand better how much load the sqlite db
can handle using a multi thread application.

However, this example was running with allmost no final error messages
like "DB is busy! tries = 142", at least when I did it some month
ago. The 142 tries means that the DB was busy for more than 1420 sec.
I can't remeber that I achieved this, at least not with only two
writer threads.

You may reduce the number of writer threads by one using:

#define NUM_WRITE_THREADS  1

If that still gives you an endless number of the above
timeout messages then something is definetly wrong in your
system.

Please be aware also of:

a) This exe is assumed to be the only instance running
   on a system.

b) I'm still confident that the loop-redo style of
   the busy handling is one way to do it but the
   sqlite developers included a more clever approach
   using an notifier to handle this:
   http://www.sqlite.org/unlock_notify.html
   Havent tried this, though.

c) Maybe a virus scanner is interfering here ?

d) Maybe your system is slow ? :-)

Marcus

PS: Does anybody know how I can edit this
example code ? I recently attempted to add a clear
PD statement and also add some comments but when
I try to edit I allways end up in the wiki index page...

>
> On Tue, Oct 27, 2009 at 12:55 AM, Marcus Grimm <mgr...@medcom-online.de>
> wrote:
>>> Another odd thing is that when I call sqlite3_reset on the prepared
>>> statement, it also returns SQLITE_BUSY.  Should I only reset the
>>> statement when it has been executed successfully?
>>
>> one possible approach when getting SQLITE_BUSY is to
>> retry the sqlite3_step call until it finally gets thru.
>>
>> note that sqlite3_reset just returns the same error
>> code as the previous sqlite3_step call.
>>
>> attachments don't work on the list, you will need
>> find another way to provide your example code.
>>
>> you may also take a look at
>> http://www.sqlite.org/cvstrac/wiki?p=SampleCode
>> for the busy handling.
>>
>> hth
>>
>> Marcus Grimm
>>
>>>
>>> On Mon, Oct 26, 2009 at 2:40 PM, Chris T <citrus...@gmail.com> wrote:
>>>> I'm new to sqlite (and sql in general, actually) and came across
>>>> something puzzling.
>>>>
>>>> I wrote a test program statically linked with the amalgamated sqlite
>>>> code.  When I run a single instance, everything is fine.  When I start
>>>> a second instance in the same directory they both deadlock.  Every
>>>> call to sqlite3_step returns SQLITE_BUSY.
>>>>
>>>> The source code to my test program is attached.  It was written in
>>>> Visual Studio, so feel free to remove the reference to windows.h and
>>>> change the calls to Sleep( ) if you don't use Windows.
>>>>
>>> _______________________________________________
>>> 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
>>
> _______________________________________________
> 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

Reply via email to