首次遇到这个问题的用户当时是做了操作系统和硬件的改动: 从RHEL6.3, 40-core 改到 RHEL7.3, 56-core。 改动后, 他们发现下面有趣的现象:
1) 单线程插入,每秒插入4000行
2) 10-12个并发插入,每秒插入3000行
3) 15个并发,每秒只能做到45~60行插入
这里值得重点说一说的是,Db2通过这个APAR做的其实是绕开Linux的一个问题,因为这个问题的本质其实在Linux上:在新版本还有新的硬件上,我们发现Linux的thread scheduling行为变了,这导致db2logts线程获得CPU的频率降低,从而导致了性能的降低; 而且这个问题随着CPU核数增多而更加严重。
我们有理由相信Linux的这个问题跟Automatic NUMA balancing有关。我们知道,从RHEL7开始,这个Automatic NUMA balancing是自动打开的:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-numa-auto_numa_balancing
它可以通过下面方法关闭:
# echo 0 > /proc/sys/kernel/numa_balancing
下面文档对Automatic NUMA balancing讲的比较好:
http://events.linuxfoundation.jp/sites/events/files/slides/summit2014_riel_chegu_w_0340_automatic_numa_balancing_0.pdf
下面这个链接也说过Automatic NUMA balancing有可能会导致性能问题,有时候值得关闭它试试:
https://github.com/scylladb/scylla/issues/1120
当发现性能问题或许跟Automatic NUMA balancing有关时,可以再试试减少nodes/sockets数量,如果随着它们的降低,性能问题有一定缓解,那基本上就证明是Automatic NUMA balancing导致的了。
另外,据说SQL Server和Oracle是推荐关闭Automatic NUMA balancing,有兴趣的读者可以去找找文档确认下。
领取专属 10元无门槛券
私享最新 技术干货