Before,
OPTIMIZE TABLE
hardly freed up any pages and to defragment you had to do a rolling restart of the data nodes. Now, there is only a 2% discrepancy between
OPTIMIZE TABLE
and doing a rolling restart. This is great stuff.This will fix will make it into 6.3.26 and 7.0.7.
See below for details:
Creating two tables, t5 and t6:
CREATE TABLE `t5` (
`id` varchar(32) CHARACTER SET utf8 NOT NULL,
`name` varchar(32) NOT NULL DEFAULT '',
`unit` int(11) DEFAULT NULL,
PRIMARY KEY (`id`,`name`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
And then the following table:
'CREATE TABLE `t6` ( `id` varchar(32) CHARACTER SET utf8 NOT NULL, `name` varchar(32) NOT NULL DEFAULT '', c0 int unsigned not null, c1 int unsigned not null, data2 varchar(255), `unit` int(11) DEFAULT NULL, PRIMARY KEY (`id`,`name`) ) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
Then we use
hugoLoad
(a test program that isn't built by default in the src distribution of cluster) to load it with 1M records.
./hugoLoad -r 1000000 -d test t5
./hugoLoad -r 1000000 -d test t6
Memory usage after population:
Node 2: Data usage is 45%(14890 32K pages of total 32768)
Node 2: Index usage is 22%(3722 8K pages of total 16416)
Node 3: Data usage is 45%(14890 32K pages of total 32768)
Node 3: Index usage is 22%(3722 8K pages of total 16416)
Delete 500K records from t5.
mysql> set ndb_use_transactions=0;
Query OK, 0 rows affected (0.00 sec)
mysql> delete from t5 limit 100000;
Query OK, 100000 rows affected (2.73 sec)
mysql> delete from t5 limit 100000;
Query OK, 100000 rows affected (3.13 sec)
mysql> delete from t5 limit 100000;
Query OK, 100000 rows affected (3.11 sec)
mysql> delete from t5 limit 100000;
Query OK, 100000 rows affected (3.13 sec)
mysql> delete from t5 limit 100000;
Query OK, 100000 rows affected (2.97 sec)
Memory usage after deletion:
Node 2: Data usage is 45%(14890 32K pages of total 32768)
Node 2: Index usage is 19%(3120 8K pages of total 16416)
ndb_mgm> Node 3: Data usage is 45%(14890 32K pages of total 32768)
Node 3: Index usage is 19%(3121 8K pages of total 16416)
Run OPTIMIZE TABLE:
mysql> optimize table t5;
+---------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+----------+----------+----------+
| test.t5 | optimize | status | OK |
+---------+----------+----------+----------+
1 row in set (1 min 41.94 sec)
CPU UTIL during OPTIMIZE TABLE:
User:23.8% Sys: 4.9% ndbd
Memory usage after OPTIMIZE TABLE:
ndb_mgm> Node 2: Data usage is 39%(13090 32K pages of total 32768)
Node 2: Index usage is 19%(3120 8K pages of total 16416)
Node 3: Data usage is 39%(13090 32K pages of total 32768)
Node 3: Index usage is 19%(3121 8K pages of total 16416)
Delete 500K (50%) of the records from t6:
mysql> set ndb_use_transactions=0;
Query OK, 0 rows affected (0.00 sec)
mysql> delete from t6 limit 100000;
Query OK, 100000 rows affected (2.77 sec)
mysql> delete from t6 limit 100000;
Query OK, 100000 rows affected (3.05 sec)
mysql> delete from t6 limit 100000;
Query OK, 100000 rows affected (3.12 sec)
mysql> delete from t6 limit 100000;
Query OK, 100000 rows affected (3.19 sec)
mysql> delete from t6 limit 100000;
Query OK, 100000 rows affected (3.24 sec)
Memory usage after deletion:
Node 2: Data usage is 39%(13090 32K pages of total 32768)
Node 2: Index usage is 15%(2521 8K pages of total 16416)
Node 3: Data usage is 39%(13090 32K pages of total 32768)
Node 3: Index usage is 15%(2522 8K pages of total 16416)
Run OPTIMIZE TABLE:
mysql> optimize table t6;
+---------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+----------+----------+----------+
| test.t6 | optimize | status | OK |
+---------+----------+----------+----------+
1 row in set (1 min 45.83 sec)
Memory usage after OPTIMIZE TABLE:
Node 2: Data usage is 28%(9249 32K pages of total 32768)
Node 2: Index usage is 15%(2521 8K pages of total 16416)
Node 3: Data usage is 28%(9249 32K pages of total 32768)
Node 3: Index usage is 15%(2522 8K pages of total 16416)
After restart of node 3:
Node 2: Data usage is 28%(9249 32K pages of total 32768)
Node 2: Index usage is 15%(2521 8K pages of total 16416)
Node 3: Data usage is 26%(8568 32K pages of total 32768)
Node 3: Index usage is 13%(2236 8K pages of total 16416)
Only two percent diff between rolling restart and OPTIMIZE TABLE. Excellent. Thank you Jonas for fixing this.
1 comment:
if i do disk data file with test table, is it still have an obvious reducement on the used DM and IM ?
Post a Comment