即使为 mariadb 分配了更多内存,mariadb 的 CPU 占用率仍然很高吗?

即使为 mariadb 分配了更多内存,mariadb 的 CPU 占用率仍然很高吗?

我正在使用 aws 服务器 r4.4xlarge,并为数据库分配了超过 60GB,但仍然面临 CPU 使用率过高的问题。

我有大约 10 个大表,每个表的大小约为 18GB,具有整数主键。所有表都是 innodb,并且我还通过将其添加到默认配置文件中对 innodb 进行了优化。

innodb_buffer_pool_size=60G #(max 60 % of your Memory if and only if Memory >= 8G)
innodb_log_file_size=15G #(min 25% of innodb_buffer_pool_size)
innodb_flush_log_at_trx_commit=2

另外,在 mysql 中调试时,我对某些查询有疑问,但我仍然希望 mariadb 能够正确利用实例。大多数进程处于睡眠状态,但有些进程处于查询状态很长一段时间。

+---------+-----------------+-----------------+------------------+---------+------+----------------+-----------------+----------+
| Id      | User            | Host            | db               | Command | Time | State          | Info            | Progress |
+---------+-----------------+-----------------+------------------+---------+------+----------------+-----------------+----------+
| 5415663 | root            | localhost       | test_db          | Query   |    0 | Sorting result | SELECT XXXXX    |    0.000 |

我需要建议,关于我是否应该继续优化某些东西,以便从 mariadb 中获得最大收益。

Tasks: 339 total,   1 running, 338 sleeping,   0 stopped,   0 zombie
%Cpu(s): 13.0 us,  0.1 sy,  0.0 ni, 86.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 12582731+total, 40068792 free, 72185768 used, 13572756 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 51496540 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                    
126064 mysql     20   0 65.336g 0.063t   8968 S 205.6 53.5  51004:26 mysqld                                                                     
  1346 rabbitmq  20   0 9804208 1.022g   4228 S   2.3  0.9   1336:27 beam.smp                                                                   
  1488 redis     20   0  604496 513216   2236 S   1.0  0.4 389:01.86 redis-server                                                               
  7064 www-data  20   0  450464  38604  30744 S   0.3  0.0   0:00.93 php-fpm7.0                                                                 
  9226 www-data  20   0  383204  37932  29336 S   0.3  0.0   0:00.66 php-fpm7.0                                                                 
  9404 www-data  20   0  376000  36820  29016 S   0.3  0.0   0:00.57 php-fpm7.0 

答案1

当您拥有 16 个核心时,200% 的 CPU 利用率不算高。200% 是两个满核(r4.4xlarge 中的 16 个核心)。考虑到您使用的内存量,MariaDB 肯定有所作为。事实上,您只使用了 16 个核心中的 2 个,我认为您的 CPU 利用率过低。

使用该htop实用程序可以更好地了解 mariaDB 对核心的使用情况。

答案2

有一个错误https://jira.mariadb.org/browse/MDEV-15016。该错误已修复。使用最新版本(10.2.13、10.3.5)并再次验证一切正常。

答案3

大部分进程处于睡眠状态...

这是非常正常的,特别是当您的应用程序使用连接池时。

...但有些处于查询状态的时间相当长。
我需要一些建议,关于我是否还需要优化一些东西...

一般来说,数据库运行起来并不慢,但是
其中的查询运行起来却很慢。

您展示的示例是执行排序的选择。由于您为数据库提供了大量内存,因此它将尝试“在内存中”进行排序,但执行消耗 CPU 能力 - 这就是您所看到的。

调查此查询[的解释计划]并寻求改进。

正如我喜欢说的:

  • 你可以花几天时间摆弄数据库和服务器级别的设置,并通过以下方式提高“性能”:或许- 2 或 3百分点
  • 您可以花费相同的时间构建更清晰的表结构,添加适当的索引等,并通过以下方式提高“性能” -至少- 2 或 3数量级

相关内容