Konfiguracja dla 30GB RAM MySQL

0

Witam,

mam serwer:

2 vCores x 2,4 GHz
30 GB RAM

i standardowy config:

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0
[mysqld]
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

key_buffer              = 16M
max_allowed_packet      = 16M
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         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 16M

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/
#
 

chciałbym to podkręcić pod zasoby serwera, na serwerze będzie działał tylko MySQL. Wiem że NIE MA uniwersalnych rozwiązań, ale podobno są lepsze niż domyślne, ja się nie znam, więc chciałbym prosić o pomoc

0

Na stronie http://tools.percona.com/wizard jest generator configa, który pozwoli lepiej dopasować ustawienia pod konkretne potrzeby poprzez formularz, który pyta do czego ten serwer jest wykorzystywany. Wprawdzie generator został napisany pod Percona Server - z powodzeniem można go wykorzystać na standardowej instalacji MySQL.

[Marcin]

0

Takie coś mi wygenerował


[mysql]

# CLIENT #
port                           = 3306
socket                         = /var/lib/mysql/mysql.sock

[mysqld]

# GENERAL #
user                           = mysql
default-storage-engine         = InnoDB
socket                         = /var/lib/mysql/mysql.sock
pid-file                       = /var/lib/mysql/mysql.pid

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

# SAFETY #
max-allowed-packet             = 16M
max-connect-errors             = 1000000
skip-name-resolve
sql-mode                       = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now                 = 1
innodb                         = FORCE

# DATA STORAGE #
datadir                        = /var/lib/mysql/

# BINARY LOGGING #
log-bin                        = /var/lib/mysql/mysql-bin
expire-logs-days               = 14
sync-binlog                    = 1

# CACHES AND LIMITS #
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               = 4096

# INNODB #
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2
innodb-log-file-size           = 512M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 24G

# LOGGING #
log-error                      = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = /var/lib/mysql/mysql-slow.log



 
0

Konfiguracja wygląda w porządku. Dodam jeszcze coś od siebie:

  1. Jeśli na serwerze nie ma aplikacji, które wymagają krytycznego poziomu bezpieczeństwa co do zapisywanych danych na dysku (tj. jeśli w razie awarii możesz pozwolić sobie na utratę ostatniej sekundy zapisanych danych), to lepiej ustawić innodb-flush-log-at-trx-commit=2 - przyspieszy to znacząco zapis danych na dysku.

  2. Proponuje dodać flagę innodb_buffer_pool_instances=2 (podzieli to ustawiony i tak już duży bufor 24GB na 2 mniejsze niezależnie działające bufory dostępne osobno dla każdego procesora). Powinno przyspieszyć serwer na wypadek wielu zapytań wykonywanych jednocześnie. To oczywiście ma sens, jeśli na serwerze nie ma jednej wielkiej bazy, na której wykonujesz np. obliczenia statystyczne, w których w 1 zapytaniu wykorzystujesz tabele/zestaw tabel o łącznej objętości równej bądź większej, niż rozmiar bufora (24GB).

1 użytkowników online, w tym zalogowanych: 0, gości: 1