[MDEV-23151] Assertion `i < get_width()' failed in Histogram::get_value Created: 2020-07-12  Updated: 2023-11-28

Status: Confirmed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11
Fix Version/s: 10.4, 10.5, 10.6, 10.11

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Sergei Petrunia
Resolution: Unresolved Votes: 0
Labels: eits, regression


 Description   

I am setting it to Minor due to the unrealistic value of histogram_size. However, I can't tell for sure whether the failure is specific to the meaningless histogram_size or just the combination of histogram_size and data volume/values. I expect the development analysis will clarify it.

CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
INSERT INTO t1 SELECT * FROM t1;
ALTER TABLE t1 ADD SYSTEM VERSIONING;
INSERT INTO t1 VALUES (1),(2),(3),(4);
SET HISTOGRAM_SIZE= 5;
ANALYZE TABLE t1 PERSISTENT FOR ALL;
SELECT * from t1 WHERE row_start IN (SELECT row_end FROM t1);
 
# Cleanup
DROP TABLE t1;

10.4 debug 5d471453

mysqld: /data/src/10.4/sql/sql_statistics.h:177: uint Histogram::get_value(uint): Assertion `i < get_width()' failed.
200712 15:19:19 [ERROR] mysqld got signal 6 ;
 
#7  0x00007f954b92bf12 in __GI___assert_fail (assertion=0x563fefef8385 "i < get_width()", file=0x563fefef8398 "/data/src/10.4/sql/sql_statistics.h", line=177, function=0x563fefef8d00 <Histogram::get_value(unsigned int)::__PRETTY_FUNCTION__> "uint Histogram::get_value(uint)") at assert.c:101
#8  0x0000563fef2af103 in Histogram::get_value (this=0x7f94e4057c90, i=2) at /data/src/10.4/sql/sql_statistics.h:177
#9  0x0000563fef2af238 in Histogram::find_bucket (this=0x7f94e4057c90, pos=1, first=true) at /data/src/10.4/sql/sql_statistics.h:201
#10 0x0000563fef2ae3e3 in Histogram::point_selectivity (this=0x7f94e4057c90, pos=1, avg_sel=0.5) at /data/src/10.4/sql/sql_statistics.cc:3874
#11 0x0000563fef2ae181 in get_column_range_cardinality (field=0x7f94e4077430, min_endp=0x7f95481783c0, max_endp=0x7f95481783e0, range_flag=48) at /data/src/10.4/sql/sql_statistics.cc:3783
#12 0x0000563fef6b9ead in records_in_column_ranges (param=0x7f9548178c00, idx=0, tree=0x7f94e405c570) at /data/src/10.4/sql/opt_range.cc:3234
#13 0x0000563fef6baaf7 in calculate_cond_selectivity_for_table (thd=0x7f94e4000af0, table=0x7f94e413e6f0, cond=0x7f94e40162c0) at /data/src/10.4/sql/opt_range.cc:3498
#14 0x0000563fef237c7f in make_join_statistics (join=0x7f94e4015eb8, tables_list=..., keyuse_array=0x7f94e40161a8) at /data/src/10.4/sql/sql_select.cc:5476
#15 0x0000563fef22c1f2 in JOIN::optimize_inner (this=0x7f94e4015eb8) at /data/src/10.4/sql/sql_select.cc:2263
#16 0x0000563fef229b32 in JOIN::optimize (this=0x7f94e4015eb8) at /data/src/10.4/sql/sql_select.cc:1610
#17 0x0000563fef234fda in mysql_select (thd=0x7f94e4000af0, tables=0x7f94e4013628, wild_num=1, fields=..., conds=0x7f94e40152c8, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x7f94e4015e90, unit=0x7f94e4004a18, select_lex=0x7f94e4013068) at /data/src/10.4/sql/sql_select.cc:4673
#18 0x0000563fef224b46 in handle_select (thd=0x7f94e4000af0, lex=0x7f94e4004958, result=0x7f94e4015e90, setup_tables_done_option=0) at /data/src/10.4/sql/sql_select.cc:422
#19 0x0000563fef1eb628 in execute_sqlcom_select (thd=0x7f94e4000af0, all_tables=0x7f94e4013628) at /data/src/10.4/sql/sql_parse.cc:6358
#20 0x0000563fef1e1c5f in mysql_execute_command (thd=0x7f94e4000af0) at /data/src/10.4/sql/sql_parse.cc:3890
#21 0x0000563fef1ef5d5 in mysql_parse (thd=0x7f94e4000af0, rawbuf=0x7f94e4012f88 "SELECT * from t1 WHERE row_start IN (SELECT row_end FROM t1)", length=60, parser_state=0x7f954817a5c0, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:7899
#22 0x0000563fef1dbb0a in dispatch_command (command=COM_QUERY, thd=0x7f94e4000af0, packet=0x7f94e414e0d1 "SELECT * from t1 WHERE row_start IN (SELECT row_end FROM t1)", packet_length=60, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:1834
#23 0x0000563fef1da2ac in do_command (thd=0x7f94e4000af0) at /data/src/10.4/sql/sql_parse.cc:1352
#24 0x0000563fef363188 in do_handle_one_connection (connect=0x563ff2e99a80) at /data/src/10.4/sql/sql_connect.cc:1412
#25 0x0000563fef362ed7 in handle_one_connection (arg=0x563ff2e99a80) at /data/src/10.4/sql/sql_connect.cc:1316
#26 0x00007f954d8b44a4 in start_thread (arg=0x7f954817b700) at pthread_create.c:456
#27 0x00007f954b9e8d0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Reproducible on 10.4-10.5, with at least MyISAM and InnoDB.
Couldn't reproduce on 10.3, even after adding USE_STAT_TABLES=PREFERABLY, OPTIMIZER_USE_CONDITION_SELECTIVITY=4, HISTOGRAM_TYPE=DOUBLE_PREC_HB. Maybe I missed some important options.

