We are testing Percona 5.6.28 at the moment, during our testing we found out even though the innodb_buffer_pool_populate is set to ON, it doesn't populate the memory(buffer pool) during mysql start. There is the new parameter that was added in 5.6.27, innodb_numa_interleave, even with that ON the buffer pool doesn't populate on mysql.
We even tried with enabling numa at hardware level, but still same results
Memory: 512G innodb_buffer_pool_size: 420G
We have a 420G innodb_buffer_pool_size, but following are the memory results after mysql start, it doesn't allocate the memory during mysql start
NUMA: Allocated memnodemap from d000 - d440
NUMA: Using 30 for the hash shift.
pci_bus 0000:00: on NUMA node 0
pci_bus 0000:20: on NUMA node 1
pci_bus 0000:40: on NUMA node 2
pci_bus 0000:60: on NUMA node 3
[root@db001 ~]# numactl --hardware
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7 32 33 34 35 36 37 38 39
node 0 size: 131037 MB
node 0 free: 104737 MB
node 1 cpus: 8 9 10 11 12 13 14 15 40 41 42 43 44 45 46 47
node 1 size: 131072 MB
node 1 free: 95004 MB
node 2 cpus: 16 17 18 19 20 21 22 23 48 49 50 51 52 53 54 55
node 2 size: 131072 MB
node 2 free: 115600 MB
node 3 cpus: 24 25 26 27 28 29 30 31 56 57 58 59 60 61 62 63
node 3 size: 131071 MB
node 3 free: 125262 MB
node distances:
node 0 1 2 3
0: 10 21 21 21
1: 21 10 21 21
2: 21 21 10 21
3: 21 21 21 10
Around 74G used memory, 430G free and 6G in cache
Most of the memory is free and not allocated
innodb_buffer_pool_dump_at_shutdown anf innodb_buffer_pool_load_at startup are ON
[root@db001 ~]# grep innodb_buffer_pool /etc/my.cnf
innodb_buffer_pool_size = 420G
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_instances = 64
Buffer pool is fully loaded at the moment because the server has been up for almost 3 days now
root@db001 [(none)]> show global status like 'innodb_buffer_pool_%';
| Variable_name | Value |
| Innodb_buffer_pool_dump_status | not started |
| Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 160603 16:10:29 |
| Innodb_buffer_pool_pages_data | 27381056 |
| Innodb_buffer_pool_bytes_data | 448611221504 |
| Innodb_buffer_pool_pages_dirty | 994204 |
| Innodb_buffer_pool_bytes_dirty | 16289038336 |
| Innodb_buffer_pool_pages_flushed | 105665319 |
| Innodb_buffer_pool_pages_LRU_flushed | 0 |
| Innodb_buffer_pool_pages_free | 65522 |
| Innodb_buffer_pool_pages_made_not_young | 9919036 |
| Innodb_buffer_pool_pages_made_young | 4488881 |
| Innodb_buffer_pool_pages_misc | 78478 |
| Innodb_buffer_pool_pages_old | 5453509 |
| Innodb_buffer_pool_pages_total | 27525056 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 784 |
| Innodb_buffer_pool_read_ahead_evicted | 0 |
| Innodb_buffer_pool_read_requests | 10840103331 |
| Innodb_buffer_pool_reads | 17722410 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 1822727016 |
root@db001 [(none)]> show global status like 'uptime';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| Uptime | 256907 |
+---------------+--------+
1 row in set (0.00 sec)
root@db001 [(none)]> set global innodb_buffer_pool_load_now=1;
Query OK, 0 rows affected (0.03 sec)
root@db001 [(none)]> show global status like 'innodb_buffer_pool_%';
+-----------------------------------------+--------------------------------------------------+
| Variable_name | Value |
+-----------------------------------------+--------------------------------------------------+
| Innodb_buffer_pool_dump_status | not started |
| Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 160606 15:25:12 |
| Innodb_buffer_pool_pages_data | 27381012 |
| Innodb_buffer_pool_bytes_data | 448610500608 |
| Innodb_buffer_pool_pages_dirty | 990362 |
| Innodb_buffer_pool_bytes_dirty | 16226091008 |
| Innodb_buffer_pool_pages_flushed | 105742542 |
| Innodb_buffer_pool_pages_LRU_flushed | 0 |
| Innodb_buffer_pool_pages_free | 65522 |
| Innodb_buffer_pool_pages_made_not_young | 9930674 |
| Innodb_buffer_pool_pages_made_young | 4497569 |
| Innodb_buffer_pool_pages_misc | 78522 |
| Innodb_buffer_pool_pages_old | 5453502 |
| Innodb_buffer_pool_pages_total | 27525056 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 784 |
| Innodb_buffer_pool_read_ahead_evicted | 0 |
| Innodb_buffer_pool_read_requests | 10847012782 |
| Innodb_buffer_pool_reads | 17730031 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 1823928823 |
+-----------------------------------------+--------------------------------------------------+
My question is more on populating the buffer pool on startup, with 5.6.19 the memory used on the server stayed close to our buffer pool size(around 420G) right after mysql start and it took around 7-8 minutes to start mysql. With 5.6.28, used memory after mysql start is close to 50G and then it starts loading with time and mysql starts in less than 30 seconds for a 420G buffer pool.
SET GLOBAL innodb_buffer_pool_load_now=1; SHOW GLOBAL STATUS like 'innodb_buffer_pool%';
and post the output of theSHOW
command into your question.