
Ich habe einige Probleme mit meinem mit Cpanel installierten MySQL-Server. Mein Server zeigt eine 100%ige Auslastung von MySQL an, auch wenn ich nicht zu viel Verkehr im Web habe.
Ich verwende CentOS 6.5x64 mit 80 GB SSD und 8 GB RAM mit 4 CPU-Kern.
meine.cnf:
[mysqld]
max_connections=500
key_buffer=128M
myisam_sort_buffer_size=35M
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
table_cache=4000
thread_cache_size=286
interactive_timeout=25
wait_timeout=7000
connect_timeout=10
max_allowed_packet=268435456
max_connect_errors=10
query_cache_limit=2M
query_cache_size=256M
query_cache_type=1
tmp_table_size=16M
innodb_buffer_pool_size=134217728
open_files_limit=10000
[mysqld_safe]
[mysqldump]
quick
max_allowed_packet=16M
[myisamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
Hier ist die Ausgabe von MySQLTuner:
-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
[--] Data in MyISAM tables: 164M (Tables: 88)
[--] Data in InnoDB tables: 33M (Tables: 239)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 129
-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned
-------- Performance Metrics -------------------------------------------------
[--] Up for: 15m 2s (83K q [92.549 qps], 13K conn, TX: 44M, RX: 5M)
[--] Reads / Writes: 61% / 39%
[--] Total buffers: 544.0M global + 4.5M per thread (500 max threads)
[OK] Maximum possible memory usage: 2.7G (34% of installed RAM)
[OK] Slow queries: 0% (0/83K)
[OK] Highest usage of available connections: 23% (116/500)
[OK] Key buffer size / total MyISAM indexes: 128.0M/59.2M
[OK] Key buffer hit rate: 97.9% (24K cached / 527 reads)
[OK] Query cache efficiency: 54.3% (18K cached / 33K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 1% (5 temp sorts / 388 sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 374 total)
[OK] Thread cache hit rate: 99% (116 created / 13K connections)
[OK] Table cache hit rate: 98% (465 open / 474 opened)
[OK] Open file limit used: 3% (311/10K)
[!!] Table locks acquired immediately: 58%
[OK] InnoDB buffer pool / data size: 128.0M/33.6M
[OK] InnoDB log waits: 0
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Optimize queries and/or use InnoDB to reduce lock wait
Hier ist die Ausgabe meines TOP:
top - 12:01:06 up 1 day, 1:02, 1 user, load average: 10.37, 9.22, 8.61
Tasks: 399 total, 1 running, 397 sleeping, 0 stopped, 1 zombie
Cpu(s): 84.1%us, 15.1%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.2%si, 0.7%st
Mem: 8191528k total, 6042780k used, 2148748k free, 242064k buffers
Swap: 0k total, 0k used, 0k free, 4785012k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24515 mysql 20 0 2732m 165m 6264 S 303.8 2.1 42:43.18 mysqld
19471 root 20 0 174m 10m 6148 S 1.0 0.1 0:00.03 php
19523 root 20 0 172m 10m 5864 S 1.0 0.1 0:00.03 php
19533 root 20 0 172m 9m 5804 S 0.7 0.1 0:00.02 php
19535 root 20 0 172m 10m 5864 S 0.7 0.1 0:00.02 php
Was könnte die Ursache für dieses Problem sein?
Muss ich Änderungen an meiner my.cnf vornehmen, um zu verhindern, dass der Server hängen bleibt?
Oder muss ich einen neuen Server mit 16 GB RAM kaufen?
Antwort1
Aus Ihren Angaben können wir folgende allgemeine Empfehlungen ableiten:
DeinLESEN : SCHREIBEN-Verhältnis (61 : 39 )gibt den Hinweis, dass Ihr Motortyp geändert werden sollte in
Innodb
. Überprüfen Sie vorher die Ausgabe vonSHOW ENGINE INNODB STATUS\G; SHOW FULL PROCESSLIST;
während der Spitzenzeiten. Höchstwahrscheinlich werden Sie Abfragen im
LOCK
Status sehen. Tabellensperren sind die einzige große Einschränkung vonMyISAM
. Wenn Sie eine große Anzahl gleichzeitiger Schreib- und Auswahlvorgänge haben und die Abfrageleistung konstant schnell sein muss,Innodb
ist aufgrund eines besseren Sperrmechanismus die einzige Wahl (row-level
)Gesamtzahl fragmentierter Tabellen: 129. Führen Sie
OPTIMIZE TABLE
alles aus und defragmentieren Sie es für eine bessere LeistungSchauen Sie in Ihremslow_query.log, Überprüfen Sie Query_time, Lock_time, Rows_sent, Rows_examined. Wenn Sie Abfragen finden, bei denen das Verhältnis von
Rows Sent / Rows Examined
Set hoch ist, dann sind diese Abfragen gut füroptimization
. Es ist möglich, dass einige Abfragen in slow_query.log viele CPU-Ressourcen verbrauchen.Überprüfen Sie den Status des Servers hinsichtlich RAM und verfügbarem Speicherplatz:
free -m , df -h
. Wenn Sie über freien Speicher verfügen, erhöhen Sie diesen,innodb_buffer_pool_size
sodass mehr Cache vorhanden ist.Es ist immer gut, diese Parameter in der MySQL-Konfiguration anzupassen
innodb_fast_shutdown=0 innodb_log_buffer_size innodb_log_file_size innodb_flush_method=O_DIRECT query_cache_size=0
VORBEHALT:
Checkliste 1: CPU von MySQL-Prozessen, wenn möglich, CPU erhöhen
Checkliste 2: RAM: Ob der Datensatz in den RAM passt.
Checkliste 3: Verbindungsbezogene Parameter
ABORTED_CONNECTS
,CONNECTIONS
,MAX_USED_CONNECTIONS
,OPEN_FILES
,OPEN_TABLES
,OPENED_FILES
,OPENED_TABLES
,QUERIES
,SLOW_QUERIES
,THREADS_CONNECTED
,THREADS_CREATED
,THREADS_RUNNING
,PERFORMANCE_SCHEMA
,QUERY_CACHE_SIZE
,WAIT_TIMEOUT
,LONG_QUERY_TIME
,INTERACTIVE_TIMEOUT
,CONNECT_TIMEOUT
,MAX_CONNECTIONS
,LOCK_WAIT_TIMEOUT
,TX_ISOLATION
, ,MAX_ALLOWED_PACKET
,GENERAL_LOG
, , ,TABLE_OPEN_CACHE
,SLOW_QUERY_LOG
,OPEN_FILES_LIMIT
,INNODB_LOCK_WAIT_TIMEOUT
Checkliste 4: Speicherbezogene Parameter
key_buffer_size
,query_cache_size
,innodb_buffer_pool_size,innodb_log_buffer_size
,max_connections
, ,read_buffer_size
,read_rnd_buffer_size
,sort_buffer_size
,join_buffer_size
,binlog_cache_size
,thread_stack
,tmp_table_size
Checkliste 5: Andere wichtige InnoDB-Parameter innodb_log_file_size, innodb_file_per_table, innodb_flush_log_at_trx_commit, innodb_flush_method, innodb_fast_shutdown
Checkliste 6: mysqltuner
Ohne Indizes durchgeführte Verknüpfungen: Trefferquote im Tabellencache:
-------- MyISAM Metrics -------------------------------------------- [!!] [!!] Write Key buffer hit rate: -------- InnoDB Metrics -------------------------------------------- [!!] InnoDB buffer pool / data size: [!!] Ratio InnoDB log file size / InnoDB Buffer pool size : [!!] InnoDB buffer pool instances:
Checkliste 7: Prozessliste Die folgenden Abfragen befinden sich seit längerer Zeit im Status „Daten senden“
Checkliste 8: Langsames Abfrageprotokoll - Verhältnis zwischen untersuchten und gesendeten Zeilen sehr hoch.
Checkliste 9: Doppelte Indizes (sofern vorhanden)
Checkliste 10: Plan einiger langsamer Abfragen erklären
Checkliste 11: Prüfen, ob Where-Klausel-Spalten richtig indiziert sind (nicht indizierte Abfragen)
Checkliste 12: Überprüfen Sie, ob Tabellensperren, Metadatensperren und Deadlocks vorliegen (sofern vorhanden).
Checkliste 13: Alle Wartungsjobs werden in Intervallen ausgeführt (z. B. mysqlcheck, mysqldump usw.)
Checkliste 14: Hardwareressourcen, langsame Festplatten, RAID-Neuaufbau, Festplatten-E/A, gesättigtes Netzwerk, Netzwerkbandbreite hinsichtlich Durchsatz bei zunehmender Thread-Anzahl.