#At file:///work/bzr/mysql-6.0-39382/
2990 Horst Hunger 2009-01-30
Fix for bug#39382: merge from 5.1-bugteam to 6.0-bugteam.
modified:
mysql-test/r/innodb_max_dirty_pages_pct_func.result
mysql-test/t/innodb_max_dirty_pages_pct_func.test
=== modified file 'mysql-test/r/innodb_max_dirty_pages_pct_func.result'
--- a/mysql-test/r/innodb_max_dirty_pages_pct_func.result 2008-04-10 13:14:28 +0000
+++ b/mysql-test/r/innodb_max_dirty_pages_pct_func.result 2009-01-30 17:26:05 +0000
@@ -1,3 +1,4 @@
+SET @innodb_max_dirty_pages_pct = @@global.innodb_max_dirty_pages_pct;
'#--------------------FN_DYNVARS_044_02-------------------------#'
SET @@global.innodb_max_dirty_pages_pct = 80;
'connect (con1,localhost,root,,,,)'
@@ -11,16 +12,77 @@ SET @@global.innodb_max_dirty_pages_pct
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
70
-'#--------------------FN_DYNVARS_044_02-------------------------#'
'connection default'
+'disconnect con2'
+'disconnect con1'
+SET @@global.innodb_max_dirty_pages_pct = @innodb_max_dirty_pages_pct;
+'#--------------------FN_DYNVARS_044_02-------------------------#'
+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;
+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';
+DECLARE total CURSOR FOR SELECT * FROM information_schema.global_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//
+CREATE TABLE t1(
+a INT AUTO_INCREMENT PRIMARY KEY,
+b CHAR(200)
+) ENGINE = INNODB;
'---Check when innodb_max_dirty_pages_pct is 10---'
SET @@global.innodb_max_dirty_pages_pct = 10;
FLUSH STATUS;
CALL add_until(10);
FLUSH TABLES;
CALL add_records(500);
-'--sleep 5'
-'We expect dirty pages pct to be BELOW_MAX'
+'We expect dirty pages pct to be BELOW_MAX after some time depending on performance'
CALL check_pct(10);
PCT_VALUE
BELOW_MAX
@@ -28,3 +90,5 @@ DROP PROCEDURE add_records;
DROP PROCEDURE add_until;
DROP PROCEDURE check_pct;
DROP FUNCTION dirty_pct;
+DROP TABLE t1;
+SET @@global.innodb_max_dirty_pages_pct = @innodb_max_dirty_pages_pct;
=== modified file 'mysql-test/t/innodb_max_dirty_pages_pct_func.test'
--- a/mysql-test/t/innodb_max_dirty_pages_pct_func.test 2008-04-10 13:14:28 +0000
+++ b/mysql-test/t/innodb_max_dirty_pages_pct_func.test 2009-01-30 17:26:05 +0000
@@ -10,20 +10,25 @@
# #
# Creation Date: 2008-03-08 #
# Author: Rizwan #
+# Modified: HHunger 2009-01-29 Fix for bug#39382, replaced sleep by wait cond.#
+# added comments, beautifications. #
# #
-#Description: Test Cases of Dynamic System Variable innodb_max_dirty_pages_pct#
-# that checks the behavior of this variable #
+# 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 #
+# Reference: #
+# http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html #
# #
###############################################################################
--source include/have_innodb.inc
+# safe initial value
+SET @innodb_max_dirty_pages_pct = @@global.innodb_max_dirty_pages_pct;
--echo '#--------------------FN_DYNVARS_044_02-------------------------#'
-###########################################################################
-# Check if setting innodb_max_dirty_pages_pct is changed in new connection#
-###########################################################################
+############################################################################
+# 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,,,,)'
@@ -37,18 +42,20 @@ connect (con2,localhost,root,,,,);
--echo 'connection con2'
connection con2;
SELECT @@global.innodb_max_dirty_pages_pct;
+--echo 'connection default'
+connection default;
+--echo 'disconnect con2'
disconnect con2;
+--echo 'disconnect con1'
disconnect con1;
+# restore initial value
+SET @@global.innodb_max_dirty_pages_pct = @innodb_max_dirty_pages_pct;
--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;
@@ -59,12 +66,12 @@ DROP TABLE IF EXISTS t1;
--enable_warnings
DELIMITER //;
-CREATE PROCEDURE add_records(IN NUM INT)
+CREATE PROCEDURE add_records(IN num INT)
BEGIN
START TRANSACTION;
- WHILE (NUM>0) DO
+ WHILE (num > 0) DO
INSERT INTO t1(b) VALUES('MYSQL');
- SET NUM = NUM - 1;
+ SET num = num - 1;
END WHILE;
COMMIT;
END//
@@ -72,15 +79,11 @@ 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
+ 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';
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;
@@ -89,33 +92,32 @@ BEGIN
FETCH dirty INTO a1, b1;
FETCH total INTO a2, b2;
- SET res = ( CONVERT(b1,DECIMAL)*100)/CONVERT(b2,DECIMAL);
+ SET res = (CONVERT(b1,DECIMAL) * 100) / CONVERT(b2,DECIMAL);
CLOSE dirty;
CLOSE total;
RETURN res;
END//
-CREATE PROCEDURE add_until(IN NUM DECIMAL)
+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
+ WHILE (pct < num AND pct < 100) DO
CALL add_records(500);
SET pct = dirty_pct();
- IF (pct<last) THEN
- SET pct = NUM+1;
+ IF (pct < last) THEN
+ SET pct = num + 1;
ELSE
SET last = pct;
END IF;
END WHILE;
END//
-CREATE PROCEDURE check_pct(IN NUM DECIMAL)
+CREATE PROCEDURE check_pct(IN num DECIMAL)
BEGIN
- IF (dirty_pct() < NUM) THEN
+ IF (dirty_pct() < num) THEN
SELECT 'BELOW_MAX' AS PCT_VALUE;
ELSE
SELECT 'ABOVE_MAX' AS PCT_VALUE;
@@ -127,9 +129,8 @@ DELIMITER ;//
CREATE TABLE t1(
a INT AUTO_INCREMENT PRIMARY KEY,
b CHAR(200)
-)ENGINE=INNODB;
+) ENGINE = INNODB;
---enable_query_log
#==========================================================
--echo '---Check when innodb_max_dirty_pages_pct is 10---'
@@ -139,24 +140,30 @@ SET @@global.innodb_max_dirty_pages_pct
FLUSH STATUS;
-# add rows until dirty pages pct is less than this value
+# add rows until dirty pages pct is about @@global.innodb_max_dirty_pages_pc
CALL add_until(10);
-# give server some time to flush dirty pages
+# Give the server some time to flush dirty pages
FLUSH TABLES;
+
+# Add more pages to be over @@global.innodb_max_dirty_pages_pc
CALL add_records(500);
---echo '--sleep 5'
---sleep 5
---echo 'We expect dirty pages pct to be BELOW_MAX'
-CALL check_pct(10);
+# Give server time to write pages to disk (depends on performance of the system)
+let $wait_condition= SELECT (dirty_pct() <= @@global.innodb_max_dirty_pages_pct);
+--source include/wait_condition.inc
-#SHOW STATUS LIKE 'innodb%';
+--echo 'We expect dirty pages pct to be BELOW_MAX after some time depending on
performance'
+CALL check_pct(10);
DROP PROCEDURE add_records;
DROP PROCEDURE add_until;
DROP PROCEDURE check_pct;
DROP FUNCTION dirty_pct;
+DROP TABLE t1;
+
+# restore initial value
+SET @@global.innodb_max_dirty_pages_pct = @innodb_max_dirty_pages_pct;
##################################################################
# End of functionality Testing for innodb_max_dirty_pages_pct #
| Thread |
|---|
| • bzr commit into mysql-6.0-bugteam branch (horst:2990) Bug#39382 | Horst Hunger | 30 Jan 2009 |