Transparent Huge Pages (THP) is a Linux memory management system that reduces the overhead of Translation Lookaside Buffer (TLB) lookups on machines with large amounts of memory by using larger memory pages.
However, database workloads often perform poorly with THP, because they tend to have sparse rather than contiguous memory access patterns. The overall recommendation for MySQL, MongoDB, Oracle, etc is to disable THP on Linux machines to ensure best performance.
You can check to see if THP is enabled or not by running:
[root@db01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never [root@db01 ~]# cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
If the result shows [never], then THP is disabled. However if the result shows [always], then THP is enabled.
You can disable THP at runtime on CentOS 6/7 and Ubuntu 14.04/16.04 by running:
[root@db01 ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled [root@db01 ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
However once the system reboots, it will go back to its default value again. To make the setting persistent on CentOS 7 and Ubuntu 16.04, you can disable THP on system startup by making a systemd unit file:
# CentOS 7 / Ubuntu 16.04: [root@db01 ~]# vim /etc/systemd/system/disable-thp.service [Unit] Description=Disable Transparent Huge Pages (THP) [Service] Type=simple ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag" [Install] WantedBy=multi-user.target [root@db01 ~]# systemctl daemon-reload [root@db01 ~]# systemctl start disable-thp [root@db01 ~]# systemctl enable disable-thp
On CentOS 6 and Ubuntu 14.04, you can disable THP on system startup by adding the following to /etc/rc.local. If this is on Ubuntu 14.04, make sure its added before the ‘exit 0’:
# CentOS 6 / Ubuntu 14.04 [root@db01 ~]# vim /etc/rc.local ... if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi ...