#!/bin/bash -e # You will need to edit these: DB_DATABASE=YOUR_DATABASE DB_USER=YOUR_USER DB_PASSWORD=YOUR_PASSWORD # You may want to edit these: TMP_DIR=/tmp DB_HOST=localhost TABLE=concurrent_test_table MYSQL_CMD="mysql --host=$DB_HOST --user=$DB_USER --password=$DB_PASSWORD $DB_DATABASE" INSERT_SCRIPT=$TMP_DIR/${TABLE}_insert.sql DELETE_SCRIPT=$TMP_DIR/${TABLE}_delete.sql QUERY_SCRIPT=$TMP_DIR/${TABLE}_query.sql echo "Creating table $TABLE ..." >&2 echo "drop table if exists $TABLE; create table $TABLE (id bigint(20) AUTO_INCREMENT PRIMARY KEY);" | $MYSQL_CMD echo "Creating scripts ..." >&2 echo "set session transaction isolation level repeatable read;" | tee $INSERT_SCRIPT | tee $DELETE_SCRIPT > $QUERY_SCRIPT echo " $INSERT_SCRIPT" >&2 n=1 while [ $n -le 100000 ] do n=$(( $n + 1 )) echo "start transaction; insert into $TABLE values (null); commit;" done >> $INSERT_SCRIPT echo " $DELETE_SCRIPT" >&2 n=1 while [ $n -le 100000 ] do n=$(( $n + 1 )) echo "start transaction; delete from concurrent_test_table; commit;" done >> $DELETE_SCRIPT echo " $QUERY_SCRIPT" >&2 echo "select NOW(), min(id), max(id), max(id) - min(id) from $TABLE\G" >> $QUERY_SCRIPT n=1 while [ $n -le 250000 ] do n=$(( $n + 1 )) echo "start transaction; select T1.id, count(T1.id) from (select * from $TABLE) T1 group by T1.id having count(*) > 1; commit;" done >> $QUERY_SCRIPT echo "Running scripts in background ..." >&2 kill_scripts() { kill -TERM -$$ } trap kill_scripts SIGINT while true; do cat $INSERT_SCRIPT | $MYSQL_CMD; done & while true; do cat $DELETE_SCRIPT | $MYSQL_CMD; done & while true; do echo; echo; cat $QUERY_SCRIPT | $MYSQL_CMD; done & echo "Press CTRL-C to exit." >&2 while true; do sleep 10; done