Couldn't reproduce without versioning, with explicit timestamp columns.

No obvious problem on a non-debug build.



 Comments   
Comment by Varun Gupta (Inactive) [ 2020-07-13 ]

I can reproduce this problem without system versioning and also on lower versions (I tried on 10.2)

CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 VALUES (1),(2),(3),(4);
SET optimizer_use_condition_selectivity=4;
SET histogram_size= 5;
SET histogram_type= DOUBLE_PREC_HB;
SET use_stat_tables='preferably';
ANALYZE TABLE t1 PERSISTENT FOR ALL;
SELECT * from t1 where a=10;

Comment by Roel Van de Paar [ 2020-10-04 ]

Slightly different stack (Histogram::range_selectivity instead of Histogram::point_selectivity) and alternative testcase:

SET use_stat_tables=PREFERABLY;
SET SESSION histogram_size=1;
CREATE TABLE t (c1 INT NOT NULL, c2 CHAR (5)) PARTITION BY HASH (c1);
INSERT INTO t VALUES (1,'a');
ANALYZE TABLE t;
SELECT * FROM t WHERE c2 >= '2000-00-01 00:00:00' AND c2 < '2020-10-10 00:00:00';

Leads to:

10.5.6 2bac9782aa81ad386beaf00eb126ccf2d15031a1 (Debug)

mysqld: /test/10.5_dbg/sql/sql_statistics.h:177: uint Histogram::get_value(uint): Assertion `i < get_width()' failed.

10.5.6 2bac9782aa81ad386beaf00eb126ccf2d15031a1 (Debug)

Core was generated by `/test/MD150920-mariadb-10.5.6-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6)
    at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
