Changeset: 13f2d9c9d069 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13f2d9c9d069 Modified Files: monetdb5/optimizer/opt_commonTerms.c monetdb5/optimizer/opt_constants.c monetdb5/optimizer/opt_pipes.c monetdb5/optimizer/opt_support.c Branch: default Log Message:
Short-cut the optimizer pipeline facing simple queries diffs (159 lines): diff --git a/monetdb5/optimizer/opt_commonTerms.c b/monetdb5/optimizer/opt_commonTerms.c --- a/monetdb5/optimizer/opt_commonTerms.c +++ b/monetdb5/optimizer/opt_commonTerms.c @@ -18,6 +18,10 @@ * Therefore we skip all constants, except for a constant only situation. */ +/* + * Speed up simple insert operations by skipping the common terms. +*/ + static int isProjectConst(InstrPtr p) { @@ -46,15 +50,20 @@ OPTcommonTermsImplementation(Client cntx int actions = 0; int limit, slimit; int duplicate; - int *alias; - int *hash, h; - int *list; + int *alias = NULL; + int *hash = NULL, h; + int *list = NULL; str msg = MAL_SUCCEED; InstrPtr *old = NULL; char buf[256]; lng usec = GDKusec(); + /* catch simple insert operations */ + if( isSQLinsert(mb)){ + goto wrapup; + } + (void) cntxt; (void) stk; (void) pci; diff --git a/monetdb5/optimizer/opt_constants.c b/monetdb5/optimizer/opt_constants.c --- a/monetdb5/optimizer/opt_constants.c +++ b/monetdb5/optimizer/opt_constants.c @@ -30,12 +30,15 @@ str OPTconstantsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { int i, k = 1, n = 0, fnd = 0, actions = 0, limit = 0; - int *alias, *index; - VarPtr x,y, *cst; + int *alias = NULL, *index = NULL; + VarPtr x,y, *cst = NULL; char buf[256]; lng usec = GDKusec(); str msg = MAL_SUCCEED; + if( isSQLinsert(mb)){ + goto wrapup; + } alias= (int*) GDKzalloc(sizeof(int) * mb->vtop); cst= (VarPtr*) GDKzalloc(sizeof(VarPtr) * mb->vtop); index= (int*) GDKzalloc(sizeof(int) * mb->vtop); @@ -92,13 +95,13 @@ OPTconstantsImplementation(Client cntxt, // if(!msg) // msg = chkDeclarations(mb); /* keep all actions taken as a post block comment */ +wrapup: usec = GDKusec()- usec; snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","constants",actions,usec); newComment(mb,buf); if (actions > 0) addtoMalBlkHistory(mb); -wrapup: if( alias) GDKfree(alias); if( cst) GDKfree(cst); if( index) GDKfree(index); diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c --- a/monetdb5/optimizer/opt_pipes.c +++ b/monetdb5/optimizer/opt_pipes.c @@ -45,7 +45,7 @@ static struct PIPELINES { "optimizer.inline();" "optimizer.remap();" "optimizer.bincopyfrom();" - "optimizer.parappend();" + //"optimizer.parappend();" "optimizer.deadcode();" "optimizer.multiplex();" "optimizer.generator();" @@ -77,7 +77,7 @@ static struct PIPELINES { "optimizer.mitosis();" "optimizer.mergetable();" "optimizer.bincopyfrom();" - "optimizer.parappend();" + //"optimizer.parappend();" "optimizer.aliases();" "optimizer.constants();" "optimizer.commonTerms();" @@ -116,7 +116,7 @@ static struct PIPELINES { "optimizer.mitosis();" "optimizer.mergetable();" "optimizer.bincopyfrom();" - "optimizer.parappend();" + //"optimizer.parappend();" "optimizer.aliases();" "optimizer.constants();" "optimizer.commonTerms();" @@ -155,7 +155,7 @@ static struct PIPELINES { "optimizer.mitosis();" "optimizer.mergetable();" "optimizer.bincopyfrom();" - "optimizer.parappend();" + //"optimizer.parappend();" "optimizer.aliases();" "optimizer.constants();" "optimizer.commonTerms();" @@ -200,7 +200,7 @@ static struct PIPELINES { "optimizer.aliases();" "optimizer.mergetable();" "optimizer.bincopyfrom();" - "optimizer.parappend();" + //"optimizer.parappend();" "optimizer.aliases();" "optimizer.constants();" "optimizer.commonTerms();" @@ -244,7 +244,7 @@ static struct PIPELINES { "optimizer.aliases();" "optimizer.mergetable();" "optimizer.bincopyfrom();" - "optimizer.parappend();" + //"optimizer.parappend();" "optimizer.aliases();" "optimizer.constants();" "optimizer.commonTerms();" diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c --- a/monetdb5/optimizer/opt_support.c +++ b/monetdb5/optimizer/opt_support.c @@ -88,6 +88,24 @@ isOptimizerUsed(MalBlkPtr mb, str opt) return 0; } +/* Simple insertion statements do not require complex optimizer steps */ +int +isSQLinsert(MalBlkPtr mb) +{ + int cnt = 0; + int i; + InstrPtr p; + + for(i = 0; i < mb->stop; i++) { + p = getInstrPtr(mb,i); + if (p && getModuleId(p) == sqlRef && getFunctionId(p) == appendRef ){ + cnt ++; + } + } + return cnt > 0.63 * mb->stop; +} + + /* Hypothetical, optimizers may massage the plan in such a way * that multiple passes are needed. * However, the current SQL driven approach only expects a single _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list