Высокая нагрузка %sys на MariaDB на AMD по сравнению с Intel.

Вопрос или проблема

мы столкнулись с проблемой с MariaDB и AMD Epyc 7402. У нас также есть менее мощные серверы Intel, которые не страдают от этой проблемы, используя точно такую же конфигурацию (мы используем ansible). При нагрузке процессора более чем на 15% в %usr возникает необычно высокая нагрузка в %sys. Если чего-то не хватает, я могу предоставить все необходимые журналы и конфигурации.

HTOP Load
Mysql
CPU-AVG

Для начала:

  • ОС: Centos 7 (5.15.2-1.el7.elrepo.x86)
  • MariaDB: 10.4.22-MariaDB
  • Этот сервер работает как мастер MySQL для 8 слейвов, но только 4 из них напрямую подключены к нему через второй сетевой интерфейс

Аппаратное обеспечение:

  • Процессор AMD EPYC 7402 24-Core 2x
  • Память 528161544 кБ, равномерно распределенная между сокетами
  • Жесткий диск: INTEL SSDPE2KX010T8 2x (mdraid, lvm и ext4)

Что мы пробовали: (по отдельности и в комбинации (где это имело смысл))

  • jemalloc 3.6.0-1.el7
  • jemalloc 5.2.1-1.el7 (компилирован нами с компиляторами C++ по умолчанию и новыми)
  • kernel-lt 5.4.160-1
  • kernel-lt 5.4.161-1
  • kernel-ml 5.15.2-1.el7.elrepo.x86
  • kernel-ml 5.12.1-1.el7.elrepo.x86
  • kernel 3.10.0-1160.45.1.el7
  • numactl –interleave=all

Конфигурации:

  • my.cnf
[client]
port                           = 3306

[mysql]
no_auto_rehash
max_allowed_packet             = 1024M
prompt="\u@\h [\d]> "
default_character_set          = utf8

[mysqld_safe]
open_files_limit               = 1024
user                           = mysql
log-error                      = /var/log/mysql/error.log

[mysqld]
# СЕТЕВЫЕ НАСТРОЙКИ
bind-address                   = 0.0.0.0
port                           = 3306
socket                         = /var/lib/mysql/mysql.sock
skip-external-locking
max_connections                = 3000
max_user_connections           = 3000
datadir                        = /var/lib/mysql

# БУФЕРЫ
key_buffer_size                = 256M
max_allowed_packet             = 1024M
table_open_cache               = 256
sort_buffer_size               = 1M
read_buffer_size               = 1M
read_rnd_buffer_size           = 4M
myisam_sort_buffer_size        = 64M

# КЭШ ЗАПРОСОВ
query_cache_type               = 1
query_alloc_block_size         = 8192
query_cache_limit              = 1024
query_cache_min_res_unit       = 512
query_cache_size               = 8388608

# ХРАНИЛИЩЕ
default_storage_engine         = InnoDB
innodb_data_home_dir           = /var/lib/mysql
innodb_data_file_path          = ibdata1:10M:autoextend
innodb_log_group_home_dir      = /var/lib/mysql

# ОГРАНИЧЕНИЯ ПАМЯТИ
innodb_buffer_pool_size        = 425G
innodb_log_file_size           = 60G
innodb_buffer_pool_instances   = 64
innodb_log_buffer_size         = 8M
innodb_lock_wait_timeout       = 50

# СОРТИРОВКА
character_set_server           = utf8
collation_server               = utf8_unicode_ci

# Переменные MyISAM
key_buffer_size                = 1024M

# НАСТРОЙКИ InnoDB
innodb_file_format             = Barracuda
innodb_strict_mode             = ON
innodb_file_per_table          = 1
innodb_thread_concurrency      = 0
innodb-flush-method            = O_DIRECT

# Общие настройки
tmp_table_size                 = 2048M
max_heap_table_size            = 2048M

# Репликация
server-id                      = 24
binlog-format                  = row
log_bin                        = mysql-bin
relay-log                      = mysql-relay-bin
log-slave-updates              = 1
expire_logs_days               = 3
log_bin_trust_function_creators = 1