[Current thread is 1 (Thread 0x14cc7a73a700 (LWP 540825))]
(gdb) bt
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
#1  0x000055b5bfba985a in my_write_core (sig=sig@entry=6) at /test/10.5_dbg/mysys/stacktrace.c:424
#2  0x000055b5bf3703a9 in handle_fatal_signal (sig=6) at /test/10.5_dbg/sql/signal_handler.cc:330
#3  <signal handler called>
#4  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#5  0x000014cc789d08b1 in __GI_abort () at abort.c:79
#6  0x000014cc789c042a in __assert_fail_base (fmt=0x14cc78b47a38 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x55b5bfd42a04 "i < get_width()", file=file@entry=0x55b5bfd42a18 "/test/10.5_dbg/sql/sql_statistics.h", line=line@entry=177, function=function@entry=0x55b5bfd42ca0 <Histogram::get_value(unsigned int)::__PRETTY_FUNCTION__> "uint Histogram::get_value(uint)") at assert.c:92
#7  0x000014cc789c04a2 in __GI___assert_fail (assertion=assertion@entry=0x55b5bfd42a04 "i < get_width()", file=file@entry=0x55b5bfd42a18 "/test/10.5_dbg/sql/sql_statistics.h", line=line@entry=177, function=function@entry=0x55b5bfd42ca0 <Histogram::get_value(unsigned int)::__PRETTY_FUNCTION__> "uint Histogram::get_value(uint)") at assert.c:101
#8  0x000055b5bf1794b0 in Histogram::get_value (i=0, this=0x14cc56c57148) at /test/10.5_dbg/sql/sql_statistics.h:177
#9  Histogram::find_bucket (this=this@entry=0x14cc56c57148, pos=pos@entry=0, first=first@entry=true) at /test/10.5_dbg/sql/sql_statistics.h:207
#10 0x000055b5bf17630a in Histogram::range_selectivity (max_pos=0, min_pos=0, this=0x14cc56c57148) at /test/10.5_dbg/sql/sql_statistics.h:270
#11 get_column_range_cardinality (field=field@entry=0x14cc56c576c8, min_endp=min_endp@entry=0x14cc7a737580, max_endp=max_endp@entry=0x14cc7a7375a0, range_flag=range_flag@entry=4) at /test/10.5_dbg/sql/sql_statistics.cc:3836
#12 0x000055b5bf50e322 in records_in_column_ranges (tree=0x14cc56d90238, idx=0, param=0x14cc7a737af0) at /test/10.5_dbg/sql/opt_range.cc:3251
#13 calculate_cond_selectivity_for_table (thd=0x14cc56c15088, table=0x14cc56c51188, cond=cond@entry=0x14cc56c765f8) at /test/10.5_dbg/sql/opt_range.cc:3514
#14 0x000055b5bf13b739 in make_join_statistics (keyuse_array=0x14cc56c764d8, tables_list=<optimized out>, join=0x14cc56c761e8) at /test/10.5_dbg/sql/sql_select.cc:5460
#15 JOIN::optimize_inner (this=this@entry=0x14cc56c761e8) at /test/10.5_dbg/sql/sql_select.cc:2247
#16 0x000055b5bf13c3b3 in JOIN::optimize (this=this@entry=0x14cc56c761e8) at /test/10.5_dbg/sql/sql_select.cc:1623
#17 0x000055b5bf13cd40 in mysql_select (thd=thd@entry=0x14cc56c15088, tables=<optimized out>, fields=@0x14cc56c742f8: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14cc56c74758, last = 0x14cc56c76a20, elements = 2}, <No data fields>}, conds=0x14cc56c75718, og_num=0, order=<optimized out>, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x14cc56c761c0, unit=0x14cc56c19220, select_lex=0x14cc56c741a8) at /test/10.5_dbg/sql/sql_select.cc:4649
#18 0x000055b5bf13d0bc in handle_select (thd=thd@entry=0x14cc56c15088, lex=lex@entry=0x14cc56c19158, result=result@entry=0x14cc56c761c0, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.5_dbg/sql/sql_select.cc:417
#19 0x000055b5bf0c4348 in execute_sqlcom_select (thd=thd@entry=0x14cc56c15088, all_tables=0x14cc56c747a0) at /test/10.5_dbg/sql/sql_parse.cc:6210
#20 0x000055b5bf0bd41c in mysql_execute_command (thd=thd@entry=0x14cc56c15088) at /test/10.5_dbg/sql/sql_parse.cc:3932
#21 0x000055b5bf0ca324 in mysql_parse (thd=thd@entry=0x14cc56c15088, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x14cc7a739350, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:7994
#22 0x000055b5bf0b6d54 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x14cc56c15088, packet=packet@entry=0x14cc56c67089 "SELECT * FROM t WHERE c2 >= '2000-00-01 00:00:00' AND c2 < '2020-10-10 00:00:00'", packet_length=packet_length@entry=80, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:1867
#23 0x000055b5bf0b553e in do_command (thd=0x14cc56c15088) at /test/10.5_dbg/sql/sql_parse.cc:1348
#24 0x000055b5bf214893 in do_handle_one_connection (connect=<optimized out>, connect@entry=0x14cc598d4808, put_in_cache=put_in_cache@entry=true) at /test/10.5_dbg/sql/sql_connect.cc:1410
#25 0x000055b5bf214fb7 in handle_one_connection (arg=arg@entry=0x14cc598d4808) at /test/10.5_dbg/sql/sql_connect.cc:1312
#26 0x000055b5bf67f5c2 in pfs_spawn_thread (arg=0x14cc77446508) at /test/10.5_dbg/storage/perfschema/pfs.cc:2201
#27 0x000014cc796b36db in start_thread (arg=0x14cc7a73a700) at pthread_create.c:463
#28 0x000014cc78ab1a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.4.15 (dbg), 10.5.6 (dbg), 10.6.0 (dbg)

