Привет, камрады.
Имеется проблема: subj
Что заметили - проблема проявляется при использовании использовании binlog.
При этом несколько серваков попадает под раздачу, с разной топологией:
и так далее.
Это всегда slave. Были мысли, что в один момент Mysqld не хватает памяти и идет в своп, но нет - метрики говорят, что использование памяти всегда постоянно (выхлоп ниже).
Рестарт mysqld помогает ненадолго и снова имеем такую же картину.
База работает на одно приложение, размер базы маленький - 30 Гб. LA околонулевые, iostat предоставлен ниже
[me ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
Версия мускуля:
Выхлоп free:
[me ~]$ free -h
total used free shared buff/cache available
Mem: 31G 6.8G 243M 1.5G 24G 22G
Swap: 8.0G 3.0G 5.0G
Выхлоп процессов потреблению свопа:
[me ~]$ for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | head -5
mysqld 2976632 kB
tuned 10556 kB
polkitd 5100 kB
VGAuthService 1588 kB
NetworkManager 1384 kB
параметры ядра по памяти:
sudo sysctl -a | grep -i vm
vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 30
vm.dirty_writeback_centisecs = 500
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.hugepages_treat_as_movable = 0
vm.hugetlb_shm_group = 0
vm.laptop_mode = 0
vm.legacy_va_layout = 0
vm.lowmem_reserve_ratio = 256 256 32
vm.max_map_count = 65530
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1
vm.min_free_kbytes = 67584
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 4096
vm.mmap_rnd_bits = 28
vm.mmap_rnd_compat_bits = 8
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.nr_pdflush_threads = 0
vm.numa_zonelist_order = default
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 30
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100
vm.zone_reclaim_mode = 0
my.cnf
[me ~]$ grep -vE "^$|^#" /data/mysql/my.cnf
[mysqld]
server-id = 14116
log-bin = hostname-bin
log-error=/data/mysql/hostname
basedir=/usr
datadir = /data/mysql
tmpdir = /data/mysql/tmp/
innodb_data_home_dir = /data/mysql/
socket = /data/mysql/mysql.sock
sql_mode=NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp = 1
query_cache_type = 0
thread_cache_size = 500
tmp_table_size = 5G
delayed_queue_size = 200
net_buffer_length = 32K
read_rnd_buffer_size = 64M
bulk_insert_buffer_size = 512M
join_buffer_size = 512M
read_buffer_size = 512M
sort_buffer_size = 512M
innodb_buffer_pool_size=25G
innodb_data_file_path = ibdata1:12M:autoextend
innodb_file_per_table = 1
innodb_log_files_in_group = 2
innodb_log_file_size = 4G
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 512M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 48
innodb_strict_mode=off
max_connections = 2400
expire_logs_days = 3
max_allowed_packet = 1024M
max_error_count = 64
max_heap_table_size = 1024M
open_files_limit = 4096
long_query_time = 30
wait_timeout = 1800
max-binlog-size = 1024M
range_optimizer_max_mem_size = 0
binlog-format = mixed
slave_parallel_workers=40
slave_parallel_type = LOGICAL_CLOCK
net_read_timeout=120
net_write_timeout=180
[me~]$ iostat
Linux 3.10.0-957.el7.x86_64 (hostname) 01/13/2020 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.96 0.05 0.32 0.18 0.00 98.49
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 10.23 1.07 474.06 9583704 4236848304
dm-0 0.10 0.01 0.39 73093 3495820
dm-1 0.13 0.08 0.43 751960 3840532
dm-2 0.04 0.54 0.02 4802280 200592
dm-3 22.66 0.38 469.33 3363537 4194622224
dm-4 0.96 0.06 3.88 562013 34689060
Подозреваю, что еще нужен выхлоп переменных рантайма, но там их очень уж дофига.
Если есть толковые DBA - помогите, пожалста, ничего в голову не приходит.
dba, mysqld, ram, replication, swap