Changeset: 13920b18393b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13920b18393b
Modified Files:
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_generator.c
        monetdb5/optimizer/opt_mitosis.c
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_querylog.c
Branch: default
Log Message:

Avoid growing MAL blocks
The MAL blocks used in the optimizers should not be extended without purpose.
As long as the underlying pushInstruction is used, it will automatically grow,
albeit with just a few elements at a time.

If the same MAL block is used over many queries, it would acquire too much 
un-used
space.


diffs (71 lines):

diff --git a/monetdb5/optimizer/opt_dataflow.c 
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -248,7 +248,9 @@ OPTdataflowImplementation(Client cntxt, 
                        eolife[getArg(p,j)]= i;
        }
 
-       if ( newMalBlkStmt(mb, mb->ssize+mb->vtop) <0 )
+       // make sure we have space for the language.pass operation
+       // for all variables within the barrier
+       if ( newMalBlkStmt(mb, mb->ssize) <0 )
                goto wrapup;
        
        pushInstruction(mb,old[0]);
diff --git a/monetdb5/optimizer/opt_generator.c 
b/monetdb5/optimizer/opt_generator.c
--- a/monetdb5/optimizer/opt_generator.c
+++ b/monetdb5/optimizer/opt_generator.c
@@ -80,7 +80,7 @@ OPTgeneratorImplementation(Client cntxt,
        series = (InstrPtr*) GDKzalloc(sizeof(InstrPtr) * mb->vtop);
        old = mb->stmt;
        limit = mb->stop;
-       if (newMalBlkStmt(mb, 2 * limit) < 0) {
+       if (newMalBlkStmt(mb, mb->ssize) < 0) {
                GDKfree(series);
                return 0;
        }
diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c
--- a/monetdb5/optimizer/opt_mitosis.c
+++ b/monetdb5/optimizer/opt_mitosis.c
@@ -169,7 +169,7 @@ OPTmitosisImplementation(Client cntxt, M
 
        limit = mb->stop;
        slimit = mb->ssize;
-       if (newMalBlkStmt(mb, mb->ssize + 2 * estimate) < 0)
+       if (newMalBlkStmt(mb, mb->stop + 2 * estimate) < 0)
                return 0;
        estimate = 0;
 
diff --git a/monetdb5/optimizer/opt_pushselect.c 
b/monetdb5/optimizer/opt_pushselect.c
--- a/monetdb5/optimizer/opt_pushselect.c
+++ b/monetdb5/optimizer/opt_pushselect.c
@@ -268,7 +268,7 @@ OPTpushselectImplementation(Client cntxt
                }
        }
 
-       if ((!subselects.nr && !nr_topn && !nr_likes) || newMalBlkStmt(mb, 
mb->ssize+20) <0 ) {
+       if ((!subselects.nr && !nr_topn && !nr_likes) || newMalBlkStmt(mb, 
mb->ssize) <0 ) {
                GDKfree(vars);
                return 0;
        }
@@ -442,7 +442,7 @@ OPTpushselectImplementation(Client cntxt
        slimit= mb->ssize;
        old = mb->stmt;
 
-       if (newMalBlkStmt(mb, mb->ssize+(5*push_down_delta)) <0 ) {
+       if (newMalBlkStmt(mb, mb->stop+(5*push_down_delta)) <0 ) {
                mb->stmt = old;
                GDKfree(vars);
                return actions;
diff --git a/monetdb5/optimizer/opt_querylog.c 
b/monetdb5/optimizer/opt_querylog.c
--- a/monetdb5/optimizer/opt_querylog.c
+++ b/monetdb5/optimizer/opt_querylog.c
@@ -52,7 +52,7 @@ OPTquerylogImplementation(Client cntxt, 
 
        limit= mb->stop;
        slimit= mb->ssize;
-       if ( newMalBlkStmt(mb, 2 * mb->ssize) < 0)
+       if ( newMalBlkStmt(mb, mb->ssize) < 0)
                return 0; 
 
        pushInstruction(mb, old[0]);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to