2

The server has 8core CPU and 22 GB of ram. Every day receives many requests from users, and recently a replication mechanism has been activated, with an implementation of a db master and a slave. Now the server is really slow (on ssh top, mysqld reaches 600% and more of CPU Usage) and sometimes it go down of service. Please can you help me to fix this issue?

here is my mysql configuration file:

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
##
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address       = 127.0.0.1
#
# * Fine Tuning
#
innodb_buffer_pool_size = 12G
key_buffer_size     = 1G
max_allowed_packet  = 256M
thread_stack        = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options  = BACKUP
max_connections        = 300


#innodb_buffer_pool_instances=8
#innodb_read_io_threads=8
#innodb_write_io_threads=8

#open_files_limit = 1024
#table_open_cache = 400
server_id           = 2
bind-address        = 0.0.0.0
log_bin             = /var/log/mysql/mysql-bin.log
log_bin_index       = /var/log/mysql/mysql-bin.log.index
relay_log           = /var/log/mysql/mysql-relay-bin
relay_log_index     = /var/log/mysql/mysql-relay-bin.index
expire_logs_days    = 10
max_binlog_size     = 100M
log_slave_updates   = 1
auto-increment-increment = 2
auto-increment-offset = 2
replicate-ignore-db=phpmyadmin
replicate-ignore-db=mysql
skip-name-resolve
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit   = 0
query_cache_size        = 0

sort_buffer_size = 1M
join_buffer_size = 1M
read_buffer_size = 1M



#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
#log_slow_queries   = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id      = 1
#log_bin            = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size   = 100M
#binlog_do_db       = include_database_name
#binlog_ignore_db   = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
anto
  • 21
  • 1
  • 2
  • 1
    Please elaborate. Show MySQL stats, show system stats gathered with sysstat or atop so we can figure out what's your system's bottleneck. You didn't include anything save the most basic stats of your system - does it have local disks or SAN? Is it hardware or virtualized? etc. – fuero Sep 20 '18 at 14:42
  • How is it running replication with `server_id` and `log_bin` disabled? Why are `open_files_limit` / `table_open_cache` disabled? On a busy server your thread_cache_seems too small - how many concurrent users are there normally? You should enable a slow query log. `SHOW GLOBAL STATUS` / `SHOW ENGINE INNODB STATUS` information would be useful. – danblack Sep 22 '18 at 01:28
  • if you enable 'log-queries-not-using-indexes' (lets not for the time being), always set min_examined_row_limit to at least 500. What mysql version? Why is replicate-ignore-db=mysql set? Is this the config for the slave or master? – danblack Sep 22 '18 at 01:31

1 Answers1

1

Suggestions for your my.cnf [mysqld] section changes.

key_buffer_size=100M  # from 1G for more reasonable RAM allocation
thread_cache_size=100  # from 8 to reduce threads_created

REMOVE THE leading # from

innodb_buffer_pool_instances    for qty of 8 to minimize mutex contention

ADD

innodb_lru_scan_depth=100  # from 1024 default to reduce CPU cycles used every SECOND

REMOVE 4 leading # from innodb_read_io_threads and the next 3 # to activate these lines

innodb_read_io_threads=64  # from 8 to encourage multi core processing
innodb_write_io_threads=64  # from 8 to encourage multi core processing

open_files_limit=4096  # from 1024 for now
table_open_cache=2048  # from 400 for now

join_buffer_size=128K  # from 1M for more reasonable RAM per connection
read_buffer_size=128K  # from 1M for more reasonable RAM per connection 

the last one will reduce handler_read_next Rate Per Second significantly.

yagmoth555
  • 16,300
  • 4
  • 26
  • 48
Wilson Hauck
  • 426
  • 4
  • 10