Bug confirmed not present in:
MariaDB: 10.1.47 (dbg), 10.1.47 (opt), 10.2.34 (dbg), 10.2.34 (opt), 10.3.25 (dbg), 10.3.25 (opt), 10.4.15 (opt), 10.5.6 (opt), 10.6.0 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.49 (dbg), 5.6.49 (opt), 5.7.31 (dbg), 5.7.31 (opt), 8.0.21 (dbg), 8.0.21 (opt)

Comment by Roel Van de Paar [ 2022-02-19 ]

Two new stacks with this testcase. This testcase is 10.4+ only.

SET histogram_size=1,use_stat_tables=PREFERABLY;
CREATE TABLE t (c INT);
INSERT INTO t VALUES (0);
ANALYZE TABLE t;
SELECT * FROM t WHERE c<1;

Leads to:

10.9.0 b5852ffbeebc3000982988383daeefb0549e058a (Debug)

mysqld: /test/10.9_dbg/sql/sql_statistics.h:259: uint Histogram_binary::get_value(uint): Assertion `i < get_width()' failed.

10.9.0 b5852ffbeebc3000982988383daeefb0549e058a (Debug)

Core was generated by `/test/MD140222-mariadb-10.9.0-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
[Current thread is 1 (Thread 0x14aa841e9700 (LWP 2923417))]
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x000014aaa429f859 in __GI_abort () at abort.c:79
#2  0x000014aaa429f729 in __assert_fail_base (fmt=0x14aaa4435588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x555b5427b457 "i < get_width()", file=0x555b5427ad08 "/test/10.9_dbg/sql/sql_statistics.h", line=259, function=<optimized out>) at assert.c:92
#3  0x000014aaa42b0f36 in __GI___assert_fail (assertion=assertion@entry=0x555b5427b457 "i < get_width()", file=file@entry=0x555b5427ad08 "/test/10.9_dbg/sql/sql_statistics.h", line=line@entry=259, function=function@entry=0x555b5427b430 "uint Histogram_binary::get_value(uint)") at assert.c:101
#4  0x0000555b5365de65 in Histogram_binary::get_value (i=<optimized out>, this=0x14aa00020880) at /test/10.9_dbg/sql/sql_statistics.h:259
#5  Histogram_binary::find_bucket (this=this@entry=0x14aa00020880, pos=pos@entry=0, first=first@entry=true) at /test/10.9_dbg/sql/sql_statistics.h:291
#6  0x0000555b53653ed1 in Histogram_binary::range_selectivity (this=0x14aa00020880, field=<optimized out>, min_endp=<optimized out>, max_endp=0x14aa841e6790, avg_sel=1) at /test/10.9_dbg/sql/sql_statistics.cc:4106
#7  0x0000555b5365abf6 in get_column_range_cardinality (field=field@entry=0x14aa00028e18, min_endp=min_endp@entry=0x14aa841e6770, max_endp=max_endp@entry=0x14aa841e6790, range_flag=range_flag@entry=4) at /test/10.9_dbg/sql/sql_statistics.cc:3916
#8  0x0000555b53469064 in records_in_column_ranges (tree=0x14aa00081150, idx=0, param=0x14aa841e6df0) at /test/10.9_dbg/sql/opt_range.cc:3279
#9  calculate_cond_selectivity_for_table (thd=0x14aa00000db8, table=0x14aa0006e498, cond=cond@entry=0x14aa00015cb8) at /test/10.9_dbg/sql/opt_range.cc:3562
#10 0x0000555b53619758 in make_join_statistics (join=join@entry=0x14aa00015868, tables_list=@0x14aa00014088: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14aa00015e20, last = 0x14aa00015e20, elements = 1}, <No data fields>}, keyuse_array=keyuse_array@entry=0x14aa00015b88) at /test/10.9_dbg/sql/sql_select.cc:5806
#11 0x0000555b53620e50 in JOIN::optimize_inner (this=this@entry=0x14aa00015868) at /test/10.9_dbg/sql/sql_select.cc:2466
#12 0x0000555b536211dc in JOIN::optimize (this=this@entry=0x14aa00015868) at /test/10.9_dbg/sql/sql_select.cc:1808
#13 0x0000555b53621880 in mysql_select (thd=thd@entry=0x14aa00000db8, tables=0x14aa00014448, fields=@0x14aa00014110: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14aa00014400, last = 0x14aa00014400, elements = 1}, <No data fields>}, conds=0x14aa00014ce0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x14aa00015840, unit=0x14aa000051c8, select_lex=0x14aa00013e70) at /test/10.9_dbg/sql/sql_select.cc:4993
#14 0x0000555b53621b84 in handle_select (thd=thd@entry=0x14aa00000db8, lex=lex@entry=0x14aa000050f0, result=result@entry=0x14aa00015840, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.9_dbg/sql/sql_select.cc:543
#15 0x0000555b53581124 in execute_sqlcom_select (thd=thd@entry=0x14aa00000db8, all_tables=0x14aa00014448) at /test/10.9_dbg/sql/sql_parse.cc:6252
#16 0x0000555b5358e08b in mysql_execute_command (thd=thd@entry=0x14aa00000db8, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.9_dbg/sql/sql_parse.cc:3943
#17 0x0000555b5357a315 in mysql_parse (thd=thd@entry=0x14aa00000db8, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x14aa841e8400) at /test/10.9_dbg/sql/sql_parse.cc:8027
#18 0x0000555b53588fb1 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x14aa00000db8, packet=packet@entry=0x14aa0000b889 "SELECT * FROM t WHERE c<1", packet_length=packet_length@entry=25, blocking=blocking@entry=true) at /test/10.9_dbg/sql/sql_class.h:1362
#19 0x0000555b5358c3f8 in do_command (thd=0x14aa00000db8, blocking=blocking@entry=true) at /test/10.9_dbg/sql/sql_parse.cc:1402
#20 0x0000555b53706fc4 in do_handle_one_connection (connect=<optimized out>, connect@entry=0x555b560fe478, put_in_cache=put_in_cache@entry=true) at /test/10.9_dbg/sql/sql_connect.cc:1418
#21 0x0000555b537075c9 in handle_one_connection (arg=arg@entry=0x555b560fe478) at /test/10.9_dbg/sql/sql_connect.cc:1312
#22 0x0000555b53b8dd67 in pfs_spawn_thread (arg=0x555b560115d8) at /test/10.9_dbg/storage/perfschema/pfs.cc:2201
#23 0x000014aaa47ae609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#24 0x000014aaa439c293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

