特性介绍
在MySQL OLTP场景下,高并发情况下系统会默认将MySQL的线程在OS的CPU上进行调度,如图1左侧区域所示,这会导致线程频繁跨越NUMA节点进行访问,这种情况会增加CPU的开销,从而限制性能的提升。因此,需要对线程调度进行优化,以减少NUMA节点之间访问的开销,从而提高系统的性能,如图1右侧区域所示。
采用MySQL NUMA调度优化特性后可以对MySQL前台线程和后台线程进行精细化调度,从而提高关键线程的处理效率,减少远程访问存储的次数,从而提升整个系统的性能。请参见图2。
- 后台线程:本特性涉及7类影响系统性能的关键后台线程,主要与redo log和purge逻辑相关。这类线程数量固定,每一类线程有且只有一个线程实例,在MySQL实例启动时启动。本特性允许用户指定某类线程仅运行在指定的CPU core(s)。因此,通过合理参数设置,可以使各类线程的CPU core(s)相互隔离,使其均能得到充分调度,避免成为系统瓶颈。
- 前台线程:MySQL是thread per connection,故前台线程数量随会话数量变化而变化。类似后台线程调度,本特性同样允许控制前台线程运行在指定的CPU core(s)。此外,本特性支持根据
NUMA 信息将CPU core(s)分组。前台线程在当前会话的生命周期内,只会在同一个组内的CPU core(s)上迁移,而不会跨NUMA迁移,因此从data locality获益。为了实现组间的负载均衡,新增的前台线程将被调度到负载较小的组上。负载程度通过本组内的会话数反应。