OK Narrowed it down. Percona always crashes when running parrallel update queries on the same NON-EXISTING record. Steps to reproduce (on linux) below. Crashes Percona 100% of the tests. Even on 1 node, with or without the rest of the cluster.
#create database
mysql -u root -pMyPass -e "CREATE DATABASE crashtest"
#create table t1
mysql -u root -pMyPass -D crashtest -e "CREATE TABLE t1 (id int(11) NOT NULL AUTO_INCREMENT, f1 varchar(50) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8"
#don't insert any records, leave the table empty (although it crashes also on tables containing records, doesn't really matter)
#multiple consecutive updates: NO PROBLEM
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
#multiple simultaneous updates: CRASH
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
Our my.cnf used in this test. Running on 3 x 6-core 32GB dedicated servers, Ubuntu 12.04 LTS.
This is the config file of node2, node1 and node3 are similar.
# Generated by Percona Configuration Wizard (http://tools.percona.com/) version REL5-20120208
# Configuration name node3-1 generated for {{deleted}} at 2012-12-09 22:16:39
[mysql]
# CLIENT #
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld]
# GENERAL #
user = mysql
default_storage_engine = innodb
socket = /var/run/mysqld/mysqld.sock
pid_file = /var/run/mysqld/mysqld.pid
OK Narrowed it down. Percona always crashes when running parrallel update queries on the same NON-EXISTING record. Steps to reproduce (on linux) below. Crashes Percona 100% of the tests. Even on 1 node, with or without the rest of the cluster.
#create database
mysql -u root -pMyPass -e "CREATE DATABASE crashtest"
#create table t1
mysql -u root -pMyPass -D crashtest -e "CREATE TABLE t1 (id int(11) NOT NULL AUTO_INCREMENT, f1 varchar(50) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8"
#don't insert any records, leave the table empty (although it crashes also on tables containing records, doesn't really matter)
#multiple consecutive updates: NO PROBLEM
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1"
#multiple simultaneous updates: CRASH
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
mysql -u root -pMyPass -D crashtest -e "update t1 set f1='test2' where id=1" &
Our my.cnf used in this test. Running on 3 x 6-core 32GB dedicated servers, Ubuntu 12.04 LTS.
This is the config file of node2, node1 and node3 are similar.
# Generated by Percona Configuration Wizard (http:// tools.percona. com/) version REL5-20120208
# Configuration name node3-1 generated for {{deleted}} at 2012-12-09 22:16:39
[mysql]
# CLIENT # mysqld/ mysqld. sock
port = 3306
socket = /var/run/
[mysqld]
# GENERAL # storage_ engine = innodb mysqld/ mysqld. sock mysqld/ mysqld. pid
user = mysql
default_
socket = /var/run/
pid_file = /var/run/
# MyISAM #
key_buffer_size = 32M
myisam_recover = FORCE,BACKUP
# SAFETY #
max_allowed_packet = 1024M
max_connect_errors = 1000000
sysdate_is_now = 1
innodb = FORCE
innodb_strict_mode = 1
# DATA STORAGE #
datadir = /disk/mysqldata/
# BINARY LOGGING # /mysql- bin
log_bin = /disk/mysqldata
expire_logs_days = 14
sync_binlog = 1
# CACHES AND LIMITS # n_cache = 4096
tmp_table_size = 32M
max_heap_table_size = 32M
query_cache_type = 0
query_cache_size = 0
max_connections = 500
thread_cache_size = 50
open_files_limit = 65535
table_definitio
table_open_cache = 10240
# INNODB # log_files_ in_group = 2 log_file_ size = 512M flush_log_ at_trx_ commit = 1 file_per_ table = 1 buffer_ pool_size = 26G
innodb_flush_method = O_DIRECT
innodb_
innodb_
innodb_
innodb_
innodb_
# LOGGING # /mysql- error.log not_using_ indexes = 0 mysql/data/ mysql-slow. log
log_error = /disk/mysqldata
log_queries_
slow_query_log = 0
slow_query_log_file = /var/lib/
server_id=2 address= "gcomm: //node1, node3" /usr/lib/ libgalera_ smm.so options = "gmcast. listen_ addr=tcp: //node2; sst.recv_ addr=node2; evs.keepalive_ period = PT3S; evs.inactive_ check_period = PT10S; evs.suspect_timeout = PT30S; evs.inactive_ timeout = PT1M; evs.install_timeout = PT1M" threads= 2 name={{ deleted} } method= xtrabackup auth=root: {{deleted} } name=node2 incoming_ address= "node2: 4567" address= "node2" locks_unsafe_ for_binlog= 1 autoinc_ lock_mode= 2
wsrep_cluster_
wsrep_provider=
wsrep_provider_
wsrep_slave_
wsrep_cluster_
wsrep_sst_
wsrep_sst_
wsrep_node_
wsrep_node_
wsrep_node_
innodb_
innodb_