10.7.2 3351dfaab0599268eaf25f9d6995ef128910a8b9 (Debug)

mysqld: /test/10.7_dbg/sql/sql_statistics.h:177: uint Histogram::get_value(uint): Assertion `i < get_width()' failed.

10.7.2 3351dfaab0599268eaf25f9d6995ef128910a8b9 (Debug)

Core was generated by `/test/MD290122-mariadb-10.7.2-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
[Current thread is 1 (Thread 0x145c8c9d5700 (LWP 2923690))]
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x0000145c96c39859 in __GI_abort () at abort.c:79
#2  0x0000145c96c39729 in __assert_fail_base (fmt=0x145c96dcf588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x557282c73e44 "i < get_width()", file=0x557282c73e58 "/test/10.7_dbg/sql/sql_statistics.h", line=177, function=<optimized out>) at assert.c:92
#3  0x0000145c96c4af36 in __GI___assert_fail (assertion=assertion@entry=0x557282c73e44 "i < get_width()", file=file@entry=0x557282c73e58 "/test/10.7_dbg/sql/sql_statistics.h", line=line@entry=177, function=function@entry=0x557282c73e80 "uint Histogram::get_value(uint)") at assert.c:101
#4  0x0000557282064246 in Histogram::get_value (i=<optimized out>, this=0x145c0c080ce8) at /test/10.7_dbg/sql/sql_statistics.h:167
#5  Histogram::find_bucket (this=this@entry=0x145c0c080ce8, pos=pos@entry=0, first=first@entry=true) at /test/10.7_dbg/sql/sql_statistics.h:207
#6  0x0000557282061271 in Histogram::range_selectivity (max_pos=1, min_pos=0, this=0x145c0c080ce8) at /test/10.7_dbg/sql/sql_statistics.h:281
#7  get_column_range_cardinality (field=field@entry=0x145c0c028de8, min_endp=min_endp@entry=0x145c8c9d2880, max_endp=max_endp@entry=0x145c8c9d28a0, range_flag=range_flag@entry=4) at /test/10.7_dbg/sql/sql_statistics.cc:3824
#8  0x0000557281e60934 in records_in_column_ranges (tree=0x145c0c081150, idx=0, param=0x145c8c9d2df0) at /test/10.7_dbg/sql/opt_range.cc:3273
#9  calculate_cond_selectivity_for_table (thd=0x145c0c000db8, table=0x145c0c06e268, cond=cond@entry=0x145c0c015ca8) at /test/10.7_dbg/sql/opt_range.cc:3536
#10 0x000055728201f4b0 in make_join_statistics (join=join@entry=0x145c0c015858, tables_list=@0x145c0c014078: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x145c0c015e10, last = 0x145c0c015e10, elements = 1}, <No data fields>}, keyuse_array=keyuse_array@entry=0x145c0c015b78) at /test/10.7_dbg/sql/sql_select.cc:5792
#11 0x0000557282026b7b in JOIN::optimize_inner (this=this@entry=0x145c0c015858) at /test/10.7_dbg/sql/sql_select.cc:2453
#12 0x0000557282026f06 in JOIN::optimize (this=this@entry=0x145c0c015858) at /test/10.7_dbg/sql/sql_select.cc:1809
#13 0x00005572820275aa in mysql_select (thd=thd@entry=0x145c0c000db8, tables=0x145c0c014438, fields=@0x145c0c014100: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x145c0c0143f0, last = 0x145c0c0143f0, elements = 1}, <No data fields>}, conds=0x145c0c014cd0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x145c0c015830, unit=0x145c0c0051c0, select_lex=0x145c0c013e60) at /test/10.7_dbg/sql/sql_select.cc:4979
#14 0x00005572820278ae in handle_select (thd=thd@entry=0x145c0c000db8, lex=lex@entry=0x145c0c0050e8, result=result@entry=0x145c0c015830, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.7_dbg/sql/sql_select.cc:545
#15 0x0000557281f86d26 in execute_sqlcom_select (thd=thd@entry=0x145c0c000db8, all_tables=0x145c0c014438) at /test/10.7_dbg/sql/sql_parse.cc:6252
#16 0x0000557281f93c8d in mysql_execute_command (thd=thd@entry=0x145c0c000db8, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.7_dbg/sql/sql_parse.cc:3943
#17 0x0000557281f7ff17 in mysql_parse (thd=thd@entry=0x145c0c000db8, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x145c8c9d4400) at /test/10.7_dbg/sql/sql_parse.cc:8027
#18 0x0000557281f8ebb3 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x145c0c000db8, packet=packet@entry=0x145c0c00b879 "SELECT * FROM t WHERE c<1", packet_length=packet_length@entry=25, blocking=blocking@entry=true) at /test/10.7_dbg/sql/sql_class.h:1360
#19 0x0000557281f91ffa in do_command (thd=0x145c0c000db8, blocking=blocking@entry=true) at /test/10.7_dbg/sql/sql_parse.cc:1402
#20 0x000055728210ba44 in do_handle_one_connection (connect=<optimized out>, connect@entry=0x557285430228, put_in_cache=put_in_cache@entry=true) at /test/10.7_dbg/sql/sql_connect.cc:1418
#21 0x000055728210c049 in handle_one_connection (arg=arg@entry=0x557285430228) at /test/10.7_dbg/sql/sql_connect.cc:1312
#22 0x000055728258c8b0 in pfs_spawn_thread (arg=0x557285343cc8) at /test/10.7_dbg/storage/perfschema/pfs.cc:2201
#23 0x0000145c97148609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#24 0x0000145c96d36293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.4.23 (dbg), 10.5.14 (dbg), 10.6.6 (dbg), 10.7.2 (dbg), 10.8.1 (dbg), 10.9.0 (dbg)

