mariadb/mysql-test/t/innodb_max_dirty_pages_pct_func.test
unknown b00c536378 System variable tests delivered by Folio3 (see WL4288).
BitKeeper/etc/ignore:
  Added mysql-test/linux_sys_vars.inc mysql-test/load_sysvars.inc mysql-test/windows_sys_vars.inc to the ignore list
2008-04-10 15:14:28 +02:00

164 lines
5.4 KiB
Text

################# mysql-test\t\innodb_max_dirty_pages_pct_func.test ##########
# #
# Variable Name: innodb_max_dirty_pages_pct #
# Scope: GLOBAL #
# Access Type: Dynamic #
# Data Type: Numeric #
# Default Value: 90 #
# Range: 0-100 #
# #
# #
# Creation Date: 2008-03-08 #
# Author: Rizwan #
# #
#Description: Test Cases of Dynamic System Variable innodb_max_dirty_pages_pct#
# that checks the behavior of this variable #
# #
# Reference: http://dev.mysql.com/doc/refman/5.1/en/ #
# server-system-variables.html #
# #
###############################################################################
--source include/have_innodb.inc
--echo '#--------------------FN_DYNVARS_044_02-------------------------#'
###########################################################################
# Check if setting innodb_max_dirty_pages_pct is changed in new connection#
###########################################################################
SET @@global.innodb_max_dirty_pages_pct = 80;
--echo 'connect (con1,localhost,root,,,,)'
connect (con1,localhost,root,,,,);
--echo 'connection con1'
connection con1;
SELECT @@global.innodb_max_dirty_pages_pct;
SET @@global.innodb_max_dirty_pages_pct = 70;
--echo 'connect (con2,localhost,root,,,,)'
connect (con2,localhost,root,,,,);
--echo 'connection con2'
connection con2;
SELECT @@global.innodb_max_dirty_pages_pct;
disconnect con2;
disconnect con1;
--echo '#--------------------FN_DYNVARS_044_02-------------------------#'
###################################################################
# Begin the functionality Testing of innodb_max_dirty_pages_pct #
###################################################################
--echo 'connection default'
connection default;
--disable_query_log
--disable_warnings
DROP PROCEDURE IF EXISTS add_records;
DROP PROCEDURE IF EXISTS add_until;
DROP PROCEDURE IF EXISTS check_pct;
DROP FUNCTION IF EXISTS dirty_pct;
DROP TABLE IF EXISTS t1;
--enable_warnings
DELIMITER //;
CREATE PROCEDURE add_records(IN NUM INT)
BEGIN
START TRANSACTION;
WHILE (NUM>0) DO
INSERT INTO t1(b) VALUES('MYSQL');
SET NUM = NUM - 1;
END WHILE;
COMMIT;
END//
CREATE FUNCTION dirty_pct() RETURNS DECIMAL(20,17)
BEGIN
DECLARE res DECIMAL(20,17);
DECLARE a1,b1 VARCHAR(256);
DECLARE a2,b2 VARCHAR(256);
DECLARE dirty CURSOR FOR SELECT * FROM information_schema.global_status
WHERE variable_name LIKE 'Innodb_buffer_pool_pages_dirty'
UNION SELECT * FROM information_schema.session_status
WHERE variable_name LIKE 'Innodb_buffer_pool_pages_dirty';
DECLARE total CURSOR FOR SELECT * FROM information_schema.global_status
WHERE variable_name LIKE 'Innodb_buffer_pool_pages_total'
UNION SELECT * FROM information_schema.session_status
WHERE variable_name LIKE 'Innodb_buffer_pool_pages_total';
OPEN dirty;
OPEN total;
FETCH dirty INTO a1, b1;
FETCH total INTO a2, b2;
SET res = ( CONVERT(b1,DECIMAL)*100)/CONVERT(b2,DECIMAL);
CLOSE dirty;
CLOSE total;
RETURN res;
END//
CREATE PROCEDURE add_until(IN NUM DECIMAL)
BEGIN
DECLARE pct,last DECIMAL(20,17);
SET pct = dirty_pct();
SET last = 0;
WHILE (pct<NUM and pct<100) DO
CALL add_records(500);
SET pct = dirty_pct();
IF (pct<last) THEN
SET pct = NUM+1;
ELSE
SET last = pct;
END IF;
END WHILE;
END//
CREATE PROCEDURE check_pct(IN NUM DECIMAL)
BEGIN
IF (dirty_pct() < NUM) THEN
SELECT 'BELOW_MAX' AS PCT_VALUE;
ELSE
SELECT 'ABOVE_MAX' AS PCT_VALUE;
END IF;
END//
DELIMITER ;//
CREATE TABLE t1(
a INT AUTO_INCREMENT PRIMARY KEY,
b CHAR(200)
)ENGINE=INNODB;
--enable_query_log
#==========================================================
--echo '---Check when innodb_max_dirty_pages_pct is 10---'
#==========================================================
SET @@global.innodb_max_dirty_pages_pct = 10;
FLUSH STATUS;
# add rows until dirty pages pct is less than this value
CALL add_until(10);
# give server some time to flush dirty pages
FLUSH TABLES;
CALL add_records(500);
--echo '--sleep 5'
--sleep 5
--echo 'We expect dirty pages pct to be BELOW_MAX'
CALL check_pct(10);
#SHOW STATUS LIKE 'innodb%';
DROP PROCEDURE add_records;
DROP PROCEDURE add_until;
DROP PROCEDURE check_pct;
DROP FUNCTION dirty_pct;
##################################################################
# End of functionality Testing for innodb_max_dirty_pages_pct #
##################################################################