Bug #96125 | Using index for skip scan, Mysql server core down | ||
---|---|---|---|
Submitted: | 8 Jul 2019 14:02 | Modified: | 8 Jul 2019 15:25 |
Reporter: | juncai meng | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S6 (Debug Builds) |
Version: | 8.0.16 | OS: | CentOS |
Assigned to: | CPU Architecture: | Any |
[8 Jul 2019 14:02]
juncai meng
[8 Jul 2019 15:25]
MySQL Verification Team
Release built version aren't affected, will test debug binary: mysql> create database c; Query OK, 1 row affected (0.02 sec) mysql> use c Database changed mysql> DELIMITER $$ mysql> mysql> CREATE PROCEDURE test() -> begin -> declare num_temp int; -> set num_temp=0; -> -> while num_temp<2000 do -> INSERT INTO STRG_PARTRANGE_TBL_001 VALUES ( -> num_temp+1, -> num_temp+1, -> 234213542352134, -> 100.2, -> 123523.2132, -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'q2', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'dfecddfecddfecddfecd', -> 'dfecddfecddfecddfecd', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'sw', -> 'ewfxejdsk', -> 'wedjkswikilsdcnr', -> curtime(), -> '21', -> 12342124.23, -> 0.2, -> 2323423.56, -> 2342324.3454, -> 1200234.235, -> true, -> now(), -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds', -> 'wevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbdswevfwbds' -> ); -> set num_temp=num_temp+1; -> end while; -> end; -> $$ Query OK, 0 rows affected (0.02 sec) mysql> mysql> DELIMITER ; mysql> mysql> create table STRG_PARTRANGE_TBL_001( -> c_id INT, -> C_D_ID INTEGER NOT NULL, -> C_W_ID BIGINT NOT NULL, -> C_DOUBLE DOUBLE NOT NULL, -> C_DECIMAL DECIMAL NOT NULL, -> C_FIRST VARCHAR(64) NOT NULL, -> C_MIDDLE CHAR(2), -> C_LAST VARCHAR(64) NOT NULL, -> C_STREET_1 VARCHAR(20) NOT NULL, -> C_STREET_2 VARCHAR(20), -> C_CITY VARCHAR(64) NOT NULL, -> C_STATE CHAR(2) NOT NULL, -> C_ZIP CHAR(9) NOT NULL, -> C_PHONE CHAR(16) NOT NULL, -> C_SINCE TIMESTAMP, -> C_CREDIT CHAR(2) NOT NULL, -> C_CREDIT_LIM NUMERIC(12,2), -> C_DISCOUNT NUMERIC(4,4), -> C_BALANCE NUMERIC(12,2), -> C_YTD_PAYMENT REAL NOT NULL, -> C_PAYMENT_CNT FLOAT NOT NULL, -> C_DELIVERY_CNT BOOLEAN NOT NULL, -> C_END DATE NOT NULL, -> C_VCHAR VARCHAR(1000), -> C_DATA TEXT, -> C_TEXT BLOB, -> C_TINYTEXT TINYTEXT, -> C_MEDIUMBLOB MEDIUMBLOB, -> C_LONGBLOB LONGBLOB, -> primary key (C_ID)) -> partition by range(c_id) -> ( -> partition part_1 values less than (201), -> partition part_2 values less than (401), -> partition part_3 values less than (601), -> partition part_4 values less than (801), -> partition part_5 values less than (1001), -> partition part_6 values less than (1201), -> partition part_7 values less than (1401), -> partition part_8 values less than (1601), -> partition part_9 values less than (1801), -> partition part_10 values less than (2001), -> partition part_11 values less than (maxvalue) -> ); Query OK, 0 rows affected (0.21 sec) mysql> mysql> call test(); Query OK, 1 row affected (6.05 sec) mysql> CREATE UNIQUE INDEX STRG_RANGE_INDEX_001_1 ON STRG_PARTRANGE_TBL_001(c_id); Query OK, 0 rows affected (0.38 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> CREATE INDEX STRG_RANGE_INDEX_001_3 ON STRG_PARTRANGE_TBL_001(C_FIRST); Query OK, 0 rows affected (0.40 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> mysql> delete from STRG_PARTRANGE_TBL_001 WHERE (c_id - 2*(floor(c_id/2)))=0; Query OK, 1000 rows affected (0.04 sec) mysql> mysql> explain select count(*) from STRG_PARTRANGE_TBL_001 where c_id<=600; +----+-------------+------------------------+----------------------+-------+-------------------------------------------------------+---------+---------+------+------+----------+--------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------------------+----------------------+-------+-------------------------------------------------------+---------+---------+------+------+----------+--------------------------+ | 1 | SIMPLE | STRG_PARTRANGE_TBL_001 | part_1,part_2,part_3 | range | PRIMARY,STRG_RANGE_INDEX_001_1,STRG_RANGE_INDEX_001_3 | PRIMARY | 4 | NULL | 150 | 100.00 | Using where; Using index | +----+-------------+------------------------+----------------------+-------+-------------------------------------------------------+---------+---------+------+------+----------+--------------------------+ 1 row in set, 1 warning (0.00 sec) mysql> mysql> select count(*) from STRG_PARTRANGE_TBL_001 where c_id<=600; +----------+ | count(*) | +----------+ | 300 | +----------+ 1 row in set (0.00 sec) mysql> show variables like "%version%"; +--------------------------+------------------------------+ | Variable_name | Value | +--------------------------+------------------------------+ | immediate_server_version | 999999 | | innodb_version | 8.0.16 | | original_server_version | 999999 | | protocol_version | 10 | | slave_type_conversions | | | tls_version | TLSv1,TLSv1.1,TLSv1.2 | | version | 8.0.16 | | version_comment | MySQL Community Server - GPL | | version_compile_machine | x86_64 | | version_compile_os | Win64 | | version_compile_zlib | 1.2.11 | +--------------------------+------------------------------+ 11 rows in set (0.00 sec) mysql>
[8 Jul 2019 15:27]
MySQL Verification Team
Thank you for the bug report, debug built affected: d:\dbs>d:\dbs\8.0\bin\mysqld --defaults-file=d:\dbs\my80.ini --standalone --console 2019-07-08T15:19:35.733643Z 0 [System] [MY-010116] [Server] d:\dbs\8.0\bin\mysqld (mysqld 8.0.18-debug) starting as process 10888 2019-07-08T15:19:43.465967Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 2019-07-08T15:19:43.886116Z 0 [System] [MY-010931] [Server] d:\dbs\8.0\bin\mysqld: ready for connections. Version: '8.0.18-debug' socket: '' port: 3580 Source distribution BUILT: 2019-JUL-05. 2019-07-08T15:19:44.097745Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060 Assertion failed: bitmap_is_set(key_info->table->read_set, key_info->key_part->field->field_index), file D:\build\2019JUL05\mysql-8.0\sql\key.cc, line 593 abort() has been called15:19:58 UTC - mysqld got exception 0x80000003 ; Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware. Thread pointer: 0x1ff22283050 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... 7ff7d639bc85 mysqld.exe!my_sigabrt_handler()[my_thr_init.cc:372] 7ffd3b75c3e1 ucrtbased.dll!raise() 7ffd3b75e039 ucrtbased.dll!abort() 7ffd3b763c65 ucrtbased.dll!_get_wide_winmain_command_line() 7ffd3b7637d7 ucrtbased.dll!_get_wide_winmain_command_line() 7ffd3b761868 ucrtbased.dll!_get_wide_winmain_command_line() 7ffd3b7641cf ucrtbased.dll!_wassert() 7ff7d46a11fa mysqld.exe!key_rec_cmp()[key.cc:592] 7ff7d4306774 mysqld.exe!Key_rec_less::operator()()[partition_handler.h:371] 7ff7d4309e61 mysqld.exe!Priority_queue<unsigned char *,std::vector<unsigned char *,std::allocator<unsigned char *> >,Key_rec_less>::heapify()[priority_queue.h:133] 7ff7d430971a mysqld.exe!Priority_queue<unsigned char *,std::vector<unsigned char *,std::allocator<unsigned char *> >,Key_rec_less>::build_heap()[priority_queue.h:201] 7ff7d4309138 mysqld.exe!Priority_queue<unsigned char *,std::vector<unsigned char *,std::allocator<unsigned char *> >,Key_rec_less>::assign()[priority_queue.h:188] 7ff7d430160e mysqld.exe!Partition_helper::handle_ordered_index_scan()[partition_handler.cc:2633] 7ff7d4302f02 mysqld.exe!Partition_helper::common_index_read()[partition_handler.cc:1966] 7ff7d42fc895 mysqld.exe!Partition_helper::ph_read_range_first()[partition_handler.cc:2259] 7ff7d6a6f119 mysqld.exe!ha_innopart::read_range_first()[ha_innopart.h:485] 7ff7d40d104a mysqld.exe!handler::ha_read_range_first()[handler.cc:7161] 7ff7d42c580a mysqld.exe!QUICK_SKIP_SCAN_SELECT::get_next()[opt_range.cc:14865] 7ff7d46a5e16 mysqld.exe!IndexRangeScanIterator::Read()[records.cc:353] 7ff7d4aff72f mysqld.exe!FilterIterator::Read()[composite_iterators.cc:77] 7ff7d4b00614 mysqld.exe!AggregateIterator::Read()[composite_iterators.cc:271] 7ff7d46f1835 mysqld.exe!SELECT_LEX_UNIT::ExecuteIteratorQuery()[sql_union.cc:1499] 7ff7d46f2214 mysqld.exe!SELECT_LEX_UNIT::execute()[sql_union.cc:1571] 7ff7d472c323 mysqld.exe!Sql_cmd_dml::execute_inner()[sql_select.cc:898] 7ff7d472bbe0 mysqld.exe!Sql_cmd_dml::execute()[sql_select.cc:703] 7ff7d43e07d1 mysqld.exe!mysql_execute_command()[sql_parse.cc:4437] 7ff7d43d9520 mysqld.exe!mysql_parse()[sql_parse.cc:5241] 7ff7d43e4149 mysqld.exe!dispatch_command()[sql_parse.cc:1760] 7ff7d43e1f79 mysqld.exe!do_command()[sql_parse.cc:1272] 7ff7d3f739da mysqld.exe!handle_connection()[connection_handler_per_thread.cc:302] 7ff7d6d84685 mysqld.exe!pfs_spawn_thread()[pfs.cc:2856] 7ff7d639a7f7 mysqld.exe!win_thread_start()[my_thread.cc:52] 7ffd3b76542c ucrtbased.dll!_register_onexit_function() 7ffd96a27bd4 KERNEL32.DLL!BaseThreadInitThunk() 7ffd9864ce71 ntdll.dll!RtlUserThreadStart() Trying to get some variables. Some pointers may be invalid and cause the dump to abort. Query (1ff224678d0): select count(*) from STRG_PARTRANGE_TBL_001 where c_id<=600 Connection ID (thread ID): 8 Status: NOT_KILLED