mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
b00c536378
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
164 lines
5.4 KiB
Text
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 #
|
|
##################################################################
|
|
|