Я использую сервер aws r4.4xlarge и выделил более 60 ГБ для базы данных, но все же я столкнулся с проблемой высокой загрузки процессора.
I есть около 10 больших таблиц каждая приблизительного размера 18 ГБ с целочисленным первичным ключом. все таблицы - 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
200% - это не так много ЦП, когда у вас 16 ядер. 200% - это два полных ядра (среди 16 у вас в r4.4xlarge). Учитывая объем используемой памяти, MariaDB определенно что-то замышляет. Тот факт, что вы используете только 2 из своих 16 ядер, я бы сказал, что вы не используете ЦП.
Используйте утилиту htop
, чтобы лучше увидеть, как mariaDB использует ядра.
Произошла ошибка https: // jira .mariadb.org / browse / MDEV-15016 . Эта ошибка исправлена. Используйте последнюю версию (10.2.13, 10.3.5) и еще раз убедитесь, что все в порядке.
большая часть процесса находится в состоянии сна...
И это совершенно нормально, особенно если ваше приложение использует пул соединений.
... но некоторые находятся в состоянии запроса в течение достаточно длительного периода времени.
Мне нужен совет относительно того, должен ли я еще что-то оптимизировать...
Как правило, базы данных не работают медленно.
Запросы внутри них делают.
Пример, который вы показали, был выборкой, выполняющей сортировку. Поскольку вы предоставили своей базе данных много памяти для работы, она будет пытаться выполнять сортировку «в памяти», но выполнение этого требует мощности процессора — что вы и видите.
Изучите [План объяснения] этого запроса и постарайтесь внести в него улучшения.
Как я люблю говорить: