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
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users