# ЛОГИРОВАНИЕ - ОШИБКИ
log_error                      = /var/log/mysql/error.log
log_warnings                   = 2
innodb_print_all_deadlocks     = 1

# ЛОГИРОВАНИЕ - МЕДЛЕННЫЕ ЗАПРОСЫ
slow_query_log_file            = /var/log/mysql/slow.log
slow_query_log                 = 1
log_queries_not_using_indexes  = 0
long_query_time                = 10
min_examined_row_limit         = 100

# ЛОГИРОВАНИЕ - ОБЩИЙ ЖУРНАЛ
general_log_file               = /var/log/mysql/general.log
general_log                    = 0

# РЕПЛИКАЦИЯ
slave_compressed_protocol      = 1

# ПОТОКИ
thread_handling                = pool-of-threads
thread-pool-max-threads        = 6000

innodb_flush_log_at_trx_commit = 1
replicate_ignore_db            = norp_*

[myisamchk]
key_buffer_size                 = 128M
sort_buffer_size                = 128M
read_buffer                     = 2M
write_buffer                    = 2M

[mysqlhotcopy]
interactive-timeout

[mysqldump]
quick
max_allowed_packet              = 1024M

/etc/sysctl.conf

kernel.panic=30
vm.swappiness=10
net.ipv4.ip_local_port_range=10240 65000
net.core.rmem_default=524288
net.core.wmem_default=262144
net.core.rmem_max=134217728
net.core.wmem_max=134217728
net.ipv4.tcp_rmem=4096 87380 134217728
net.ipv4.tcp_wmem=4096 65536 134217728
net.ipv4.tcp_moderate_rcvbuf=1
net.ipv4.tcp_fin_timeout=10
net.core.netdev_max_backlog=300000
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_max_orphans=800000
net.ipv4.tcp_keepalive_intvl=20
net.ipv4.tcp_keepalive_probes=5
net.core.somaxconn=2048
net.core.dev_weight=256
net.core.netdev_tstamp_prequeue=0
net.ipv4.ipfrag_time=5
net.ipv4.tcp_ecn=1
net.ipv4.tcp_max_tw_buckets=20000
net.ipv4.tcp_retries2=7
net.ipv4.tcp_limit_output_bytes=262144
fs.file-max=500000
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1
net.ipv4.conf.eth0.arp_ignore=1
net.ipv4.conf.eth0.arp_announce=2
vm.overcommit_memory=1
net.ipv4.conf.default.rp_filter=0
vm.overcommit_memory = 1

PT-Mysql-Summary

