Changeset: 697999a64eaf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=697999a64eaf
Modified Files:
sql/src/backends/monet5/Tests/optimizers.sql
sql/src/backends/monet5/Tests/optimizers.stable.err
sql/src/backends/monet5/Tests/optimizers.stable.out
sql/src/backends/monet5/sql_optimizer.mx
sql/src/backends/monet5/sql_scenario.mx
sql/src/test/Tests/setoptimizer.stable.err
sql/src/test/Tests/setoptimizer.stable.out
Branch: default
Log Message:
Optimizer pipeline inherit from server
Avoided overwriting the SQL optimizer pipeline setting of the server when
connecting.
Instead, the optimizer pipeline setting of the server is used as a starting
point for clients.
diffs (273 lines):
diff -r 50de40d39eea -r 697999a64eaf
sql/src/backends/monet5/Tests/optimizers.sql
--- a/sql/src/backends/monet5/Tests/optimizers.sql Fri Jun 04 00:30:40
2010 +0200
+++ b/sql/src/backends/monet5/Tests/optimizers.sql Sat Jun 05 16:56:57
2010 +0200
@@ -5,13 +5,13 @@
select 'optimizer test:',optimizer;
set optimizer='off';
-select 'optimizer test:',optimizer;
+select 'optimizer off test:',optimizer;
set optimizer='on';
-select 'optimizer test:',optimizer;
+select 'optimizer on test:',optimizer;
set optimizer='';
-select 'optimizer test:',optimizer;
+select 'optimizer <empty> test:',optimizer;
set
optimizer='costModel,coercions,emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
diff -r 50de40d39eea -r 697999a64eaf
sql/src/backends/monet5/Tests/optimizers.stable.err
--- a/sql/src/backends/monet5/Tests/optimizers.stable.err Fri Jun 04
00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/Tests/optimizers.stable.err Sat Jun 05
16:56:57 2010 +0200
@@ -12,49 +12,43 @@
# 08:05:50 > Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb
--host=gio --port=35043
# 08:05:50 >
-MAPI = mone...@eir:39446
-QUERY = set optimizer='off';
-ERROR = !SQLException:optimizer: 'garbageCollector' should be used as the last
one
-MAPI = mone...@eir:39446
-QUERY = set optimizer='';
-ERROR = !SQLException:optimizer: 'garbageCollector' should be used as the last
one
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='costModel,coercions,emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='coercions,emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='emptySet,accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='accessmode,aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='aliases,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set optimizer='accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set optimizer='joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set optimizer='deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set optimizer='reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set optimizer='garbageCollector';
ERROR = !SQLException:optimizer:Optimizer 'garbageCollector' pipeline does not
exist, use default pipe instead
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='costModel,coercions,emptySet,accessmode,commonTerms,accumulators,joinPath,deadcode,reduce,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:39446
+MAPI = mone...@eir:34547
QUERY = set
optimizer='costModel,coercions,emptySet,accessmode,commonTerms,accumulators,joinPath,deadcode,garbageCollector';
ERROR = !SQLException:optimizer: 'inline' should be the first
diff -r 50de40d39eea -r 697999a64eaf
sql/src/backends/monet5/Tests/optimizers.stable.out
--- a/sql/src/backends/monet5/Tests/optimizers.stable.out Fri Jun 04
00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/Tests/optimizers.stable.out Sat Jun 05
16:56:57 2010 +0200
@@ -49,19 +49,20 @@
% ., . # table_name
% single_value, single_value # name
% char, varchar # type
-% 15, 175 # length
-[ "optimizer test:",
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
]
-#select 'optimizer test:',optimizer;
+% 19, 48 # length
+[ "optimizer off test:",
"inline,remap,deadcode,multiplex,garbageCollector" ]
+#select 'optimizer on test:',optimizer;
% ., . # table_name
% single_value, single_value # name
% char, varchar # type
-% 15, 2 # length
-[ "optimizer test:", "on" ]
+% 19, 2 # length
+[ "optimizer on test:", "on" ]
+#select 'optimizer <empty> test:',optimizer;
% ., . # table_name
% single_value, single_value # name
% char, varchar # type
-% 15, 175 # length
-[ "optimizer test:",
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
]
+% 23, 48 # length
+[ "optimizer <empty> test:",
"inline,remap,deadcode,multiplex,garbageCollector" ]
#select 'done';
% . # table_name
% single_value # name
diff -r 50de40d39eea -r 697999a64eaf sql/src/backends/monet5/sql_optimizer.mx
--- a/sql/src/backends/monet5/sql_optimizer.mx Fri Jun 04 00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/sql_optimizer.mx Sat Jun 05 16:56:57 2010 +0200
@@ -139,6 +139,7 @@
sql5_export str SQLvalidatePipeline(void);
sql5_export str setOptimizers(str optimizer);
+sql5_export str optimizerpipe; /* the active pipeline */
#endif /* _SQL_OPTIMIZER_H_ */
@-
@@ -437,19 +438,26 @@
optimizerCheck(cntxt,mb,"optimizer.SQLgetstatistics",actions,GDKusec()-clk,0);
}
@-
-The optimizers applied are taken from a list managed with
-the SQL set optimizer statement. The default list has been
+Optimizers steps are identified by a list of identifiers and given
+a pipeline name. The default pipeline in the distribution has been
tested extensively and should provide overall good performance.
Additional pipelines are defined in the monetdb.conf file.
-The optimizers can be turned on/off, leaving the minimal plan
-active.
+The optimizers can be turned on/off, leaving a minimal plan active.
+
+A few optimizations are always needed. First, the multiplex
+code should be turned into a proper MAL blocks before
+other optimizations take place.
+And before we actually execute the program, we should
+expand the macros (unless this has already been taken
+care of.
+
The first error in the optimizer string is shown.
@c
-str minimalPlan= "inline,remap,deadcode,multiplex";
+str minimalPipe= "minimal_pipe";
-static str optimizers[256]; /* the optimizer pipeline */
-static str optimizerpipe; /* reference to last pipeline string */
-static char *previouspipe = 0;
+static str optimizers[256]; /* the broken down optimizer pipeline */
+str optimizerpipe; /* the active pipeline */
+static str previouspipe = 0; /* fall back position */
str
SQLvalidatePipeline(void){
@@ -520,12 +528,11 @@
}
@-
-A few optimizations are always needed. First, the multiplex
-code should be turned into a proper MAL blocks before
-other optimizations take place.
-And before we actually execute the program, we should
-expand the macros (unless this has already been taken
-care of.
+The prevalent optimizer pipeline is a global variable. All clients
+are affected. Clients can overrule the pipe-line setting temporarily,
+re-setting it to the previous one. Note, however, that no concurrency
+control is implemented to isolate the clients in playing with the
+optimizers.
@c
str
setOptimizers(str optimizer)
@@ -538,20 +545,24 @@
return optimizerpipe;
/* catch minimal pipes */
- if (optimizer == NULL || *optimizer == 0 )
- optimizer= minimalPlan;
- else
+ if (optimizer == NULL || *optimizer == 0 ) {
+ pipe = GDKgetenv(minimalPipe);
+ if ( pipe )
+ optimizer = pipe;
+ } else
/* optimizers can be temporarily turned on/off */
if(strcmp(optimizer,"off")==0){
- if( previouspipe == NULL)
- previouspipe = optimizerpipe;
- else return optimizerpipe;
- optimizer= minimalPlan;
+ if( previouspipe )
+ return optimizerpipe;
+ previouspipe = optimizerpipe;
+ pipe = GDKgetenv(minimalPipe);
+ if ( pipe )
+ optimizer = pipe;
} else
if (strcmp(optimizer,"on")==0){
- if (previouspipe)
- optimizer= previouspipe;
- else return optimizerpipe;
+ if (previouspipe == NULL)
+ return optimizerpipe;
+ optimizer= previouspipe;
previouspipe = 0;
} else {
/* the optimizer may be an environment alias */
diff -r 50de40d39eea -r 697999a64eaf sql/src/backends/monet5/sql_scenario.mx
--- a/sql/src/backends/monet5/sql_scenario.mx Fri Jun 04 00:30:40 2010 +0200
+++ b/sql/src/backends/monet5/sql_scenario.mx Sat Jun 05 16:56:57 2010 +0200
@@ -330,7 +330,11 @@
SQLglobal("current_schema", schema);
SQLglobal("current_user", user);
SQLglobal("current_role", user);
- optimizer= GDKgetenv("sql_optimizer");
+ /* inherit the optimizer from the server */
+ if (optimizerpipe )
+ optimizer= optimizerpipe;
+ else
+ optimizer= GDKgetenv("sql_optimizer");
if (optimizer == NULL)
optimizer= "default_pipe";
SQLglobal("optimizer", GDKstrdup(setOptimizers(optimizer)));
diff -r 50de40d39eea -r 697999a64eaf sql/src/test/Tests/setoptimizer.stable.err
--- a/sql/src/test/Tests/setoptimizer.stable.err Fri Jun 04 00:30:40
2010 +0200
+++ b/sql/src/test/Tests/setoptimizer.stable.err Sat Jun 05 16:56:57
2010 +0200
@@ -80,13 +80,10 @@
# 12:49:31 > mclient -lsql -i --host=eir --port=36907
# 12:49:31 >
-MAPI = mone...@eir:35648
-QUERY = set optimizer='off';
-ERROR = !SQLException:optimizer: 'garbageCollector' should be used as the last
one
-MAPI = mone...@eir:35648
+MAPI = mone...@eir:34547
QUERY = set optimizer='default,costModel';
ERROR = !SQLException:optimizer: 'inline' should be the first
-MAPI = mone...@eir:35648
+MAPI = mone...@eir:34547
QUERY = set optimizer='myfamous_pipe';
ERROR = !SQLException:optimizer:Optimizer 'myfamous_pipe' pipeline does not
exist, use default pipe instead
diff -r 50de40d39eea -r 697999a64eaf sql/src/test/Tests/setoptimizer.stable.out
--- a/sql/src/test/Tests/setoptimizer.stable.out Fri Jun 04 00:30:40
2010 +0200
+++ b/sql/src/test/Tests/setoptimizer.stable.out Sat Jun 05 16:56:57
2010 +0200
@@ -39,14 +39,14 @@
% . # table_name
% single_value # name
% varchar # type
-% 175 # length
-[
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
]
+% 48 # length
+[ "inline,remap,deadcode,multiplex,garbageCollector" ]
#select optimizer;
% . # table_name
% single_value # name
% varchar # type
-% 175 # length
-[
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector"
]
+% 48 # length
+[ "inline,remap,deadcode,multiplex,garbageCollector" ]
#select optimizer;
% . # table_name
% single_value # name
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list