Valgrind warnings in create_ref_for_key with extended_keys+join_cache_hashed+join_cache_bka

Bug #923236 reported by Elena Stepanova
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MariaDB
Fix Released
High
Igor Babaev

Bug Description

==2090== Conditional jump or move depends on uninitialised value(s)
==2090== at 0x8542F76: create_ref_for_key(JOIN*, st_join_table*, keyuse_t*, bool, unsigned long long) (sql_select.cc:7514)
==2090== by 0x8541034: get_best_combination(JOIN*) (sql_select.cc:7183)
==2090== by 0x8532147: make_join_statistics(JOIN*, List<TABLE_LIST>&, Item*, st_dynamic_array*) (sql_select.cc:3598)
==2090== by 0x8521D08: JOIN::optimize() (sql_select.cc:1149)
==2090== by 0x852DCCA: mysql_select(THD*, Item***, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) (sql_select.cc:2917)
==2090== by 0x858804C: mysql_explain_union(THD*, st_select_lex_unit*, select_result*) (sql_select.cc:21392)
==2090== by 0x843BA9B: execute_sqlcom_select(THD*, TABLE_LIST*) (sql_parse.cc:5127)
==2090== by 0x84294D6: mysql_execute_command(THD*) (sql_parse.cc:2281)
==2090== by 0x8440EB7: mysql_parse(THD*, char*, unsigned int, char const**) (sql_parse.cc:6149)
==2090== by 0x84248D0: dispatch_command(enum_server_command, THD*, char*, unsigned int) (sql_parse.cc:1227)
==2090== by 0x8422F76: do_command(THD*) (sql_parse.cc:922)
==2090== by 0x841C469: handle_one_connection (sql_connect.cc:1193)
==2090== by 0x40C9B24: start_thread (in /lib/libpthread-2.11.2.so)
==2090== by 0x42F534D: clone (in /lib/libc-2.11.2.so)

bzr version-info
revision-id: <email address hidden>
date: 2012-01-24 23:34:02 -0800
build-date: 2012-01-29 10:08:31 +0400
revno: 3395
branch-nick: lp-5.3-extended_keys

Reproducible with join_cache_hashed=on,join_cache_bka=on,extended_keys=on and join_cache_level >= 3.
The problem seems to be somehow related to the number of columns and the length of their names.

EXPLAIN:

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
1 SIMPLE t2 hash_ALL NULL #hash#$hj 5 test.t1.a 2 100.00 Using where; Using join buffer (flat, BNLH join)
Warnings:
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`f1` AS `f1`,`test`.`t1`.`f2` AS `f2`,`test`.`t1`.`f3` AS `f3`,`test`.`t1`.`f4` AS `f4`,`test`.`t1`.`f5` AS `f5`,`test`.`t1`.`long_column_name_1` AS `long_column_name_1`,`test`.`t1`.`long_column_name_2` AS `long_column_name_2`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`f6` AS `f6`,`test`.`t2`.`f7` AS `f7`,`test`.`t2`.`long_column_name_3` AS `long_column_name_3`,`test`.`t2`.`long_column_name_4` AS `long_column_name_4`,`test`.`t2`.`long_column_name_5` AS `long_column_name_5`,`test`.`t2`.`long_column_name_6` AS `long_column_name_6`,`test`.`t2`.`long_column_name_7` AS `long_column_name_7`,`test`.`t2`.`long_column_name_8` AS `long_column_name_8`,`test`.`t2`.`long_column_name_9` AS `long_column_name_9` from `test`.`t1` join `test`.`t2` where (`test`.`t2`.`b` = `test`.`t1`.`a`)

Minimal optimizer_switch: join_cache_hashed=on,join_cache_bka=on,extended_keys=on

Full optimizer_switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on

Test case:

SET join_cache_level=3;
SET optimizer_switch='join_cache_hashed=on,join_cache_bka=on,extended_keys=on';

CREATE TABLE t1 (
  a INT, f1 INT, f2 INT,
  f3 INT, f4 INT, f5 INT,
  long_column_name_1 INT,
  long_column_name_2 INT
);

CREATE TABLE t2 (
  b INT, f6 INT, f7 INT,
  long_column_name_3 INT,
  long_column_name_4 INT,
  long_column_name_5 INT,
  long_column_name_6 INT,
  long_column_name_7 INT,
  long_column_name_8 INT,
  long_column_name_9 INT
);

INSERT INTO t1 (a) VALUES (4),(6);
INSERT INTO t2 (b) VALUES (0),(8);

SELECT * FROM t1, t2 WHERE b=a;

Revision history for this message
Elena Stepanova (elenst) wrote :

Also filed in JIRA as MDEV-126

Changed in maria:
status: New → Confirmed
importance: Undecided → High
Changed in maria:
status: Confirmed → In Progress
Changed in maria:
status: In Progress → Fix Committed
Revision history for this message
Elena Stepanova (elenst) wrote :

Fix released with 5.5.21.

Changed in maria:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.