~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

Viewing changes to mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_func.test

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
###############################################################################
 
2
#                                                                             #
 
3
# Variable Name: innodb_max_dirty_pages_pct                                   #
 
4
# Scope: GLOBAL                                                               #
 
5
# Access Type: Dynamic                                                        #
 
6
# Data Type: Numeric                                                          #
 
7
# Default Value: 90                                                           #
 
8
# Range: 0-100                                                                #
 
9
#                                                                             #
 
10
#                                                                             #
 
11
# Creation Date: 2008-03-08                                                   #
 
12
# Author:  Rizwan                                                             #
 
13
# Modified: HHunger 2009-01-29 Fix for bug#39382, replaced sleep by wait cond.#
 
14
#                              added comments, beautifications.               #
 
15
#                                                                             #
 
16
# Description:                                                                #
 
17
#    Test Cases of Dynamic System Variable innodb_max_dirty_pages_pct that    #
 
18
#    checks the behavior of this variable                                     #
 
19
#                                                                             #
 
20
# Reference:                                                                  #
 
21
#    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html      #
 
22
#                                                                             #
 
23
###############################################################################
 
24
 
 
25
--source include/have_innodb.inc
 
26
 
 
27
# safe initial value
 
28
SET @innodb_max_dirty_pages_pct = @@global.innodb_max_dirty_pages_pct;
 
29
 
 
30
--echo '#--------------------FN_DYNVARS_044_02-------------------------#'
 
31
############################################################################
 
32
# Check if setting innodb_max_dirty_pages_pct is changed in new connection #
 
33
############################################################################
 
34
 
 
35
SET @@global.innodb_max_dirty_pages_pct = 80;
 
36
--echo 'connect (con1,localhost,root,,,,)'
 
37
connect (con1,localhost,root,,,,);
 
38
--echo 'connection con1'
 
39
connection con1;
 
40
SELECT @@global.innodb_max_dirty_pages_pct;
 
41
SET @@global.innodb_max_dirty_pages_pct = 70;
 
42
--echo 'connect (con2,localhost,root,,,,)'
 
43
connect (con2,localhost,root,,,,);
 
44
--echo 'connection con2'
 
45
connection con2;
 
46
SELECT @@global.innodb_max_dirty_pages_pct;
 
47
--echo 'connection default'
 
48
connection default;
 
49
--echo 'disconnect con2'
 
50
disconnect con2;
 
51
--echo 'disconnect con1'
 
52
disconnect con1;
 
53
# restore initial value
 
54
SET @@global.innodb_max_dirty_pages_pct = @innodb_max_dirty_pages_pct;
 
55
 
 
56
--echo '#--------------------FN_DYNVARS_044_02-------------------------#'
 
57
###################################################################
 
58
# Begin the functionality Testing of innodb_max_dirty_pages_pct   #
 
59
###################################################################
 
60
 
 
61
 
 
62
--disable_warnings
 
63
DROP PROCEDURE IF EXISTS add_records;
 
64
DROP PROCEDURE IF EXISTS add_until;
 
65
DROP PROCEDURE IF EXISTS check_pct;
 
66
DROP FUNCTION IF EXISTS dirty_pct;
 
67
DROP TABLE IF EXISTS t1;
 
68
--enable_warnings
 
69
 
 
70
DELIMITER //;
 
71
CREATE PROCEDURE add_records(IN num INT)
 
72
BEGIN
 
73
   START TRANSACTION;
 
74
   WHILE (num > 0) DO
 
75
      INSERT INTO t1(b) VALUES('MYSQL');
 
76
      SET num = num - 1;
 
77
   END WHILE;
 
78
   COMMIT;
 
79
END//
 
80
 
 
81
CREATE FUNCTION dirty_pct() RETURNS DECIMAL(20,17)
 
82
BEGIN
 
83
  DECLARE res DECIMAL(20,17);
 
84
  DECLARE a1, b1 VARCHAR(256);
 
85
  DECLARE a2, b2 VARCHAR(256);
 
