当innodb-encryption-threads>时,MariaDB使用几乎100%的CPU使用率。 1

时间:2018-03-14 10:48:15

标签: encryption mariadb

我们的MariaDB服务器突然开始使用加密数据库上的所有可用CPU。 但它似乎没有对性能产生影响。

这似乎是一个线程锁定问题,并设置innodb-encryption-threads从4到1修复了这个问题。 这对应于使用所有cpu的4个线程(双核上各占50%)。

其中一个违规线程的strace充斥着这个:

futex(0x561733657bc4, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x561733657b60, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0x561733657b60, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7fb4ede24af0, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1520416318, tv_nsec=32097000}, 0xffffffff) = 0
futex(0x7fb4ede24a90, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0x7fb4ede24a90, FUTEX_WAKE_PRIVATE, 1) = 0
sched_yield()

导致这种情况的原因以及我们如何解决?

1 个答案:

答案 0 :(得分:0)

当使服务器资源(CPU / IO /等)饱和,并且您可以控制有多少线程/进程/请求/等要求资源时,通常最好限制线程数量。

在您的示例中,您有4个线程命中2个核心。这样做,每个线程只需要两次(4/2)就可以完成任务(加密某些东西)。

也就是说,4件事(InnoDB阻止?)被锁定了两倍的时间。两件事被锁定的时间更短。