Bug (or feature/syntax) confirmed not present in:
MariaDB: 10.2.42 (dbg), 10.2.42 (opt), 10.3.33 (dbg), 10.3.33 (opt), 10.4.23 (opt), 10.5.14 (opt), 10.6.6 (opt), 10.7.2 (opt), 10.8.1 (opt), 10.9.0 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.51 (dbg), 5.6.51 (opt), 5.7.36 (dbg), 5.7.36 (opt), 8.0.27 (dbg), 8.0.27 (opt)

Comment by Roel Van de Paar [ 2023-09-05 ]

Another stack with this testcase:

SET histogram_size=5;
CREATE TABLE t (c INT) ENGINE=InnoDB;
INSERT INTO t VALUES (10),(20);
INSERT INTO t (c) VALUES (10);
INSERT INTO t (c) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
ANALYZE TABLE t PERSISTENT FOR ALL;
SELECT + 1 FROM t WHERE c='100001';

Leads to:

10.10.6 b1b47264d2ef1fa80b90f308e81c49d9a1011d56 (Debug)

mariadbd: /test/10.10_dbg/sql/sql_statistics.h:259: uint Histogram_binary::get_value(uint): Assertion `i < get_width()' failed.

10.10.6 b1b47264d2ef1fa80b90f308e81c49d9a1011d56 (Debug)

Core was generated by `/test/MD010823-mariadb-10.10.6-linux-x86_64-dbg/bin/mariadbd --no-defaults --co'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=22486008555072)
    at ./nptl/pthread_kill.c:44
