Bug #64951 btr_estimate_number_of_different_key_vals crash in server
Submitted: 12 Apr 2012 9:46 Modified: 17 Apr 2012 20:02
Reporter: Milo van der Zee Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S1 (Critical)
Version:5.1.61 OS:Linux (Gentoo)
Assigned to: CPU Architecture:Any

[12 Apr 2012 9:46] Milo van der Zee
Description:
When I select one of my databases with "use [database name];" the server crashes and has to be restarted. The database uses InnoDB tables. I can select other databases but they don't use InnoDb.

Log:

09:44:01 UTC - mysqld got signal 11 ;
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.
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.

key_buffer_size=33554432
read_buffer_size=262144
max_used_connections=1
max_threads=151
thread_count=1
connection_count=1
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 149698 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0xa7a5b10
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 = ffffffff8c85136c thread_stack 0x30000
/usr/sbin/mysqld(my_print_stacktrace+0x2e) [0x847fd3e]
/usr/sbin/mysqld(handle_fatal_signal+0x432) [0x82b1c12]
[0xb78d7400]
/usr/sbin/mysqld(btr_estimate_number_of_different_key_vals+0x2af) [0x834d4cf]
/usr/sbin/mysqld(dict_update_statistics_low+0x83) [0x836b923]
/usr/sbin/mysqld(dict_update_statistics+0x26) [0x836ba66]
/usr/sbin/mysqld(dict_table_get+0x10a) [0x836bb7a]
/usr/sbin/mysqld(ha_innobase::open(char const*, int, unsigned int)+0x189) [0x83430d9]
/usr/sbin/mysqld(handler::ha_open(st_table*, char const*, int, int)+0x38) [0x82adde8]
/usr/sbin/mysqld(open_table_from_share(THD*, st_table_share*, char const*, unsigned int, unsigned int, unsigned int, st_table*, bool)+0x557) [0x8227507]
/usr/sbin/mysqld() [0x82226ef]
/usr/sbin/mysqld(open_table(THD*, TABLE_LIST*, st_mem_root*, bool*, unsigned int)+0x5ed) [0x82242ad]
/usr/sbin/mysqld(open_tables(THD*, TABLE_LIST**, unsigned int*, unsigned int)+0x240) [0x82249a0]
/usr/sbin/mysqld(open_normal_and_derived_tables(THD*, TABLE_LIST*, unsigned int)+0x27) [0x8224e47]
/usr/sbin/mysqld(mysqld_list_fields(THD*, TABLE_LIST*, char const*)+0x23) [0x82cbaa3]
/usr/sbin/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0x15bf) [0x81ed69f]
/usr/sbin/mysqld(do_command(THD*)+0xbd) [0x81ed94d]
/usr/sbin/mysqld(handle_one_connection+0x228) [0x81de458]
/lib/libpthread.so.0(+0x6e73) [0xb7897e73]
/lib/libc.so.6(clone+0x5e) [0xb74c6c8e]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (a7ebe30): 
Connection ID (thread ID): 1
Status: NOT_KILLED

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.

How to repeat:
type "use [database name];"
[12 Apr 2012 10:36] Valeriy Kravchuk
Please, send your my.cnf file content, entire error log and the results of:

uname -a
free
df -k

Linux commands.
[12 Apr 2012 10:41] Milo van der Zee
It used to work for years and now suddenly it crashes. I assume that my database is corrupt and I'm now restoring from another running database copy.

Filesystem       1K-blocks      Used Available Use% Mounted on
rootfs           306587860 206613592  90629988  70% /
/dev/root        306587860 206613592  90629988  70% /
rc-svcdir             1024       144       880  15% /lib/rc/init.d
cgroup_root          10240         0     10240   0% /sys/fs/cgroup
udev                 10240       304      9936   3% /dev
shm                4119392         0   4119392   0% /dev/shm
/dev/sda1           101086     85500     10367  90% /boot

Linux spectrum 3.2.1-gentoo-r2 #1 SMP Tue Feb 21 21:11:31 CET 2012 i686 Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz GenuineIntel GNU/Linux

             total       used       free     shared    buffers     cached
Mem:       8238788    7981068     257720          0     123512    5116236
-/+ buffers/cache:    2741320    5497468
Swap:       987992       2156     985836

# /etc/mysql/my.cnf: The global mysql configuration file.
# $Header: /var/cvsroot/gentoo-x86/dev-db/mysql/files/my.cnf-4.1,v 1.4 2008/11/14 02:16:25 robbat2 Exp $

