合 大页HugePages对PostgreSQL的性能影响
Tags: PostgreSQL性能标准大页透明大页大页
简介
Linux kernel 提供了大量可以影响性能的配置参数。关键是针对你的应用程序和负载选择合适配置参数。像其他数据库一样,PostgreSQL 依赖于最优化的 Linux kernel。糟糕的配置参数会导致糟糕的性能。因此,重要的是:在每次调整配置参数之后都要对数据库做benchmark,来避免性能降低。
在我之前的博文中《Tune Linux Kernel Parameters For PostgreSQL Optimization》 https://www.percona.com/blog/2018/08/29/tune-linux-kernel-parameters-for-postgresql-optimization/
我描述了一些最有用的Linux kernel配置参数以及这些配置参数如何提高你的数据库性能的。本文将会分享打开 Linux 大页之后,不同的工作负载的 benchmark 结果。针对不同大小的负载和并发访问客户端,我做了大量的benchmark。
benchmark 机器配置
1 2 3 4 5 6 7 8 | 超微服务器 CPU: Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00GHz 2 sockets / 28 cores / 56 threads 内存: 256GB of RAM 存储介质: SAMSUNG SM863 1.9TB Enterprise SSD 文件系统: ext4/xfs 操作系统:Ubuntu 16.04.4, kernel 4.13.0-36-generic PostgreSQL:11版本 |
Linux Kernel 配置
我使用默认的操作系统配置,除了关掉了透明大页(Transparent HugePages)。透明大页是默认打开的,分配页的大小并不可控,对于数据库来说并不太推荐。通常,对于数据库来说,需要固定大小的大页,这个是透明大页所提供不了的。因此,通常推荐的是打开大页,并且要关闭透明大页。
PostgreSQL的配置
我使用固定的PostgreSQL配置来做benchmark,主要是为了获得不同的负载和不同的配置的大页的测试结果。PostgreSQL配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | shared_buffers = '64GB' work_mem = '1GB' random_page_cost = '1' maintenance_work_mem = '2GB' synchronous_commit = 'on' seq_page_cost = '1' max_wal_size = '100GB' checkpoint_timeout = '10min' synchronous_commit = 'on' checkpoint_completion_target = '0.9' autovacuum_vacuum_scale_factor = '0.4' effective_cache_size = '200GB' min_wal_size = '1GB' wal_compression = 'ON' |