尼克莱·伊哈莱宁:在 Kubernetes 中运行的 PostgreSQL 使用巨大页面

尼克莱·伊哈莱宁:在 Kubernetes 中运行的 PostgreSQL 使用巨大页面

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

巨大页面使PostgreSQL更快,但在Kubernetes中实现可能有困难。现代服务器具有TB级的RAM,处理器每个4KB页面进行虚拟内存地址转换。操作系统维护一个巨大的已分配和空闲页面列表。在Kubernetes中实现巨大页面可能需要工具和配置。

🎯

关键要点

  • 巨大页面可以提高PostgreSQL的性能,但在Kubernetes中实现可能存在困难。
  • 现代服务器通常具有TB级的RAM,处理器默认使用4KB页面进行虚拟内存地址转换。
  • 建议从2MB的巨大页面开始设置,虽然基准测试的性能与4KB页面几乎相同。
  • Kubernetes工作节点需要通过GRUB_CMDLINE_LINUX或sysctl vm.nr_hugepages=N进行配置。
  • 在受管的Kubernetes服务中实现巨大页面可能比较困难,但在kubeadm、kubespray、k3d和kind安装中相对容易。
  • 使用kubectl可以检查可用的巨大页面数量。
  • PostgreSQL默认配置为使用巨大页面,但Kubernetes需要首先允许它。
  • 在.spec.instances.resources.limits中需要修改以提及巨大页面,PG pods在没有适当限制的情况下无法启动。
  • 不要将巨大页面设置为与shared_buffers相同的值,因为共享内存也可能被扩展和许多内部结构消耗。
  • 在配置时,确保保留的巨大页面数量大于shared_buffers,并通过pg_shmem_allocations验证估算。
  • 巨大页面并不是解决所有问题的灵丹妙药,默认的4K页面在某些情况下表现相当。
  • 对于每秒少于4-5千个事务的工作负载,即使没有巨大页面也能正常运行。
➡️

继续阅读