Comment 3 for bug 1088400

Revision history for this message
Joep (4-tmp) wrote :

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

# 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 #
log_bin = /disk/mysqldata/mysql-bin
expire_logs_days = 14
sync_binlog = 1

# CACHES AND LIMITS #
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_definition_cache = 4096
table_open_cache = 10240

# INNODB #
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 2
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_buffer_pool_size = 26G

# LOGGING #
log_error = /disk/mysqldata/mysql-error.log
log_queries_not_using_indexes = 0
slow_query_log = 0
slow_query_log_file = /var/lib/mysql/data/mysql-slow.log

server_id=2
wsrep_cluster_address="gcomm://node1,node3"
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_provider_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"
wsrep_slave_threads=2
wsrep_cluster_name={{deleted}}
wsrep_sst_method=xtrabackup
wsrep_sst_auth=root:{{deleted}}
wsrep_node_name=node2
wsrep_node_incoming_address="node2:4567"
wsrep_node_address="node2"
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2