Ich hoffe irgendwie, dass jemand in der Lage sein könnte, einige Unterstützung bei der Optimierung einer my.cnf-Datei für einen extrem hohen MySQL-Datenbankserver anzubieten.MySQL my.cnf Leistungsoptimierung Empfehlungen
Our architecture is as follows:
Memory : 96GB
CPUs : 12
OS & Mysql : 64-bit
Disk Space : 1.2 TB
DB Engine : MyISAM
Unsere Webanwendung wird von etwa 300 Clients gleichzeitig verwendet. Wir brauchen unser my.cnf abgestimmt, um die bestmögliche Leistung für diese Infrastruktur zu bieten.
Ich bin mir bewusst, dass Indizes und optimierte Abfragen ein wichtiger Faktor dafür sind, aber wir möchten mit einem System beginnen, das richtig konfiguriert ist, und dann danach systematisch unsere Abfragen entsprechend neu gestalten.
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.
Bearbeiten von RolandoMySQLDBA
Da alle Daten Sie MyISAM ist, benutzen Sie bitte diese Abfrage ausführen und zeigen die Ausgabe
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 ... die Ergebnisse dieser Abfrage war 4G.
haben Sie eine spezifische Langsamkeit, die auf Ihren aktuellen Einstellungen beruht? – Randy
Das ist eine ziemlich gute Maschine für nur 300 Web-Benutzer, noch mehr, wenn dies nur ein DB-Server ist. Ist das Windows oder Linux? Wie auch immer, ich empfehle generell separate Festplatten/LUNs für das OS/Swap und das Datenvolume (wo sich das Datenverzeichnis befindet). Halten Sie sich von Software-Raid usw. fern. Es gibt ein Tool namens "mk-query-advisor", mit dem Sie dieses Setup optimieren können. Wenn Ihre 'Front-End'-Anwendung nicht das' Richtige 'tut (statisches Daten zwischenspeichern, Abfragen nur bei Bedarf usw.), kann Tuning Ihnen möglicherweise nicht viel bringen. – JMC
Sie können auch ein Wartungsskript hinzufügen (natürlich nach einer Sicherung), das jede Woche 'OPTIMIZE TABLE tbl_name' aufruft, um die Dinge optimiert zu halten. Ich untersuche auch die Partitionierung großer Tabellen usw. – JMC