Hello Andrew,

I'm a little confused about the precompiled SQL.  According to Wiki, there
should be something like sqlite_bind() that I can use.  However, I can't
find sqlite_bind() in my sqlite source ...

I'll try the sqlite_create_function().  Thanks.

Regards,

Arthur

----- Original Message ----- 
From: "Andrew Shakinovsky" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 14, 2003 7:24 AM
Subject: RE: [sqlite] Performance tuning question


> Arthur,
> For pre-compiled execution in SQLite, try using the sqlite_reset()
function.
> It allows you to avoid having to re-compile your SQL every time you
execute
> it. You can use sqlite_create_function() to do the equivalent of
> "parameterized" queries by creating a function which takes a parameter
> position and and returns the parameter value.
> I use this a lot in my code since I do a lot of inserts and want them to
run
> fast without invoking the query compiler for each one.
>
>
> -----Original Message-----
> From: Arthur C. Hsu [mailto:[EMAIL PROTECTED]
> Sent: Friday, November 14, 2003 3:50 AM
> To: 'Greg Obleshchuk'; [EMAIL PROTECTED]
> Subject: RE: [sqlite] Performance tuning question
>
>
> Hello Greg,
>
> The insert is not in transaction.  I do the insert and update like
>
> CCriticalSection cs;
>
> void CDB::insert()
> {
> cs.Lock();
> sqlite_exec_printf(pDB, "insert into db values(%d, %q, null, null,
> 0, null", 0, 0, 1, "A");
> cs.Unlock();
> }
>
> void CDB::update()
> {
> cs.Lock();
> sqlite_exec_printf(pDB, "update db set str=%q where id=%d", 0, 0,
> "A", 1);
> cs.Unlock();
> }
>
> As described in my previous mail, I have two threads that simultaneously
> accessing this in-mem DB.  Thus I have to use locks to be sure of
> thread-safety.  I keep pumping data into DB via insert from one thread.
My
> sqlite version is 2.8.6 and I didn't compile it with -DTHREAD_SAFE=1.
>
> I have 1G bytes of memory in my development machine and it's hard to
believe
> that I didn't have enough memory for a 50M database :)
>
> I use MDAC via .Net framework.  I use ADO.Net in-memory table
> (System.Data.DataTable) and does not connect to any data source.
>
> BTW, I use Intel VTune and try to find out the bottleneck of my program.
> Execution of sqlite vbe is the most time-consuming (55%).  However,
yyparser
> of sqlite contributes 30% of load.  I tend to believe this explains why
the
> first 30 seconds the ADO.Net is faster than sqlite.  SQL statements in
> ADO.Net always run precompiled, thus it saves time for parsing SQL
commands.
> I'm trying to do precompiled execution in sqlite, and getting frustrated
> about that.
>
> The decaying phoenomenon is quite weird.  My wild guesses are
>
> A. Issues of memory indexing: page index table grows bigger and bigger,
thus
> indirection of memory tends to slow down B. SQLite try to do "safe" memory
> allocations, that is, malloc new memory block, memcpy old data, then free
> old memory block.
>
> These are just guesses.  I'm trying to dig out why.  Maybe you guys who
are
> more familiar with sqlite internals can show me the answer :)
>
> Regards,
>
> Arthur
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to