Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.2.8, 10.2(EOL)
-
None
Description
A production server repeatedly crashed when trying to do an
ALTER TABLE ... ADD COLUMN ... AFTER ...
The assertion failure happened in row_merge_drop_table() from
storage/innobase/row/row0merge.cc which is only called when
using ALGORITHM=INPLACE, so explicitly usign =COPY helped
as a workaround here.
/* There must be no open transactions on the table. */
|
ut_a(table->get_ref_count() == 0);
|
Several other client connections were active in parallel to ALTER TABLE.
On a test system with less client traffic the problem was not reproducible.
2017-09-13 06:04:31 0x7f79cfacb700 InnoDB: Assertion failure in file /home/buildbot/buildbot/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/mariadb-10.2.8/storage/innobase/row/row0merge.cc line 4569
|
InnoDB: Failing assertion: table->get_ref_count() == 0
|
InnoDB: We intentionally generate a memory trap.
|
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
|
InnoDB: If you get repeated assertion failures or crashes, even
|
InnoDB: immediately after the mysqld startup, there may be
|
InnoDB: corruption in the InnoDB tablespace. Please refer to
|
InnoDB: http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html
|
InnoDB: about forcing recovery.
|
170913 6:04:31 [ERROR] mysqld got signal 6 ;
|
This could be because you hit a bug. It is also possible that this binary
|
or one of the libraries it was linked against is corrupt, improperly built,
|
or misconfigured. This error can also be caused by malfunctioning hardware.
|
|
To report this bug, see https://mariadb.com/kb/en/reporting-bugs
|
|
We will try our best to scrape up some info that will hopefully help
|
diagnose the problem, but since we have already crashed,
|
something is definitely wrong and this may fail.
|
|
Server version: 10.2.8-MariaDB-log
|
key_buffer_size=33554432
|
read_buffer_size=131072
|
max_used_connections=110
|
max_threads=502
|
thread_count=117
|
It is possible that mysqld could use up to
|
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 1135719 K bytes of memory
|
Hope that's ok; if not, decrease some variables in the equation.
|
|
Thread pointer: 0x7f7834000bd8
|
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...
|
stack_bottom = 0x7f79cfacad40 thread_stack 0x49000
|
(my_addr_resolve failure: fork)
|
/usr/sbin/mysqld(my_print_stacktrace+0x2e) [0x7f80e3506a7e]
|
/usr/sbin/mysqld(handle_fatal_signal+0x30d) [0x7f80e2f4cdbd]
|
/lib64/libpthread.so.0(+0xf370) [0x7f80e24b5370]
|
/lib64/libc.so.6(gsignal+0x37) [0x7f80e0a3e1d7]
|
/lib64/libc.so.6(abort+0x148) [0x7f80e0a3f8c8]
|
/usr/sbin/mysqld(+0x423578) [0x7f80e2d08578]
|
/usr/sbin/mysqld(+0x91613c) [0x7f80e31fb13c]
|
/usr/sbin/mysqld(+0x86475f) [0x7f80e314975f]
|
/usr/sbin/mysqld(+0x4180b1) [0x7f80e2cfd0b1]
|
/usr/sbin/mysqld(mysql_alter_table(THD*, char*, char*, HA_CREATE_INFO*, TABLE_LIST*, Alter_info*, unsigned int, st_order*, bool)+0x3a29) [0x7f80e2e46d99]
|
/usr/sbin/mysqld(Sql_cmd_alter_table::execute(THD*)+0x63a) [0x7f80e2e8f3ea]
|
/usr/sbin/mysqld(mysql_execute_command(THD*)+0x14eb) [0x7f80e2dbd3fb]
|
/usr/sbin/mysqld(mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool)+0x2de) [0x7f80e2dc50ae]
|
/usr/sbin/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool)+0x203d) [0x7f80e2dc805d]
|
/usr/sbin/mysqld(do_command(THD*)+0x149) [0x7f80e2dc8c69]
|
/usr/sbin/mysqld(do_handle_one_connection(CONNECT*)+0x1aa) [0x7f80e2e8c5da]
|
/usr/sbin/mysqld(handle_one_connection+0x3d) [0x7f80e2e8c6fd]
|
/usr/sbin/mysqld(+0x81bc0d) [0x7f80e3100c0d]
|
/lib64/libpthread.so.0(+0x7dc5) [0x7f80e24addc5]
|
/lib64/libc.so.6(clone+0x6d) [0x7f80e0b0076d]
|
|
Trying to get some variables.
|
Some pointers may be invalid and cause the dump to abort.
|
Query (0x7f783400f010): Alter table `...dbname...`.`...tablename...` add column `...some_column...` text NULL after `...other_column...`
|
Connection ID (thread ID): 595304
|
Status: NOT_KILLED
|
|
Optimizer switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=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,exists_to_in=on,orderby_uses_equalities=on,condition_pushdown_for_derived=on
|
|
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
|
information that should help you find out what is causing the crash.
|
Attachments
Issue Links
- relates to
-
MDEV-13918 Race condition between INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS and ALTER/DROP/TRUNCATE TABLE
- Closed
-
MDEV-15776 Failing assertion: table->get_ref_count() == 0 or user_table->get_ref_count() == 1 when running ALTER TABLE
- Closed