Current Path : /usr/opt/mysql57/mysql-test/suite/innodb/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/opt/mysql57/mysql-test/suite/innodb/t/innodb_buffer_pool_load.test |
#Want to skip this test from daily Valgrind execution --source include/no_valgrind_without_big.inc # # Test for the functionality of InnoDB Buffer Pool dump/load # # This case checks buffer pool dump/load works as expected # with innodb_buffer_pool_load_at_startup=ON # and innodb_buffer_pool_dump_at_shutdown=ON --source include/have_innodb.inc # include/restart_mysqld.inc does not work in embedded mode --source include/not_embedded.inc --let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)` --error 0,1 --remove_file $file # Dump the whole buffer pool because if only a portion of it is dumped, we # cannot be sure how many of the ib_bp_test's pages will end up in the dump. SET GLOBAL innodb_buffer_pool_dump_pct=100; # Create a table and populate it with some data CREATE TABLE ib_bp_test (a INT AUTO_INCREMENT, b VARCHAR(64), c TEXT, PRIMARY KEY (a), KEY (b, c(128))) ENGINE=INNODB; let $check_cnt = SELECT COUNT(*) FROM information_schema.innodb_buffer_page_lru WHERE table_name LIKE '%ib_bp_test%'; --let SPACE = `SELECT space FROM information_schema.innodb_sys_tables WHERE name LIKE '%ib_bp_test%'` # See that we have a small number of pages in the LRU --eval $check_cnt # Here we end up with 16382 rows in the table --disable_query_log INSERT INTO ib_bp_test (b, c) VALUES (REPEAT('b', 64), REPEAT('c', 256)); INSERT INTO ib_bp_test (b, c) VALUES (REPEAT('B', 64), REPEAT('C', 256)); let $i=12; while ($i) { --eval INSERT INTO ib_bp_test (b, c) VALUES ($i, $i * $i); INSERT INTO ib_bp_test (b, c) SELECT b, c FROM ib_bp_test; dec $i; } --enable_query_log # Accept 83 for 64k page size, 163 for 32k page size, 329 for 16k page size, # 662 for 8k page size & 1392 for 4k page size --replace_result 83 {checked_valid} 163 {checked_valid} 329 {checked_valid} 662 {checked_valid} 1392 {checked_valid} --eval $check_cnt --source include/shutdown_mysqld.inc # Confirm the file has been created --file_exists $file # Add some garbage records to the dump file --let IBDUMPFILE = $file perl; my $fn = $ENV{'IBDUMPFILE'}; open(my $fh, '>>', $fn) || die "perl open($fn): $!"; print $fh "123456,0\n"; print $fh "0,123456\n"; print $fh "123456,123456\n"; close($fh); EOF --source include/start_mysqld.inc # Wait for the load to complete --disable_warnings let $wait_condition = SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) load completed at ' FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings --source include/wait_condition.inc # Show the status, interesting if the above timed out --disable_warnings --replace_regex /[0-9]{6}[[:space:]]+[0-9]{1,2}:[0-9]{2}:[0-9]{2}/TIMESTAMP_NOW/ SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings # Accept 83 for 64k page size, 163 for 32k page size, 329 for 16k page size, # 662 for 8k page size & 1392 for 4k page size --replace_result 83 {checked_valid} 163 {checked_valid} 329 {checked_valid} 662 {checked_valid} 1392 {checked_valid} --eval $check_cnt call mtr.add_suppression("InnoDB: Error parsing"); --source include/shutdown_mysqld.inc # Add some total garbage to the dump file --let IBDUMPFILE = $file perl; my $fn = $ENV{'IBDUMPFILE'}; open(my $fh, '>>', $fn) || die "perl open($fn): $!"; print $fh "abcdefg\n"; close($fh); EOF --source include/start_mysqld.inc # Wait for the load to fail --disable_warnings let $wait_condition = SELECT SUBSTR(variable_value, 1, 13) = 'Error parsing' FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings --source include/wait_condition.inc --source include/shutdown_mysqld.inc --echo # Re-write some valid pages to the dump file, make sure the space --echo # should be valid but all the page no should be out of bound of the file --let IBDUMPFILE = $file perl; my $fn = $ENV{'IBDUMPFILE'}; my $space = $ENV{'SPACE'}; open(my $fh, '>', $fn) || die "perl open($fn): $!"; print $fh "$space,10000\n"; print $fh "$space,10001\n"; print $fh "$space,10002\n"; close($fh); EOF --source include/start_mysqld.inc # Wait for the load to complete --disable_warnings let $wait_condition = SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) load completed at ' FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings --source include/wait_condition.inc # Show the status, interesting if the above timed out --disable_warnings --replace_regex /[0-9]{6}[[:space:]]+[0-9]{1,2}:[0-9]{2}:[0-9]{2}/TIMESTAMP_NOW/ SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings DROP TABLE ib_bp_test; SET GLOBAL innodb_buffer_pool_dump_pct=default; --echo # --echo # Bug#22016556 INNODB LOOKS FOR BUFFER POOL FILE NAME IN '/' IF --echo # INNODB_DATA_HOME_DIR IS EMPTY --echo # # Set different paths for --datadir let $MYSQLD_DATADIR1 = $MYSQL_TMP_DIR/datadir1/data; let $MYSQLD_BASEDIR= `select @@basedir`; # Create custom datadir path --mkdir $MYSQL_TMP_DIR/datadir1 let BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; let $start_page_size=`SELECT variable_value FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE LOWER(variable_name) = 'innodb_page_size'`; # Create bootstrap file write_file $BOOTSTRAP_SQL; CREATE DATABASE test; EOF let NEW_CMD = $MYSQLD --no-defaults --initialize-insecure --lc_messages_dir=$MYSQL_SHAREDIR --innodb-data-home-dir= --innodb_data_file_path=$MYSQL_TMP_DIR/datadir1/ibdata:16M:autoextend --datadir=$MYSQLD_DATADIR1 --innodb_log_file_size=5M --innodb_log_files_in_group=2 --init-file=$BOOTSTRAP_SQL</dev/null>>$MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 --innodb_undo_tablespaces=0 --innodb-page-size=$start_page_size; # Run the bootstrap command --exec $NEW_CMD # Start the DB server --replace_result $MYSQLD_DATADIR1 MYSQLD_DATADIR1 $MYSQL_TMP_DIR MYSQL_TMP_DIR --let $restart_parameters="restart: --innodb-data-home-dir= --innodb_data_file_path=$MYSQL_TMP_DIR/datadir1/ibdata:16M:autoextend --datadir=$MYSQLD_DATADIR1 --innodb_log_file_size=5M --innodb_log_files_in_group=2 --innodb_undo_tablespaces=0" --source include/restart_mysqld.inc CREATE TABLE t1 (a int) ENGINE=innodb; INSERT INTO t1 VALUES (1), (2), (3); SET GLOBAL innodb_buffer_pool_dump_now=ON; # Wait for the dump to complete --disable_warnings let $wait_condition = SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) dump completed at ' FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; --enable_warnings --source include/wait_condition.inc --disable_warnings --replace_regex /[0-9]{6}[[:space:]]+[0-9]{1,2}:[0-9]{2}:[0-9]{2}/TIMESTAMP_NOW/ SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; --enable_warnings SET GLOBAL innodb_buffer_pool_load_now = ON; # Wait for the load to complete --disable_warnings let $wait_condition = SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) load completed at ' FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings --source include/wait_condition.inc --disable_warnings --replace_regex /[0-9]{6}[[:space:]]+[0-9]{1,2}:[0-9]{2}:[0-9]{2}/TIMESTAMP_NOW/ SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_load_status'; --enable_warnings DROP TABLE t1; DROP DATABASE test; let $restart_parameters=; --source include/restart_mysqld.inc # Remove residue files and data folder let CLEANUP_FOLDER=$MYSQL_TMP_DIR/datadir1/; --source include/cleanup_folder.inc --remove_file $BOOTSTRAP_SQL