web-dev-qa-db-ger.com

Empfehlungen zur Leistungsoptimierung von MySQL my.cnf

Ich hoffe, dass jemand Hilfe bei der Optimierung einer my.cnf-Datei für einen extrem hochvolumigen mysql-Datenbankserver anbieten kann.

Our architecture is as follows:

Memory     : 96GB
CPUs       : 12
OS & Mysql : 64-bit
Disk Space : 1.2 TB
DB Engine  : MyISAM

Unsere Webapplikation wird von rund 300 Kunden gleichzeitig genutzt. Wir müssen my.cnf optimieren, um die bestmögliche Leistung für diese Infrastruktur zu erzielen.

Ich bin mir völlig bewusst, dass Indizes und optimierte Abfragen ein wesentlicher Faktor dafür sind, aber wir möchten mit einem System beginnen, das ordnungsgemäß konfiguriert ist, und anschließend unsere Abfragen systematisch entsprechend umgestalten.

Here is our current my.cnf file content:

[mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
user=mysql

log-bin=mysql-bin
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=1

log-slow-queries = /var/log/mysqld_slow_queries.log
long_query_time = 10

max_connections = 500

key_buffer_size = 32768M
#max_allowed_packet = 2M
#table_open_cache = 128
#sort_buffer_size = 1024K
#net_buffer_length = 64K
#read_buffer_size = 1024K
#read_rnd_buffer_size = 1024K
#myisam_sort_buffer_size = 8M
query_cache_size = 128M
query_cache_limit = 128M

interactive_timeout = 300
wait_timeout = 300

# Added values after load testing
thread_cache_size = 8
#tmp_table_size = 256M
#max_heap_table_size = 256M
#table_cache = 512
#join_buffer_size = 512

log-error=/var/log/mysqld.log

innodb_buffer_pool_size=128M
#innodb_file_per_table
#innodb_log_file_size=250M
##innodb_buffer_pool_size=64M
#innodb_buffer_pool_size=1024M
#innodb_log_buffer_size=4M
##log-bin=mysql-bin

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#[myisamchk]
#key_buffer = 64M
#sort_buffer = 64M
#read_buffer = 16M
#write_buffer = 16M

Irgendwelche Vorschläge? Danke Leute.

Edit von RolandoMySQLDBA

Da alle Ihre Daten MyISAM sind, führen Sie diese Abfrage aus und zeigen Sie die Ausgabe an

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 3 PowerOf1024) B;

@ Rolando - Danke ... das Ergebnis dieser Abfrage war 4G.

21
Skittles

Beginnen Sie mit dem Percona-Assistenten und vergleichen Sie die Empfehlungen nacheinander mit Ihren aktuellen Einstellungen. Keine Sorge, es gibt nicht so viele anwendbare Einstellungen, wie Sie vielleicht denken.

https://tools.percona.com/wizard

Jeder zeigt auf key_buffer_size zuerst was du angesprochen hast. Mit 96 GB Arbeitsspeicher würde ich keinen winzigen Standardwert beachten (wahrscheinlich sind es nur 96 MB!).

23
KCD

Ich habe dieses Tool ausprobiert und es hat mir gute Ergebnisse gebracht.

https://github.com/major/MySQLTuner-Perl

7
Sooraj