# Счетчики состояния (ожидание 10 секунд) ##################
Переменная                                В день  В секунду     13 сек
Aborted_clients                               6
Acl_database_grants                        1500
Acl_proxy_users                              15
Acl_users                                  1500
Aria_pagecache_blocks_not_flushed         70000                     -16
Aria_pagecache_blocks_unused               2500                     -29
Aria_pagecache_blocks_used               100000           1
Aria_pagecache_read_requests        17500000000      225000      200000
Aria_pagecache_reads                  100000000        1250        3500
Aria_pagecache_write_requests        1500000000       17500       15000
Aria_pagecache_writes                 600000000        7000        7000
Aria_transaction_log_syncs                 3000
Binlog_commits                          5000000          60          60
Binlog_group_commits                    5000000          60          60
Binlog_snapshot_position             5000000000       60000     1750000
Binlog_bytes_written                35000000000      400000     1750000
Binlog_cache_disk_use                     45000                       1
Binlog_cache_use                        5000000          60          60
Binlog_stmt_cache_use                        20
Bytes_received                      225000000000     2500000     2250000
Bytes_sent                          1000000000000    12500000    10000000
Com_admin_commands                         9000
Com_begin                                 70000                       1
Com_call_procedure                         1250
Com_commit                                70000                       1
Com_delete                              1250000          15
Com_insert                             10000000         125         450
Com_insert_select                          2500
Com_rollback                                600
Com_select                            350000000        4000        3500
Com_set_option                         60000000         600         700
Com_show_slave_status                      9000
Com_show_status                           12500
Com_show_tables                             600
Com_show_variables                           45
Com_update                             20000000         225         900
Com_update_multi                             70
Connections                            30000000         350         350
Created_tmp_disk_tables                 7000000          80          70
Created_tmp_files                         80000                       1
Created_tmp_tables                      9000000         100         100
Delete_scan                                 250
Empty_queries                          90000000        1000        1000
Executed_triggers                      50000000         600        1000
Feature_check_constraint                      6
Feature_json                                  6                       7
Feature_subquery                        1500000          20          20
Feature_trigger                         6000000          70         125
Flush_commands                                6
Handler_commit                        400000000        5000        6000
Handler_delete                          9000000         100
Handler_discover                            250
Handler_icp_attempts                12500000000      150000       60000
Handler_icp_match                   12500000000      150000       60000
Handler_prepare                        60000000         700        2500
Handler_read_first                       200000           2           1
Handler_read_key                    30000000000      400000      400000
Handler_read_last                       1250000          15          15
Handler_read_next                   300000000000     3500000     2250000
Handler_read_prev                   17500000000      200000      150000
Handler_read_rnd                    12500000000      150000      125000
Handler_read_rnd_deleted                    250
Handler_read_rnd_next               30000000000      300000      150000
Handler_rollback                         150000           1           2
Handler_tmp_update                    125000000        1500
Handler_tmp_write                   17500000000      200000      200000
Handler_update                         22500000         250        1250
Handler_write                          12500000         150         600
Innodb_buffer_pool_bytes_data       500000000000     6000000     4500000
Innodb_buffer_pool_bytes_dirty      125000000000     1250000     1000000
Innodb_buffer_pool_pages_flushed          70000
Innodb_buffer_pool_read_ahead            125000           1
Innodb_buffer_pool_read_requests    300000000000     3500000     3000000
Innodb_buffer_pool_reads               30000000         350         250
Innodb_buffer_pool_write_requests     350000000        4000        7000
Innodb_data_fsyncs                      5000000          60          70
Innodb_data_read                    500000000000     6000000     4500000
Innodb_data_reads                      35000000         400         250
Innodb_data_writes                      5000000          60          70
Innodb_data_written                 25000000000      300000      600000
Innodb_dblwr_pages_written                70000
Innodb_dblwr_writes                       50000
Innodb_log_write_requests              35000000         400         900
Innodb_log_writes                       5000000          60          70
Innodb_os_log_fsyncs                    5000000          60          70
Innodb_os_log_written               22500000000      250000      600000
Innodb_pages_created                     100000           1           3
Innodb_pages_read                      35000000         400         250
Innodb_pages_written                      70000
Innodb_row_lock_time                     175000           1
Innodb_row_lock_waits                      2250
Innodb_rows_deleted                     5000000          60
Innodb_rows_inserted                    4500000          50         100
Innodb_rows_read                    400000000000     4500000     3000000
Innodb_rows_updated                    22500000         250        1250
Innodb_system_rows_read                       6
Innodb_num_open_files                      2000
Innodb_available_undo_logs                  800
Innodb_secondary_index_triggered_cluster_reads 60000000000      700000      600000
Key_read_requests                          1250
Key_reads                                   400
Memory_used                         10000000000      125000     1250000
Memory_used_initial                  8000000000       90000
Open_table_definitions                     2500
Opened_files                           35000000         400         450
Opened_table_definitions                  17500                       1
Opened_tables                          15000000         175         300
Opened_views                                250
Qcache_hits                             3500000          40         100
Qcache_inserts                              250
Qcache_not_cached                     600000000        7000        6000
Queries                               500000000        6000        7000
Questions                             450000000        5000        6000
Rows_read                           125000000000     1500000     1250000
Rows_sent                            2250000000       25000       15000
Rows_tmp_read                       17500000000      200000      175000
Select_full_join                         175000           2           2
Select_full_range_join                   125000           1           2
Select_range                           25000000         300         250
Select_range_check                          125
Select_scan                             2500000          30          20
Slave_connections                            25
Slaves_connected                             25
Slow_queries                              30000
Sort_merge_passes                         40000
Sort_priority_queue_sorts              20000000         225         200
Sort_range                             30000000         350         300
Sort_rows                            9000000000      100000       90000
Sort_scan                               5000000          60          35
Subquery_cache_hit                        20000
Subquery_cache_miss                     2500000          30          20
Syncs                                      9000
Table_locks_immediate                     50000                       2
Table_open_cache_active_instances             6
Table_open_cache_hits                 800000000        9000       17500
Table_open_cache_misses                15000000         175         300
Table_open_cache_overflows             12500000         125         300
Threadpool_idle_threads                    2500                      -3
Threadpool_threads                         3000
Threads_created                           70000
Update_scan                                  20
Uptime                                    90000           1           1
wsrep                               1250000000000    15000000  1000000000
# Table cache
                     Размер | 256
                    Использование | 100%
