Thanks...progress...now we get a SIGBUS later on... Program received signal SIGBUS, Bus error. 0x000000000046ce4c in treeShmalloc (pDb=0x6c9728, bAlign=0, nByte=25, pRc=0x7fffffffd784) at src/lsm_tree.c:668 668 pNext->iNext = 0;
pRc looks suspiciously like it's ready to overflow #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> #include "sqlite4/sqlite4.h" #define NRECORDS 50000000 time_t base_seconds; suseconds_t base_useconds; double tic() { struct timeval tv; double f; gettimeofday(&tv,NULL); base_seconds=tv.tv_sec; base_useconds=tv.tv_usec; f= base_seconds + base_useconds/1.0e6; return f; } // returns time in seconds since tic() was called double toc() { struct timeval tv; gettimeofday(&tv,NULL); double mark=(tv.tv_sec-base_seconds)+(tv.tv_usec-base_useconds)/1.0e6; return mark; } void checkrc(sqlite4 *db,int rc,int checkrc,int flag,char *msg,char *str) { if (rc != checkrc) { fprintf(stderr,msg,str); fprintf(stderr,"%s\n",sqlite4_errmsg(db)); if (flag) { // then fatal exit(1); } } } int main(int argc, char *argv[]) { int rc; long i; double startTime,stopTime; char *sql,*errmsg=NULL; char *databaseName="data.db"; sqlite4 *db; sqlite4_env *env=NULL; sqlite4_stmt *stmt1,*stmt2; remove(databaseName); rc = sqlite4_open(env,"data.db",&db,SQLITE4_OPEN_READWRITE|SQLITE4_OPEN_CREATE,NU LL); checkrc(db,SQLITE4_OK,rc,1,"Error opening database '%s': ",databaseName); //sql = "create table if not exists t_foo (key binary(16) primary key, value binary(16))"; sql = "create table if not exists t_foo (key binary(16) , value binary(16))"; rc=sqlite4_prepare(db,sql,-1,&stmt1,NULL); checkrc(db,SQLITE4_OK,rc,1,"Error preparing statement '%s': ",sql); rc=sqlite4_step(stmt1); checkrc(db,SQLITE4_DONE,rc,1,"Error executing statement '%s': ",sql); rc=sqlite4_finalize(stmt1); checkrc(db,SQLITE4_OK,rc,1,"Error finalizing statement '%s': ",sql); rc=sqlite4_exec(db, "PRAGMA journal_mode=wal",NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error on WAL mode statement '%s': ",sql); rc=sqlite4_exec(db, "PRAGMA synchronous=OFF",NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error on synchronous mode statement '%s': ",sql); rc=sqlite4_exec(db, "PRAGMA cache_size=8000",NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error on synchronous mode statement '%s': ",sql); rc=sqlite4_exec(db, "PRAGMA page_size=4096",NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error on synchronous mode statement '%s': ",sql); sql="BEGIN"; rc=sqlite4_exec(db,sql,NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error preparing statement '%s': ",sql); sql = "insert or replace into t_foo(key,value) values(?,?)"; rc=sqlite4_prepare(db,sql,-1,&stmt2,NULL); checkrc(db,SQLITE4_OK,rc,1,"Error preparing statement '%s': ",sql); startTime=tic(); for(i=0; i<=NRECORDS; ++i) { char key[16],value[16]; long number = random(); memcpy(key,&number,8); memcpy(&key[8],&number,8); memcpy(value,&i,8); rc=sqlite4_bind_blob(stmt2,1,key,16,SQLITE4_STATIC); checkrc(db,SQLITE4_OK,rc,1,"Error bind1 statement '%s': ",sql); rc=sqlite4_bind_blob(stmt2,2,value,16,SQLITE4_STATIC); checkrc(db,SQLITE4_OK,rc,1,"Error bind2 statement '%s': ",sql); rc=sqlite4_step(stmt2); checkrc(db,SQLITE4_DONE,rc,1,"Error finalizing statement '%s': ",sql); rc=sqlite4_reset(stmt2); checkrc(db,SQLITE4_OK,rc,1,"Error resetting statement '%s': ",sql); #if 0 if (i>0&&(i % 1000000)==0) { sql="COMMIT"; rc=sqlite4_exec(db,sql,NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error executing statement '%s': ",errmsg); sql="BEGIN"; rc=sqlite4_exec(db,sql,NULL,NULL,&errmsg); checkrc(db,SQLITE4_OK,rc,1,"Error executing statement '%s': ",errmsg); } #endif if (i>0 && (i % 100000) == 0) { //printf("%ld,%g \n",i,100000/toc()); printf("%g \n",100000/toc()); fflush(stdout); tic(); } } rc=sqlite4_finalize(stmt2); checkrc(db,SQLITE4_OK,rc,1,"Error finalizing statement '%s': ",sql); rc=sqlite4_close(db); checkrc(db,SQLITE4_OK,rc,1,"Error closing database'%s': ",databaseName); stopTime=tic(); printf("avg %.0f inserts/sec\n",NRECORDS/(stopTime-startTime)); return 0; } _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users