Mysql zeigt 100 % CPU-Auslastung

Mysql zeigt 100 % CPU-Auslastung

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:

  1. DeinLESEN : SCHREIBEN-Verhältnis (61 : 39 )gibt den Hinweis, dass Ihr Motortyp geändert werden sollte in Innodb. Überprüfen Sie vorher die Ausgabe von

    SHOW ENGINE INNODB STATUS\G; 
    SHOW FULL PROCESSLIST;
    

    während der Spitzenzeiten. Höchstwahrscheinlich werden Sie Abfragen im LOCKStatus sehen. Tabellensperren sind die einzige große Einschränkung von MyISAM. Wenn Sie eine große Anzahl gleichzeitiger Schreib- und Auswahlvorgänge haben und die Abfrageleistung konstant schnell sein muss, Innodbist aufgrund eines besseren Sperrmechanismus die einzige Wahl ( row-level)

  2. Gesamtzahl fragmentierter Tabellen: 129. Führen Sie OPTIMIZE TABLEalles aus und defragmentieren Sie es für eine bessere Leistung

  3. Schauen 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 ExaminedSet hoch ist, dann sind diese Abfragen gut für optimization. Es ist möglich, dass einige Abfragen in slow_query.log viele CPU-Ressourcen verbrauchen.

  4. Ü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_sizesodass mehr Cache vorhanden ist.

  5. 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.

verwandte Informationen