# InnoDB
                  Версия | 10.4.22
         Размер буферного пула | 432.0G
         Заполняемость буферного пула | 20%
        Грязный буферный пул | 3%
           Файл на таблицу | ВКЛ
                Размер страницы | 16k
            Размер файла журнала | 2 * 60.0G = 120.0G
          Размер буфера журнала | 8M
             Методы записи | O_DIRECT
      Запись журнала при коммите | 1
               Поддержка XA |
                Контрольные суммы | ВКЛ
              Двойная запись | ВКЛ
          Потоки чтения и записи | 4 4
             Пропускная способность | 200
       Конкуренция потоков | 0
      Билеты конкуренции | 5000
       Конкуренция коммитов | 0
      Уровень изоляции транзакций | ПОВТОРЯЕМОЕ ЧТЕНИЕ
        Адаптивная очистка | ВКЛ
      Адаптивный контрольный пункт |
           Возраст контрольного пункта | 2G
             Очередь InnoDB | 0 запросов внутри InnoDB, 0 запросов в очереди
       Старейшая транзакция | 0 секунд
         Длина списка историй | 49981
               Представления для чтения | 41
         Записи в журнале отмены | 0 транзакций, 0 всего отмен, 0 максимальная отмена
        Ожидание I/O чтений | 0 чтений буферного пула, 0 нормального AIO, 0 ibuf AIO, 0 предчтений
       Ожидание I/O записей | 0 записей буферного пула (0 LRU, 0 flush list, 0 page); 0 AIO, 0 синхронности, 0 логических I/O (0 логов, 0 chkp); 0 записей
      Ожидание сбросов I/O | 0 буферного пула, 0 логового
       Состояния транзакции | 41xАКТИВНО, 148xне начато
# MyISAM

vmstat -1

