Есть сервер - дедик, 2 процессора по 6 ядер в гипертрейдинг, 48gb ram, под БД жесткий диск SSD,
под програмный код HDD
ОС - Ubuntu server 16.04
Есть БД - MariaDB 10.2.19
Есть приложение на php7.1, в нём одни функции лапшекодом.
Это приложение держит нагрузку(по мониторингу) ~300 rps до backend'a, на
БД нагрузка ~400prs select, ~270rps insert, ~160rps update, ~1 delete, пишется много статистики
и пишется не самым оптимальным способом - insert .. on duplicate key update ...
Но сервер живет, load average ~3 и всё работает
Есть 2ая версия этого приложения на php7.2, на yii 2 написана. Включен production режим. В ней запись статистики
перенесена в очереди которые крутятся на rabbitmq, воркеры тоже на yii 2 сделаны, данные статистики
агрегируются в redis'e и раз в 20 минут закидываются в MariaDB. На
БД нагрузка меньше ~300prs select, ~130rps insert, ~80rps update, ~1 delete.
Но несмотря на меньшую нагрузку, MariaDB начинает очень активно использовать диск.
Не только в моменты, когда с Redis'a данные переносятся в MariaDB, а постоянно. Настолько сильно
пишет, что вырастает latency и всё виснет и сервер не успевает давать ответы.
Что меняли в конфиге:
[mysqld]
skip-name-resolve
max_connections = 1000
connect_timeout = 5
wait_timeout = 600
max_allowed_packet = 32M
sort_buffer_size = 128M
bulk_insert_buffer_size = 1G
tmp_table_size = 2G
max_heap_table_size = 2G
key_buffer_size = 256M
query_cache_limit = 1M
query_cache_size = 128M
innodb_log_buffer_size = 128M
innodb_log_file_size = 1G
innodb_buffer_pool_size = 20G
innodb_buffer_pool_instances = 10
innodb_io_capacity = 800
innodb_write_io_threads = 16
innodb_read_io_threads = 16
Нужна помощь! Куда копать? Что смотреть? Какие варианты снизить нагрузка на диск есть?
Может что-то не так с фреймворком?