Are there any other processes or threads trying to open your db file while
you run your tests?
On Mon, Jun 23, 2008 at 9:48 AM, Andrea Connell <[EMAIL PROTECTED]>
wrote:
>
>
> >> The program took 47 seconds to run, but the results only account for
> >> .39 seconds
> >
> > Most likely all the time is being spent in IO related system calls
> > - read(), write() and fsync().
> >
> > Dan.
>
>
> Thanks for the idea Dan. How can I confirm this or try reducing the time
> spent? I use the same method for reading my input file when I run both
> SQLite and our in house system, and the other way only takes 4 seconds
> total so I don't think it could be from that. Also, when I run our in
> house system and use the profiler the time spent adds up to 100%
>
> So this must be something within SQLite. I am using a transaction for my
> queries. How can I find all of that missing time?
>
>
> If anybody is interested, here is my main chunk of code. ReadLine()
> parses the input file and fills the required variables. This method is
> shared for both database systems (SQLite and ours). ReadSQLiteComponent
> just calls one of the sqlite3_column functions based on the type of the
> field, and a similar method is used for our system.
>
>
> std::ifstream inf(argv[1]);
>
> sqlite3 *db;
> sqlite3_stmt *stmt;
> sqlite3_stmt *stmt2;
> sqlite3_stmt *stmt3;
> int rc = sqlite3_open(argv[3], &db);
> if( rc )
> {
> printf("Can't open database: %s\n",
> sqlite3_errmsg(db));
> sqlite3_close(db);
> return -1;
> }
> sqlite3_prepare(db,"BEGIN TRANSACTION;", 100, &stmt,0);
> sqlite3_step(stmt);
>
> char * qry = "SELECT * FROM LEVEL1 WHERE COUNTRY_ID = ?
> AND DIR_SEARCH_AREA1 = ? AND ADDRESS_TYPE = ? AND PHONETIC_KEY LIKE ?
> ;";
> int p = sqlite3_prepare_v2(db,qry,1000,&stmt,0);
> char * qry2 = "SELECT * FROM LEVEL2 WHERE PARENT_KEY = ?
> AND PRIM_NBR_LOW <= ? AND PRIM_NBR_HIGH >= ?;";
> int p2 = sqlite3_prepare_v2(db,qry2,1000,&stmt2,0);
> char* qry3 = "SELECT * FROM LEVEL3 WHERE PARENT_KEY = ?
> ;";
> int p3 = sqlite3_prepare_v2(db,qry3,1000,&stmt3,0);
> if ( p || p2 || p3 )
> {
> printf("Can't create prepared statement: %s\n",
> sqlite3_errmsg(db));
> sqlite3_close(db);
> return -1;
> }
>
> while (ReadLine(inf))
> {
> sqlite3_bind_text(stmt, 1, cntryid, -1,
> SQLITE_TRANSIENT);
> sqlite3_bind_int(stmt, 2, searcharea);
> sqlite3_bind_text(stmt, 3, addrtype, -1,
> SQLITE_TRANSIENT);
> int len = strlen(phnkey);
> phnkey[len] = '%';
> phnkey[len+1] = '\0';
> sqlite3_bind_text(stmt, 4, phnkey, -1,
> SQLITE_TRANSIENT);
>
> while(sqlite3_step(stmt)==SQLITE_ROW)
> {
> for(int i=0; i<numFields[0]; i++)
> {
> ReadSQLiteComponent(0,i, stmt);
> if (i==51) //LEVEL1.RECORDKEY
>
> sqlite3_bind_int(stmt2,1,sqlite3_column_int(stmt, i));
> }
> sqlite3_bind_text(stmt2,2,prmlow, -1,
> SQLITE_TRANSIENT);
> sqlite3_bind_text(stmt2,3,prmhigh, -1,
> SQLITE_TRANSIENT);
> while(sqlite3_step(stmt2)==SQLITE_ROW)
> {
> for(int i=0; i<numFields[1]+1;
> i++)
> {
> ReadSQLiteComponent(1,i,
> stmt2);
> if (i==27)
> //LEVEL2.RECORDKEY
>
> sqlite3_bind_int(stmt3,1,sqlite3_column_int(stmt2, i));
> }
>
> while(sqlite3_step(stmt3)==SQLITE_ROW)
> {
> for(int i=0;
> i<numFields[2]+1; i++)
>
> ReadSQLiteComponent(2,i, stmt3);
> q++;
> }
> sqlite3_reset(stmt3);
> }
> sqlite3_reset(stmt2);
> }
> sqlite3_reset(stmt);
> }
>
> sqlite3_prepare(db,"END TRANSACTION;", 100, &stmt,0);
> sqlite3_step(stmt);
>
> sqlite3_finalize(stmt);
> sqlite3_finalize(stmt2);
> sqlite3_finalize(stmt3);
> sqlite3_close(db);
>
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users