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

Reply via email to