【问题标题】:MariaDB uses almost 100% CPU usage when innodb-encryption-threads > 1当 innodb-encryption-threads > 1 时,MariaDB 使用几乎 100% 的 CPU 使用率
【发布时间】:2018-03-14 10:48:15
【问题描述】:

我们的 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()

这是什么原因造成的,我们该如何解决?

【问题讨论】:

  • 你试过2个线程吗?也就是说,线程数不超过 CPU 内核数。
  • 是的,它也有 2 个线程。

标签: encryption mariadb


【解决方案1】:

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

在您的示例中,您有 4 个线程访问 2 个内核。这样做时,每个线程将花费两倍 (4/2) 的时间来完成其任务(加密某些内容)。

也就是说,有 4 个东西(InnoDB 块?)被锁定了两倍的时间。相对于 2 件事情被锁定的时间更短。

【讨论】:

  • 这是有道理的。这里的问题是他们实际上并没有真正做任何事情。即使我在没有连接的情况下在 DB 上运行它,它们也会使用所有 CPU。如果我正确理解 futex,他们似乎正在花费 CPU 等待对方。
  • 向 mariadb.com 提交错误
猜你喜欢
  • 2018-02-12
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
相关资源
最近更新 更多