86
  DECLARE dirty CURSOR FOR SELECT * FROM information_schema.global_status
 
87
                WHERE variable_name LIKE 'Innodb_buffer_pool_pages_dirty';
 
88
  DECLARE total CURSOR FOR SELECT * FROM information_schema.global_status
 
89
                WHERE variable_name LIKE 'Innodb_buffer_pool_pages_total';
 
90
 
 
91
  OPEN dirty;
 
92
  OPEN total;
 
93
 
 
94
  FETCH dirty INTO a1, b1;
 
95
  FETCH total INTO a2, b2;
 
96
 
 
97
  SET res = (CONVERT(b1,DECIMAL) * 100) / CONVERT(b2,DECIMAL);
 
98
 
 
99
  CLOSE dirty;
 
100
  CLOSE total;
 
101
  RETURN res;
 
102
END//
 
103
 
 
104
CREATE PROCEDURE add_until(IN num DECIMAL)
 
105
BEGIN
 
106
   DECLARE pct,last DECIMAL(20,17);
 
107
   SET pct = dirty_pct();
 
108
   SET last = 0;
 
109
   WHILE (pct < num AND pct < 100) DO
 
110
      CALL add_records(500);
 
111
      SET pct = dirty_pct();
 
112
      IF (pct < last) THEN
 
113
         SET pct = num + 1;
 
114
      ELSE
 
115
         SET last = pct;
 
116
      END IF;
 
117
   END WHILE;
 
118
END//
 
119
 
 
120
CREATE PROCEDURE check_pct(IN success_on_wait BOOLEAN)
 
121
BEGIN
 
122
   IF (success_on_wait > 0) THEN
 
123
      SELECT 'BELOW_MAX' AS PCT_VALUE;
 
124
   ELSE
 
125
      SELECT 'ABOVE_MAX or TimeOut Of The Test' AS PCT_VALUE;
 
126
   END IF;
 
127
END//
 
128
 
 
129
DELIMITER ;//
 
130
 
 
131
CREATE TABLE t1(
 
132
a INT AUTO_INCREMENT PRIMARY KEY,
 
133
b CHAR(200)
 
134
) ENGINE = INNODB;
 
135
 
 
136
#==========================================================
 
137
--echo '---Check when innodb_max_dirty_pages_pct is 10---'
 
138
#==========================================================
 
139
 
 
140
SET @@global.innodb_max_dirty_pages_pct = 10;
 
141
 
 
142
FLUSH STATUS;
 
143
 
 
144
# add rows until dirty pages pct is about @@global.innodb_max_dirty_pages_pc
 
145
CALL add_until(10);
 
146
 
 
147
# Give the server some time to flush dirty pages
 
148
FLUSH TABLES;
 
149
 
 
150
# Add more pages to be over @@global.innodb_max_dirty_pages_pc
 
151
CALL add_records(500);
 
152
 
 
153
# Give server time to write pages to disk (depends on performance of the system)
 
154
let $wait_condition= SELECT (dirty_pct() <= @@global.innodb_max_dirty_pages_pct);
 
155
--source include/wait_condition.inc
 
156
 
 
157
--echo 'We expect dirty pages pct to be BELOW_MAX after some time depending on performance'
 
158
# Value For $sucess will be set from include/wait_condition.inc file. It can have values 1 or 0. It will be 1 if dirty_pct() <= @@global.innodb_max_dirty_pages_pct else it will be 0.
 
159
eval CALL check_pct($success);
 
160
DROP PROCEDURE add_records;
 
161
DROP PROCEDURE add_until;
 
162
DROP PROCEDURE check_pct;
 
163
DROP FUNCTION dirty_pct;
 
164
DROP TABLE t1;
 
165
 
 
166
# restore initial value
 
167
SET @@global.innodb_max_dirty_pages_pct = @innodb_max_dirty_pages_pct;
 
168
 
 
169
##################################################################
 
170
# End of functionality Testing for innodb_max_dirty_pages_pct    #
 
171
##################################################################
 
172