summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2014-03-04 16:15:58 +0400
committerSergey Petrunya <psergey@askmonty.org>2014-03-04 16:15:58 +0400
commitbc96ce55090756e8a3725fc61d0dddaa952a5f22 (patch)
tree080d9a252fa6a51837652f2ce66b3b5e0cda1209 /client
parent7449c7d32b2b2847f821c8c547c255e861cd60bd (diff)
downloadmariadb-git-bc96ce55090756e8a3725fc61d0dddaa952a5f22.tar.gz
MDEV-5723: mysqldump -uroot unusable for multi-database operations, checks all databases
- MariaDB-5.5 part of the fix: since we can't easily fix query optimization for I_S tables, run the affected-tablespaces query with semijoin=off. It happens to have a good query plan with that setting.
Diffstat (limited to 'client')
-rw-r--r--client/mysqldump.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index b4c045c18b0..a8c201082d9 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -3991,7 +3991,13 @@ static int dump_tablespaces(char* ts_where)
char *ubs;
char *endsemi;
DBUG_ENTER("dump_tablespaces");
-
+
+ /*
+ Try to turn off semi-join optimization (if that fails, this is a
+ pre-optimizer_switch server, and the old query plan is ok for us.
+ */
+ mysql_query(mysql, "set optimizer_switch='semijoin=off'");
+
init_dynamic_string_checked(&sqlbuf,
"SELECT LOGFILE_GROUP_NAME,"
" FILE_NAME,"
@@ -4151,6 +4157,8 @@ static int dump_tablespaces(char* ts_where)
mysql_free_result(tableres);
dynstr_free(&sqlbuf);
+ mysql_query(mysql, "set optimizer_switch=default");
+
DBUG_RETURN(0);
}