Bug #67596 | mysqld critical failure during ordered select from ndbinfo.cluster_operations | ||
---|---|---|---|
Submitted: | 15 Nov 2012 8:24 | Modified: | 12 May 2015 16:25 |
Reporter: | Олег Ненашев | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Cluster: Cluster (NDB) storage engine | Severity: | S2 (Serious) |
Version: | 7.2.6,7.2.12 | OS: | Linux (Oracle Enterprise Linux 6.2) |
Assigned to: | CPU Architecture: | Any | |
Tags: | mysqld; ndbinfo |
[15 Nov 2012 8:24]
Олег Ненашев
[15 Nov 2012 8:24]
Олег Ненашев
Error log
Attachment: mysqld.error.log (application/octet-stream, text), 4.47 KiB.
[15 Nov 2012 8:25]
Олег Ненашев
Result of "select * from ndbinfo.cluster_operations"
Attachment: cluster_operations_content.csv (application/vnd.ms-excel, text), 53.31 KiB.
[15 Nov 2012 17:54]
MySQL Verification Team
what is your sort_buffer_size variable set to? Does this work better: set session sort_buffer_size=1024*1024*8; select * from cluster_operations order by transid LIMIT 0, 1000; regards, Shane (Not a cluster person) :)
[21 Nov 2012 9:51]
Олег Ненашев
Yes, that works fine. Anyway, I suppose that mysqld shouldn't terminate after such errors, because user can send any request :(
[26 Apr 2013 14:45]
MySQL Verification Team
Hello Oleg, Thank you for the report. Verified as described on reported and later versions including GA. Thanks, Umesh
[26 Apr 2013 14:47]
MySQL Verification Team
Repeatable on latest GA 7.2.12 ############### Resolved stack trace stack_bottom = 7fb1cc51fe68 thread_stack 0x40000 mysqld(my_print_stacktrace+0x35)[0x81d315] mysqld(handle_fatal_signal+0x403)[0x6e94f3] /lib64/libpthread.so.0[0x3b2560f500] /lib64/libc.so.6(memcpy+0xd2)[0x3b24e89122] mysqld(merge_buffers(st_sort_param*, st_io_cache*, st_io_cache*, unsigned char*, st_buffpek*, st_buffpek*, st_buffpek*, int)+0x3fd)[0x6e6a7d] mysqld(filesort(THD*, TABLE*, st_sort_field*, unsigned int, SQL_SELECT*, unsigned long long, bool, unsigned long long*)+0x1dd0)[0x6e8fd0] mysqld[0x6200e6] mysqld(JOIN::exec()+0x80a)[0x62bcba] mysqld(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*) P13st_select_lex+0x1c3)[0x627ba3] mysqld(handle_select(THD*, LEX*, select_result*, unsigned long)+0x179)[0x62d939] mysqld[0x5eab31] mysqld(mysql_execute_command(THD*)+0x269b)[0x5f060b] mysqld(mysql_parse(THD*, char*, unsigned int, Parser_state*)+0x18a)[0x5f27da] mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0x1331)[0x5f4391] mysqld(do_handle_one_connection(THD*)+0x167)[0x68d957] mysqld(handle_one_connection+0x54)[0x68d9c4] ############# How to repeat: *** Set big TransactionDeadlockDetectionTimeout ## MySQL Session <one> create database if not exists test; use test; drop table if exists keyvalue; CREATE TABLE `keyvalue` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(40), PRIMARY KEY (`id`) ) ENGINE=NDB; set @id:=0; insert into `keyvalue` values (@id:=@id+1,md5(rand()*1000000)),(@id:=@id+1,md5(rand()*1000000)),(@id:=@id+1,md5(rand()*1000000)),(@id:=@id+1,md5(rand()*1000000)); insert into `keyvalue`(`id`,`name`) select @id:=@id+1,md5(rand()*1000000) from `keyvalue` k1, `keyvalue` k2, `keyvalue` k3, `keyvalue` k4,`keyvalue` k5,`keyvalue` k6, `keyvalue` k7, `keyvalue` k8, `keyvalue` k9, `keyvalue` k0,`keyvalue` ka, `keyvalue` kb, `keyvalue` kc, `keyvalue` kd limit 5000000; ## MySQL Session <two> mysql> select version(); +-----------------------------------------------+ | version() | +-----------------------------------------------+ | 5.5.30-ndb-7.2.12-cluster-commercial-advanced | +-----------------------------------------------+ mysql> show variables like 'sort_buffer_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sort_buffer_size | 32768 | +------------------+-------+ select * from ndbinfo.cluster_operations order by transid LIMIT 0, 1000; ## Workaround as suggested by Shane set session sort_buffer_size=1024*1024*8; select * from cluster_operations order by transid LIMIT 0, 1000;
[12 May 2015 16:25]
Jon Stephens
Fixed in NDB 7.5.0. Will be documented in the NDB 7.5.0 changelog (when we have one) as follows: When using a sufficiently large value for TransactionDeadlockDetectionTimeout and the default value for sort_buffer_size, executing SELECT * FROM ndbinfo.cluster_operations ORDER BY transid with multiple concurrent conflicting or deadlocked transactions, each transaction having several pending operations, caused the SQL node where the query was run to fail. Closed.