1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
# ************************************************************
# wl6504: This testcase is to check the functionality of the
# innodb_buffer_pool_dump_pct flag
# step 1.Set innodb_buffer_pool_dump_pct=100 and take the dump
# step 2.Set innodb_buffer_pool_dump_pct=50 and take the dump
# step 3.Compare the size of both the dump files
# Here if the size of step 1 > size of step 2 (pass) else fail
#*************************************************************
--echo # Set the environmental variables
let MYSQLD_DATADIR = `SELECT @@datadir`;
--echo # Create a table
CREATE TABLE tab5 (col1 int auto_increment primary key,
col2 VARCHAR(25), col3 varchar(25)) ENGINE=InnoDB;
-- echo # Create indexes
CREATE INDEX idx1 ON tab5(col2(10));
CREATE INDEX idx2 ON tab5(col3(10));
--echo # Insert a sample record
INSERT INTO tab5(col2,col3) VALUES('Test for wl6504','Test for dump pct');
--echo # Set the dump file name
SET GLOBAL innodb_buffer_pool_filename=ib_buffer_pool100;
SET GLOBAL innodb_buffer_pool_dump_pct=100;
#***********************************************************
# SELECT *
# FROM performance_schema.global_status
# WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
# gives
# a) VARIABLE_NAME VARIABLE_VALUE
# INNODB_BUFFER_POOL_DUMP_STATUS not started
# in case there was no innodb_buffer_pool_dump since server start.
# b) Something like
# VARIABLE_NAME VARIABLE_VALUE
# INNODB_BUFFER_POOL_DUMP_STATUS Buffer pool(s) dump completed at 130711 13:43:24
# in case there was a innodb_buffer_pool_dump since server start.
# Attention:
# - There is no guarantee that the current test is the first test which
# made an innodb_buffer_pool_dump since server startup.
# - The granularity of the timestamp is one second.
# - There could have been some dump caused by some previous test
# just a few milliseconds before.
# In order to avoid conflict with previous tests, read the current value
# of INNODB_BUFFER_POOL_DUMP_STATUS
# and confirm that the timestamp is different after the dump
#***********************************************************
# Read the current value to compare with the new value.
--disable_warnings
SELECT variable_value INTO @IBPDS
FROM performance_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
--enable_warnings
--echo # Take the dump file
SET GLOBAL innodb_buffer_pool_dump_now=ON;
# Sleep one second in order to ensure that the time stamp is
# different at next dump
--sleep 1
--echo # Wait until the system table get updated & dump get created
--disable_warnings
let $wait_condition = SELECT count(*) = 1
FROM performance_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
AND variable_value != @IBPDS
AND variable_value like 'Buffer pool(s) dump completed at%';
--enable_warnings
--echo # Check the dump file exist in the DATADIR
--file_exists $MYSQLD_DATADIR/ib_buffer_pool100
--echo # Set the dump file name
SET GLOBAL innodb_buffer_pool_filename=ib_buffer_pool50;
--echo # Set the value 50
SET GLOBAL innodb_buffer_pool_dump_pct=50;
--echo # Check the value is 50
SELECT @@global.innodb_buffer_pool_dump_pct;
# Read the current value to compare with the new value.
--disable_warnings
SELECT variable_value INTO @IBPDS
FROM performance_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
--enable_warnings
--echo # Take the dump file
SET GLOBAL innodb_buffer_pool_dump_now=ON;
# Sleep one second in order to ensure that the time stamp is
# different at next dump
--sleep 1
--echo # Wait until the system table get updated & dump get created
--disable_warnings
let $wait_condition = SELECT count(*) = 1
FROM performance_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
AND variable_value != @IBPDS
AND variable_value like 'Buffer pool(s) dump completed at%';
--enable_warnings
--echo # Check the dump file exist in the DATADIR
--file_exists $MYSQLD_DATADIR/ib_buffer_pool50
--echo # Get the size of the dump files & compare
perl;
my $dir = $ENV{'MYSQLD_DATADIR'};
my $size;
opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR))
{
if ($file =~ m/\ib_buffer_pool50$/) {
$size50 = -s "$dir/$file";
} elsif ($file =~ m/\ib_buffer_pool100$/) {
$size100 = -s "$dir/$file";
}
}
# Check the size of the dump files ,here size100 should always be greater
if ($size100 > $size50) {
print "wl6504 test PASS\n";
} else {
print "wl6504 test FAIL\n";
}
close(DIR);
exit(0)
EOF
--echo # Reset the default value
SET GLOBAL innodb_buffer_pool_dump_pct=Default;
SET GLOBAL innodb_buffer_pool_filename=Default;
--echo # Cleanup
--remove_file $MYSQLD_DATADIR/ib_buffer_pool100
--remove_file $MYSQLD_DATADIR/ib_buffer_pool50
DROP TABLE tab5;
|