透明大页面(THP)是Linux内核中的一项内存管理功能,能让操作系统更有效地管理内存页面。它的工作原理是将较小的内存页分组为较大的页,从而减少操作系统所需的页表条目数量。

虽然THP可以提高某些工作负载的性能,但它也会给ClickHouse等执行大量内存映射的数据库带来严重的性能问题。这是因为THP会在映射和取消映射内存页时造成延迟,从而导致CPU使用率增加、延迟增加和吞吐量降低。

在ClickHouse中,当执行涉及内存映射的操作(例如:向磁盘读写数据或执行查询)时,THP可能会导致问题。启用THP后,ClickHouse的CPU使用率可能会升高,查询执行时间会延长,吞吐量会降低,尤其是涉及大量数据的工作负载。

为避免这些问题,建议通过将"transparent_hugepage"参数设置为"never"来禁用ClickHouse的THP。要做到这一点,可以在系统启动脚本(例如:/etc/rc.local)中添加以下几行:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

通过禁用THP,ClickHouse可以避免内存映射造成的延迟,并为涉及大量数据的工作负载实现更好的性能。不过,需要注意的是,禁用THP会增加内存使用量,并可能需要额外调整其他系统参数,例如:页面缓存的大小和可用内存的数量。

总之,虽然THP可以提高某些工作负载的性能,但在ClickHouse等数据库中会导致严重的性能问题。禁用THP有助于提高涉及大量数据和内存映射的ClickHouse工作负载的性能。