# The following options will be passed to all MySQL clients
[client]
#password					= your_password
port						= 3306
socket						= /var/run/mysqld/mysqld.sock

[mysql]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8

[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8

[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8

[mysqldump]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8

[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8

[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8

[myisamchk]
character-sets-dir=/usr/share/mysql/charsets

[myisampack]
character-sets-dir=/usr/share/mysql/charsets

# use [safe_mysqld] with mysql-3
[mysqld_safe]
err-log						= /var/log/mysql/mysql.err

# add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations
[mysqld]
#default-storage-engine		= INNODB
character-set-server		= utf8
default-character-set		= utf8
user 						= mysql
port 						= 3306
socket 						= /var/run/mysqld/mysqld.sock
pid-file 					= /var/run/mysqld/mysqld.pid
log-error 					= /var/log/mysql/mysqld.err
basedir 					= /usr
datadir 					= /var/lib/mysql
skip-locking
key_buffer 					= 32M
max_allowed_packet 			= 32M
table_cache 				= 64
sort_buffer_size 			= 512K
net_buffer_length 			= 8K
read_buffer_size 			= 256K
read_rnd_buffer_size 		= 512K
myisam_sort_buffer_size 	= 8M
language 					= /usr/share/mysql/english

# security:
# using "localhost" in connects uses sockets by default
# skip-networking
bind-address				= 127.0.0.1

log-bin					= mysql-bin.log
log-bin-index                           = mysql-bin-index.log
server-id 				= 1

# point the following paths to different dedicated disks
tmpdir 						= /tmp/
#log-update 				= /path-to-dedicated-directory/hostname

# you need the debug USE flag enabled to use the following directives,
# if needed, uncomment them, start the server and issue 
# #tail -f /tmp/mysqld.sql /tmp/mysqld.trace
# this will show you *exactly* what's happening in your server ;)

#log						= /tmp/mysqld.sql
#gdb
#debug						= d:t:i:o,/tmp/mysqld.trace
#one-thread

# uncomment the following directives if you are using BDB tables
#bdb_cache_size				= 4M
#bdb_max_lock				= 10000

# the following is the InnoDB configuration
# if you wish to disable innodb instead
# uncomment just the next line
#skip-innodb
#
# the rest of the innodb config follows:
# don't eat too much memory, we're trying to be safe on 64Mb boxes
# you might want to bump this up a bit on boxes with more RAM
innodb_buffer_pool_size = 512M
# this is the default, increase it if you have lots of tables
innodb_additional_mem_pool_size = 4M
#
# i'd like to use /var/lib/mysql/innodb, but that is seen as a database :-(
# and upstream wants things to be under /var/lib/mysql/, so that's the route
# we have to take for the moment
#innodb_data_home_dir		= /var/lib/mysql/
#innodb_log_arch_dir		= /var/lib/mysql/
#innodb_log_group_home_dir	= /var/lib/mysql/
# you may wish to change this size to be more suitable for your system
# the max is there to avoid run-away growth on your machine
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
# we keep this at around 25% of of innodb_buffer_pool_size
# sensible values range from 1MB to (1/innodb_log_files_in_group*innodb_buffer_pool_size)
innodb_log_file_size = 128M
# this is the default, increase it if you have very large transactions going on
innodb_log_buffer_size = 32M
# this is the default and won't hurt you
# you shouldn't need to tweak it
innodb_log_files_in_group = 2
# see the innodb config docs, the other options are not always safe
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_file_per_table

[mysqldump]
quick
max_allowed_packet 			= 32M

[mysql]
# uncomment the next directive if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer 				= 20M
sort_buffer_size 			= 20M
read_buffer 				= 2M
write_buffer 				= 2M

[myisamchk]
key_buffer				= 20M
sort_buffer_size 			= 20M
read_buffer 				= 2M
write_buffer 				= 2M

[mysqlhotcopy]
interactive-timeout
[12 Apr 2012 11:41] Milo van der Zee
After using a fresh copy from another mysql instance all is fine again. So it seems to be a database corruption. But it should not crash like this...
[17 Apr 2012 20:02] Sveta Smirnova
Thank you for the feedback.

Closing as "Can't repeat" for now. If you meet this again make binary copy of your data directory, upload to Oracle FTP server and reopen the report, so we can repeat it on our side and consider if we can fix this.
[13 Mar 2013 10:08] MySQL Verification Team
Seen this happen on 5.5.29 when I_S query was running over partitioned innodb tables....