> According to documents, sqlite_busy will happen if new reader cannot get
> shared_lock or new writer cannot get reserved_lock.
> I didn't see sqlite_busy error from my application.

I didn't understand this. "database is locked" is SQLITE_BUSY.

> Does this mean I need to close the current database connection before I can
> make the next connection to same database file even through they are not
> shared?

No, you can have several connections in one thread if you want.

> Though it is not shared, it seems there may be cases where more
> than 1 database connections are held (in nested function calls). Will this
> cause any issue?

This can definitely be the issue. Consider this scenario:
- open connection 1;
- start executing some query on connection 1 - call sqlite3_step() but
it didn't return SQLITE_DONE yet;
- open connection 2;
- execute some update/insert/delete on connection 2

In this case you have active statement on connection 1 that holds
SHARED lock on the database. And it will prevent any other connections
from writing. So connection 2 cannot obtain EXCLUSIVE lock, you get
SQLITE_BUSY without any chances to succeed.


Pavel

On Wed, Mar 17, 2010 at 1:35 PM, imin imup <imini...@gmail.com> wrote:
> Thanks for help. As a novel sqlite user, it seems I need more.
>
> According to documents, sqlite_busy will happen if new reader cannot get
> shared_lock or new writer cannot get reserved_lock.
> I didn't see sqlite_busy error from my application.
>
> My usage is that:
> single process, multi-thread, multi-database files
>
> multi-database files
> I divided the tables into 2 database files to "increase" concurrency. A
> thread may open two database file at same time, but two database never
> appear in one sql statement. Is this likely to cause any issue?
>
> about "one connection per thread"
> Does this mean I need to close the current database connection before I can
> make the next connection to same database file even through they are not
> shared?
> I tend to use short-lived database connections locally defined within each
> function. Though it is not shared, it seems there may be cases where more
> than 1 database connections are held (in nested function calls). Will this
> cause any issue?
>
> On Wed, Mar 17, 2010 at 11:05 AM, Pavel Ivanov <paiva...@gmail.com> wrote:
>
>> http://www.sqlite.org/faq.html#q5
>> http://www.sqlite.org/lockingv3.html
>>
>> Pavel
>>
>> On Wed, Mar 17, 2010 at 11:46 AM, imin imup <imini...@gmail.com> wrote:
>> > Hello users,
>> >
>> > I'm using sqlite 3.6.12 in muti-threaded application. I'm getting sqlite
>> > errors occasionally.
>> > The error message is
>> >
>> > *sqlite error: database is locked*
>> >
>> > could someone explain to me what happened and what to be done? or point
>> me
>> > to a document on how to fix this?
>> >
>> > Best
>> >
>> > Imin
>> > _______________________________________________
>> > 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