> On Sat, Feb 12, 2011 at 9:10 AM, Black, Michael (IS) > <michael.bla...@ngc.com >> D:\SQLite>batch 5000 1 >> 360766.6 inserts per sec >> > > Unless I'm missing something, SQLite has to update the first page of the > database on every commit, to update the change counter. Assuming you are > using rotating media, that record can only be updated 120 times per > second, > maximum, on a 7200RPM drive. > > I don't understand how you can do 360K commits per second if your system > is > actually doing "to the platter" writes on every commit. Can someone clue > me > in?
I think the time measuring is not correct as sqlite can't in fact do a commit with more than appx. 10-20 commits/sec. here is a slightly modified version, ignore the trigger stuff: -- #include <stdio.h> #include <time.h> #include <windows.h> #include <winbase.h> #include <time.h> #include "sqlite3.h" #include <sys/timeb.h> #include <math.h> int AddTrigger(sqlite3 *db) { char SqlTxt[256]; int rc; strcpy(SqlTxt,"CREATE TRIGGER XX AFTER INSERT ON t FOR EACH ROW BEGIN "); strcat(SqlTxt,"UPDATE t2 SET n = NEW.i;"); strcat(SqlTxt,"END;"); rc = sqlite3_exec(db,SqlTxt,NULL,NULL,NULL); if (rc != SQLITE_OK) { puts(sqlite3_errmsg(db)); } return(0); } int main(int argc, char *argv[]) { sqlite3 *db; sqlite3_stmt *stmt=NULL; int rc; int n=0; int nrec=0; int interval=0; int AddTr = 0; double t1; char SqlTxt[256]; if (argc < 3) { fprintf(stderr,"Usage: %s nrecords commit_interval\n",argv[0]); exit(-1); } nrec=atoi(argv[1]); interval=atoi(argv[2]); if( argc == 4 ) AddTr = atoi(argv[3]); remove("C:\\batch.db"); rc=sqlite3_open("C:\\batch.db",&db); if (rc != SQLITE_OK) { puts(sqlite3_errmsg(db)); } sqlite3_exec(db,"create table t (i integer)",NULL,NULL,NULL); sqlite3_exec(db,"create table t2 (n integer)",NULL,NULL,NULL); sqlite3_exec(db,"insert into t2 values(7);",NULL,NULL,NULL); if(AddTr) AddTrigger(db); // turn on WAL mode if you want to test it //sqlite3_exec(db,"pragma journal_mode=WAL",NULL,NULL,NULL); //sqlite3_prepare_v2(db,"insert into t values(?)",-1,&stmt,NULL); t1=clock(); if (interval != 1) rc=sqlite3_exec(db,"begin",NULL,NULL,NULL); while(n < nrec) { ++n; if (interval != 1 && (n% interval)==0) { sqlite3_exec(db,"commit",NULL,NULL,NULL); sqlite3_exec(db,"begin",NULL,NULL,NULL); } sprintf(SqlTxt, "insert into t values(%d);", n); sqlite3_exec(db,SqlTxt,NULL,NULL,NULL); } sqlite3_exec(db,"commit",NULL,NULL,NULL); printf("%.1f inserts per sec\n",nrec/((clock()-t1)/CLOCKS_PER_SEC)); sqlite3_close(db); } -- Marcus > > Jim > -- > HashBackup: easy onsite and offsite Unix backup > http://www.hashbackup.com > _______________________________________________ > 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