procs -----------память---------- ---свап-- -----ввод/вывод---- -система-- ------процессор-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
66  0      0 382036288 258372 23430352    0    0  3872 99095 201601 554506 16 49 35  0  0
60  0      0 382076832 258372 23444996    0    0  3472  4880 193726 557287 17 50 33  0  0
60  0      0 382070048 258372 23430188    0    0  3568  4496 186601 533398 16 51 33  0  0
61  0      0 382029760 258372 23424988    0    0  3472  4220 190556 537991 14 54 32  0  0
75  0      0 382012704 258372 23445704    0    0  3648  4360 179687 527781 11 62 27  0  0
71  0      0 382003648 258372 23469492    0    0  3536 75513 196280 531335 16 64 20  0  0
78  0      0 382000704 258372 23495520    0    0  3552  2384 189606 543385 13 67 20  0  0
85  0      0 381998528 258372 23511724    0    0  3392  3113 232940 531062 14 74 12  0  0
80  0      0 382065728 258372 23474704    0    0  3744  3192 199559 541724 13 70 17  0  0
78  0      0 382070784 258372 23445872    0    0  3692  4314 196798 552624 15 69 17  0  0
75  0      0 382059680 258372 23464400    0    0  3536  2924 197860 511828 13 66 21  0  0
84  0      0 382105184 258372 23489224    0    0  3616  3724 206273 535082 13 73 14  0  0
84  0      0 382134016 258372 23475792    0    0  3472  2293 215286 520198 12 77 11  0  0
84  0      0 382123136 258372 23472120    0    0  3568  3097 205254 525508 13 72 15  0  0
82  0      0 382153728 258372 23494132    0    0  6912  3952 233188 538006 14 72 14  0  0
81  0      0 382128064 258372 23502312    0    0  3616  3284 184822 521364 13 70 17  0  0
75  0      0 382123776 258372 23541176    0    0  3776  2872 207498 536109 12 72 16  0  0
83  0      0 382160096 258372 23540552    0    0  3536  3306 202817 551826 15 68 18  0  0
65  0      0 382205664 258372 23504828    0    0  3648  2692 190065 551570 14 61 25  0  0
62  0      0 382176576 258372 23508872    0    0  4816  4964 186138 560683 12 58 30  0  0
55  0      0 382215264 258372 23448712    0    0  3616  4165 166252 558690 11 46 43  0  0
52  0      0 382219872 258372 23430824    0    0  3584 167357 178906 592052 15 42 41  2  0
47  0      0 382217472 258372 23379732    0    0  6752  2976 178652 547447 15 40 45  0  0
46  0      0 382210624 258372 23358184    0    0  3744  2800 186172 543690 15 38 46  0  0
47  0      0 382180192 258372 23351812    0    0  8896  3976 166141 530729 15 34 51  0  0
51  0      0 382159808 258372 23362736    0    0  3568  2772 171856 559503 18 34 47  0  0
47  0      0 382181024 258372 23364880    0    0  4112  3232 165595 516269 12 39 49  0  0
46  0      0 382229728 258372 23371168    0    0  3616  3447 151896 515363 14 36 49  0  0
52  0      0 382223136 258372 23332020    0    0  4672  2674 180962 556582 14 39 47  0  0
60  0      0 382214336 258372 23347904    0    0  3568  2960 169390 522171 12 46 42  0  0
62  0      0 382228512 258372 23384148    0    0  3696  3686 191964 532110 15 49 36  0  0
65  0      0 382184832 258372 23405920    0    0  3584  4528 183894 541259 15 54 31  0  0
72  0      0 382199488 258372 23394256    0    0  3584  2345 194048 538938 15 60 25  0  0
80  0      0 382209600 258372 23405216    0    0 12128  4376 192327 513727 13 66 21  0  0
70  0      0 382176608 258372 23437752    0    0  3776  2748 216748 533426 15 67 18  0  0
69  0      0 382180928 258372 23458208    0    0  6816  4772 192280 549678 14 62 24  0  0
61  0      0 382196640 258372 23427652    0    0  4016 57509 193263 542982 12 64 24  0  0
70  0      0 382233216 258372 23434848    0    0  3648 89949 191647 541364 12 57 30  0  0
74  0      0 382189856 258372 23442084    0    0  3520  2632 186482 573915 14 60 26  0  0
62  0      0 382155744 258372 23445880    0    0  3888  5436 178857 559573 14 55 30  0  0
73  0      0 382158304 258372 23420096    0    0  3712  3800 180457 551695 15 55 30  0  0
77  0      0 382161760 258372 23402016    0    0  3488  3768 208621 542433 16 62 22  0  0
68  1      0 382149664 258372 23412868    0    0  6704  3777 184064 534328 14 60 26  0  0
69  1      0 382120896 258372 23409916    0    0  3728  4153 178721 518152 13 59 28  0  0
83  0      0 382115968 258372 23472716    0    0  3376  4576 190548 522075 15 69 17  0  0
23  1      0 381906176 258372 23575532    0    0  3792  4595 220719 560955 20 71 10  0  0
86  1      0 382011392 258372 23485620    0    0  3680  5765 217555 560589 20 71  9  0  0
72  1      0 382006240 258372 23484148    0    0  4544  5158 195189 540771 18 67 14  0  0
75  1      0 381983744 258372 23507208    0    0  3520  4404 192868 535709 15 63 22  0  0
72  1      0 381939328 258372 23526672    0    0  3632  4000 179945 545377 15 62 23  0  0
70  1      0 381931392 258372 23511188    0    0  7952  4904 181942 528306 15 60 26  0  0
78  1      0 381927520 258372 23541316    0    0  4032  5773 202670 530372 13 63 23  0  0
79  1      0 381914752 258372 23548560    0    0  3200  3520 202867 536863 14 68 18  0  0