[Current thread is 1 (Thread 0x14736e8d6640 (LWP 2806787))]
(gdb) bt
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=22486008555072) at ./nptl/pthread_kill.c:44
#1  __pthread_kill_internal (signo=6, threadid=22486008555072) at ./nptl/pthread_kill.c:78
#2  __GI___pthread_kill (threadid=22486008555072, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3  0x000014739cc42476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4  0x000014739cc287f3 in __GI_abort () at ./stdlib/abort.c:79
#5  0x000014739cc2871b in __assert_fail_base (fmt=0x14739cddd150 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x563307015c57 "i < get_width()", file=0x563307015708 "/test/10.10_dbg/sql/sql_statistics.h", line=259, function=<optimized out>) at ./assert/assert.c:92
#6  0x000014739cc39e96 in __GI___assert_fail (assertion=0x563307015c57 "i < get_width()", file=0x563307015708 "/test/10.10_dbg/sql/sql_statistics.h", line=259, function=0x563307015c30 "uint Histogram_binary::get_value(uint)") at ./assert/assert.c:101
#7  0x000056330658354d in Histogram_binary::get_value (i=2, this=0x1472fc0524a0) at /test/10.10_dbg/sql/sql_statistics.h:259
#8  Histogram_binary::find_bucket (this=this@entry=0x1472fc0524a0, pos=pos@entry=1, first=first@entry=true) at /test/10.10_dbg/sql/sql_statistics.h:285
#9  0x000056330657bf43 in Histogram_binary::point_selectivity (this=0x1472fc0524a0, field=<optimized out>, endpoint=0x14736e8d35e0, avg_sel=0.083330769230769222) at /test/10.10_dbg/sql/sql_statistics.cc:3998
#10 0x0000563306580652 in get_column_range_cardinality (field=field@entry=0x1472fc026888, min_endp=min_endp@entry=0x14736e8d35e0, max_endp=max_endp@entry=0x14736e8d3600, range_flag=range_flag@entry=48) at /test/10.10_dbg/sql/sql_statistics.cc:3894
#11 0x00005633063ca1fb in records_in_column_ranges (tree=0x1472fc078730, idx=0, param=0x14736e8d3c60) at /test/10.10_dbg/sql/opt_range.cc:3281
#12 calculate_cond_selectivity_for_table (thd=0x1472fc000d58, table=0x1472fc025bd8, cond=cond@entry=0x1472fc0150f8) at /test/10.10_dbg/sql/opt_range.cc:3566
#13 0x0000563306546b95 in make_join_statistics (join=join@entry=0x1472fc014c70, tables_list=@0x1472fc013470: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1472fc015408, last = 0x1472fc015408, elements = 1}, <No data fields>}, keyuse_array=keyuse_array@entry=0x1472fc014fc8) at /test/10.10_dbg/sql/sql_select.cc:5933
#14 0x000056330654de1e in JOIN::optimize_inner (this=this@entry=0x1472fc014c70) at /test/10.10_dbg/sql/sql_select.cc:2559
#15 0x000056330654e312 in JOIN::optimize (this=this@entry=0x1472fc014c70) at /test/10.10_dbg/sql/sql_select.cc:1895
#16 0x000056330654e402 in mysql_select (thd=thd@entry=0x1472fc000d58, tables=0x1472fc0137d8, fields=@0x1472fc013510: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1472fc013790, last = 0x1472fc013790, elements = 1}, <No data fields>}, conds=0x1472fc0140b0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2164525824, result=0x1472fc014c48, unit=0x1472fc004fd0, select_lex=0x1472fc013258) at /test/10.10_dbg/sql/sql_select.cc:5098
#17 0x000056330654ebc8 in handle_select (thd=thd@entry=0x1472fc000d58, lex=lex@entry=0x1472fc004ef8, result=result@entry=0x1472fc014c48, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.10_dbg/sql/sql_select.cc:586
#18 0x00005633064b7b52 in execute_sqlcom_select (thd=thd@entry=0x1472fc000d58, all_tables=0x1472fc0137d8) at /test/10.10_dbg/sql/sql_parse.cc:6278
#19 0x00005633064c2f7c in mysql_execute_command (thd=thd@entry=0x1472fc000d58, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.10_dbg/sql/sql_parse.cc:3948
#20 0x00005633064ca2f5 in mysql_parse (thd=thd@entry=0x1472fc000d58, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x14736e8d5200) at /test/10.10_dbg/sql/sql_parse.cc:8046
#21 0x00005633064cc489 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x1472fc000d58, packet=packet@entry=0x1472fc00ae79 "SELECT + 1 FROM t WHERE c='100001'", packet_length=packet_length@entry=34, blocking=blocking@entry=true) at /test/10.10_dbg/sql/sql_class.h:244
#22 0x00005633064ce364 in do_command (thd=0x1472fc000d58, blocking=blocking@entry=true) at /test/10.10_dbg/sql/sql_parse.cc:1407
#23 0x000056330661b3c2 in do_handle_one_connection (connect=<optimized out>, connect@entry=0x563309e04188, put_in_cache=put_in_cache@entry=true) at /test/10.10_dbg/sql/sql_connect.cc:1416
#24 0x000056330661b621 in handle_one_connection (arg=0x563309e04188) at /test/10.10_dbg/sql/sql_connect.cc:1318
#25 0x000014739cc94b43 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#26 0x000014739cd26a00 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

10.6-10.11 affected (with two different stacks), debug only.

Generated at Thu Feb 08 09:20:13 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.