title: MariaDB config optimization
body: <p>So i think i really messed up my configuration file for mariadb. Im using a dedicated server for apache2 and mysql. I do not know if the server response time is caused by mysql taking too long to respond to a query or if its the code itself. I already tried some config generators but i dont feel like they work. Here are the dedicated servers specs:</p>
  
  <p><code>Intel C2750
   32 GB RAM
   256 GB SSD</code></p>
  
  <pre><code>#
  # These groups are read by MariaDB server.
  # Use it for options that only the server (but not clients) should see
  #
  # See the examples of server my.cnf files in /usr/share/mysql/
  #
  
  # this is read by the standalone daemon and embedded servers
  [server]
  
  # this is only for the mysqld standalone daemon
  [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
  # Skip reverse DNS lookup of clients
  skip-name-resolve
  # 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
  #
  key_buffer_size     = 5048M
  key-buffer-size     = 32M
  max_allowed_packet  = 2024M
  max-allowed-packet  = 16M 
  max-connect-errors  = 1000000
  thread_stack        = 1024K
  thread_cache_size       = 30
  # This replaces the startup script and checks MyISAM tables if needed
  # the first time they are touched
  myisam_recover_options  = BACKUP
  max_connections        = 500
  table_cache            = 100
  table_open_cache = 3000
  table_definition_cache = 9000
  join_buffer_size = 300K
  performance_schema = ON
  
  #thread_concurrency     = 10
  max_user_connections    = 455
  #
  # * Query Cache Configuration
  #
  query_cache_limit   = 1048M
  query_cache_size    = 0
  query_cache_type    = 0
  
  slow-query-log = 1
  slow-query-log-file = /var/lib/mysql/mysql-slow.log
  long_query_time = 1
  #
  # * 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
  #
  # Enable the slow query log to see queries with especially long duration
  #slow_query_log_file    = /var/log/mysql/mariadb-slow.log
  #long_query_time = 10
  #log_slow_rate_limit    = 1000
  #log_slow_verbosity = query_plan
  #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   = exclude_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!
  innodb_buffer_pool_size = 15G
  #innodb_s_lock_spin_rounds = 120
  #innodb_thread_concurrency = 0
  innodb_log_file_size = 3G
  innodb_buffer_pool_instances = 25
  
  tmp-table-size                 = 32M
  max-heap-table-size            = 32M
  query-cache-type               = 0
  query-cache-size               = 0
  max-connections                = 500
  thread-cache-size              = 50
  open-files-limit               = 65535
  table-definition-cache         = 4096
  table-open-cache               = 100
  innodb-flush-method            = O_DIRECT
  innodb-log-files-in-group      = 2
  innodb-log-file-size           = 512M
  innodb-flush-log-at-trx-commit = 2
  innodb-file-per-table          = 1
  innodb-buffer-pool-size        = 26G
  
  #innodb_buffer_size = 256M
  #
  # * Security Features
  #
  # Read the manual, too, if you want chroot!
  # chroot = /var/lib/mysql/
  #
  # For generating SSL certificates you can use for example the GUI tool "tinyca".
  #
  # ssl-ca=/etc/mysql/cacert.pem
  # ssl-cert=/etc/mysql/server-cert.pem
  # ssl-key=/etc/mysql/server-key.pem
  #
  # Accept only connections using the latest and most secure TLS protocol version.
  # ..when MariaDB is compiled with OpenSSL:
  # ssl-cipher=TLSv1.2
  # ..when MariaDB is compiled with YaSSL (default in Debian):
  # ssl=on
  
  #
  # * Character sets
  #
  # MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
  # utf8 4-byte character set. See also client.cnf
  #
  character-set-server  = utf8mb4
  collation-server      = utf8mb4_general_ci
  
  #
  # * Unix socket authentication plugin is built-in since 10.0.22-6
  #
  # Needed so the root database user can authenticate without a password but
  # only when running as the unix root user.
  #
  # Also available for other users if required.
  # See https://mariadb.com/kb/en/unix_socket-authentication-plugin/
  
  # this is only for embedded server
  [embedded]
  
  # This group is only read by MariaDB servers, not by MySQL.
  # If you use the same .cnf file for MySQL and MariaDB,
  # you can put MariaDB-only options here
  [mariadb]
  
  # This group is only read by MariaDB-10.1 servers.
  # If you use the same .cnf file for MariaDB of different versions,
  # use this group for options that older servers don't understand
  [mariadb-10.1]
  </code></pre>