Linux内核7.0疑似导致PG数据库性能下降一半.
有AWS工程师报告称,和之前的Linux内核版本相对比,在Linux内核7.0的场景下,PostgreSQL的数据吞吐量减少了一半(降至0.51倍),且延迟显著增加。数据库应用是服务器领域的关键应用,对性能的变化感知极其敏感。我们日常的操作无论是使用软件的本地数据库还是联网互动对服务器的数据库进行读写操作,任何的延迟都将导致使用体验的大幅度下降。本次问题,经过溯源分析,问题指向了用户空间自旋锁消耗了很多的时间。有专家进步使用二分法定位原因,该性能退步被定位到Linux内核7.0调度器的一项变更。Linux内核7.0在简化抢占机制时,重点针对现代CPU架构采用统一的完全抢占和惰性抢占。此举实际上移除和改变了PREEMPT_NONE模式行为,而许多高性能数据库工作负载恰好依赖于该模式。这个模式,能让数据库避免不必要的上下文切换和锁竞争。因此有提议将PREEMPT_NONE模式恢复到默认,但是该提议被内核维护者发对,他主张让PostgreSQL软件自身进行更新,以使用Linux内核7.0中引入的全新的可重启序列时间片扩展机制。目前,Linux内核和PostgreSQL双方都没有就这个性能问题作出实质性的修改。鉴于Linux内核7.0正式版还没有发布,应用场景并不多,有担心这个问题的PostgreSQL用户,可持续关注。PostgreSQL 常被简称为Postgres,是一款高稳定性的开源关系型数据库管理系统,已经有35年的持续开发历史,是目前现金且功能丰富的开源数据库,被众多企业和个人所采用。PostgreSQL的设计宗旨是确保数据完整性并提供非常强大的可扩展性,因此能够作为复杂应用程序、地理空间分析领域等的重要选择。依赖可能不够准确,更加合理的说法是数据库和Linux内核是一种深度协作关系,它们的协作实现了共同管理服务器的物理硬件资源。数据库为提供安全、快速的存储和检索数据,必须依靠Linux内核来承担底层资源管理的复杂任务。这些任务主要包括:内存管理、磁盘IO和数据持久化、任务调度和并发控制、网络通信、安全和隔离等。有了Linux内核提供的这些基础,才能让数据库作为用户端友好的产品,服务于人们的日常生活。抢占,在Linux内核中,是指操作系统中断当前正在运行的任务,并将CPU资源分配给另一个优先级更高的任务的能力。其工作原理是通过内核的调度器管理浙西中断操作,利用定时器中断,定期检查CPU的状态。抢占机制一般发生在两个层面,一个是用户空间抢占,另一个是内核共建抢占。