Режим межлинейности NUMA включен

cat /proc/`pidof mysqld`/numa* | grep interleave | wc -l
1430

В конце концов, мы выяснили, что вызывало эту проблему. Это был кэш запросов.
Существуют два доступных решения (те, которые мы нашли). Первое решение – просто отключить кэш запросов, если можете. Второе решение – перенести все серверы баз данных на FreeBSD, который по каким-то причинам работает даже с включенным кэшом запросов.

Ответ или решение

Конечно, рассматривая проблему высоких значений %sys при использовании MariaDB на процессорах AMD EPYC 7402 по сравнению с Intel, важно углубленно проанализировать различные аспекты аппаратного и программного стека. Данный вопрос требует осмысления нескольких ключевых моментов.

Теория

Сначала важно понять, как происходит распределение нагрузки на процессор между системными (%sys) и пользовательскими (%usr) задачами. Когда %sys существенно выше %usr, это может указывать на высокую нагрузку ввода/вывода, работу с сетью или взаимодействие с ядром системы. Процессоры AMD и Intel отличаются архитектурно, и иногда это может приводить к различиям в поведении системы.

Пример

В представленном случае на серверах с процессорами AMD наблюдается высокий %sys при использовании MariaDB. Ваш сервер использует процессор AMD EPYC 7402 с 24 ядрами, который известен хорошей производительностью в задачах, связанных с многопоточностью из-за большого количества физических ядер и потоков.

В то время как представленные конфигурации MariaDB идентичны на платформах AMD и Intel, различие может возникать из-за архитектурных особенностей процессоров, включая различия в способах оптимизации кеширования, отличиях в контроллерах памяти и многом других. Указано, что ресурсоемкость запроса и характер взаимодействия с системными средствами могут существенно влиять на показатели %sys, как это и случилось, как выяснилось, из-за использования кеша запросов.

Применение

  1. Анализ подсистемы ввода/вывода и сетевого взаимодействия: Если процессор AMD показывает аномально высокие системные затраты, важно проанализировать, какая часть системы вызывает задержки. Это может быть подсистема хранения, особенно если используется программный RAID или LVM, которые активно задействуют системные ресурсы.

  2. Оптимизация настроек NUMA: Использование технологии NUMA часто позитивно сказывается на производительности благодаря более равномерному распределению нагрузки по ядрам. Однако важно убедиться, что настройки NUMA не перегружают какие-либо отдельные ядра, что может увеличить системное время за счет борьбы за ресурсы с другими процессами.

  3. Проверка конфигурации MariaDB: В представленном вами сценарии проблема была в включенном кешировании запросов в MariaDB, что приводило к нагрузке на системные ресурсы. Выключение кеша запросов значительно снижает %sys.

  4. Обновление и тестирование ядра: Вы уже пробовали различные версии ядра, что является правильным шагом. Иногда более новые ядра лучше оптимизированы для работы с конкретными архитектурами процессоров.

  5. Диагностика через инструменты профилирования: Использование инструментов, таких как perf, может предоставить детализированные данные о том, какие именно системные вызовы или драйверы потребляют больше всего времени, что позволит точнее локализовать проблему.

  6. Альтернативные ОС: Ваше упоминание о переносе серверов на FreeBSD также заслуживает внимания. Различные операционные системы по-разному работают с аппаратным обеспечением, и в некоторых случаях это может существенно влиять на производительность.

Таким образом, решение проблемы требует комплексного подхода, включающего оптимизацию конфигурации сервера, детальный анализ причин системной загрузки и тестирование различных программных и аппаратных решений. В конечном итоге, отключение кеша запросов оказалось эффективным решением в вашем случае, но может потребоваться дальнейшая оптимизация для улучшения общего опыта работы с AMD-системами в контексте MariaDB.

Оцените материал
Добавить комментарий

Капча загружается...