MYSQL Optimierung (hohe CPU-Last trotz geringer Anzahl von connections)

Infomatrixx

New Member
Hallo zusammen,
zunächst einmal muss ich hier ein Lob los werden. Ich habe hier nun schon viel gelesen und auch schon einiges gelernt.
Jedoch habe ich noch immer Probleme mit meinem MYSQL-Server.

Kurz zu den Server-Daten:
Bin vor kurzem umgestiegen auf einen HE VPS 2.0 XXL
1024MB fester RAM + 512MB dynamisch
INTEL XEON CPU

Vorweg erzähle ich mal kurz etwas zu der Nutzung:
Es geht um eine Datenbank, in der regelmäßig aktuelle Daten geschrieben werden. Diese werden von einer Weboberfläche abgerufen und dargestellt.
Wichtig ist dabei, dass teilweise Tabellen mit der Zeit ziemlich groß werden.
Beispiel: (Eine Tabelle hat nun knapp 100000 Einträge, eine andere 600000)

Kann das ein Grund für die hohe Last sein ?

Nun habe ich auch schon einiges über den Query_cache gelesen. Dieser ist momentan nicht aktiviert. Wäre das für mich eine Möglichkeit die Last zu reduzieren ? Es gibt einige Scripte der Weboberfläche, die sekündlich jeweils den aktuellsten Eintrag aus der Datenbank auslesen.


Hier nun einmal "top":
top - 23:36:40 up 6 days, 8:49, 2 users, load average: 0.57, 0.51, 0.46
Tasks: 50 total, 1 running, 49 sleeping, 0 stopped, 0 zombie
Cpu(s): 12.2% us, 2.9% sy, 0.0% ni, 84.8% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 6215752k total, 6144756k used, 70996k free, 295264k buffers
Swap: 12289716k total, 32680k used, 12257036k free, 3851920k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24372 mysql 16 0 126m 28m 4288 S 60.6 0.5 9:40.98 mysqld
11699 root 16 0 9180 2748 2140 S 0.3 0.0 0:01.00 sshd
22320 root 16 0 2040 1088 844 R 0.3 0.0 0:02.39 top
1 root 15 0 620 268 224 S 0.0 0.0 0:00.24 init
26235 root 18 0 4008 804 576 S 0.0 0.0 0:00.00 saslauthd
26236 root 18 0 4008 476 248 S 0.0 0.0 0:00.00 saslauthd
26270 root 16 0 4632 1232 864 S 0.0 0.0 0:02.48 sshd
26276 root 16 0 2144 920 708 S 0.0 0.0 0:00.28 xinetd
26282 root 16 0 1700 688 552 S 0.0 0.0 0:00.24 cron
23700 root 16 0 1700 700 360 S 0.0 0.0 0:07.77 syslogd
24001 root 16 0 2716 716 548 S 0.0 0.0 0:00.61 couriertcpd
24003 root 16 0 2616 768 608 S 0.0 0.0 0:00.16 courierlogger
24012 root 16 0 2716 716 548 S 0.0 0.0 0:00.38 couriertcpd
24014 root 16 0 2616 768 608 S 0.0 0.0 0:00.16 courierlogger
24021 root 15 0 2712 712 548 S 0.0 0.0 0:00.61 couriertcpd
24023 root 15 0 2616 768 608 S 0.0 0.0 0:00.33 courierlogger
24031 root 16 0 2712 712 548 S 0.0 0.0 0:00.45 couriertcpd
24033 root 16 0 2616 768 608 S 0.0 0.0 0:00.17 courierlogger
28018 named 16 0 37696 3192 1892 S 0.0 0.1 0:00.44 named
28192 root 15 0 35728 5384 3244 S 0.0 0.1 0:00.13 httpsd
1807 root 16 0 16224 6472 3868 S 0.0 0.1 0:06.81 wdcollect
1814 root 15 0 25184 2276 1804 S 0.0 0.0 2:02.58 monit
13969 qmails 16 0 1452 452 372 S 0.0 0.0 0:10.91 qmail-send
13971 qmaill 16 0 1408 428 372 S 0.0 0.0 0:01.13 splogger
13972 root 15 0 1440 344 260 S 0.0 0.0 0:00.35 qmail-lspawn
13973 qmailr 16 0 1568 588 276 S 0.0 0.0 0:00.64 qmail-rspawn
13974 qmailq 15 0 1400 324 268 S 0.0 0.0 0:00.26 qmail-clean
3240 popuser 16 0 25396 22m 2280 S 0.0 0.4 0:00.51 spamd
19543 drweb 15 0 18192 15m 1508 S 0.0 0.2 1:09.42 drwebd
16211 popuser 16 0 25612 21m 828 S 0.0 0.3 0:03.73 spamd
15929 psaadm 15 0 43176 25m 16m S 0.0 0.4 0:22.19 httpsd
15938 psaadm 16 0 41892 23m 15m S 0.0 0.4 0:21.12 httpsd
31964 root 15 0 9180 2760 2144 S 0.0 0.0 0:01.26 sshd
31990 root 15 0 2764 1756 1292 S 0.0 0.0 0:00.12 bash
6075 root 16 0 27932 13m 6360 S 0.0 0.2 0:00.37 httpd2-prefork
6111 wwwrun 16 0 36060 19m 4216 S 0.0 0.3 0:28.54 httpd2-prefork
13839 wwwrun 15 0 36892 20m 4224 S 0.0 0.3 0:14.33 httpd2-prefork
20379 wwwrun 15 0 37920 21m 4260 S 0.0 0.4 0:06.16 httpd2-prefork
25962 wwwrun 16 0 36848 20m 4196 S 0.0 0.3 0:03.03 httpd2-prefork

Dann noch einmal die aktuelle my.cnf (Habe ich nach einem Artikel in Bezug auf die primer.sh angepasst)

key_buffer = 80M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 3M
net_buffer_length = 8K
read_buffer_size = 3M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections = 50

Sobald der Server noch ein bisschen läuft, werde ich auch noch die Ausgabe vom tuning-primer.sh hier einfügen.


Danke schon mal im Vorraus für eure Antworten.


Gruß

Fabian
 
Hallo,

der Query Cache kann natürlich einiges rausholen - den solltest du auf jeden Fall aktivieren. Wobei es mich etwas wundert dass er bei dir nicht aktiv ist.

Was die Config anbelangt überlasse ich anderen die Antwort, da bin ich mir nicht sicher genug.

Was dir aber eventuell auch noch gut helfen kann wäre die Indexe der Anwendung zu überprüfen und hier ggf. noch etwas zu tunen. Sehr hilfreich ist vor allem der Befehl EXPLAIN. Es ist durchaus denkbar dass MySQL für den Zugriff auf deine Daten jeden einzelnen Datensatz durchgehen muss - das geht selbstverständlich massiv auf die CPU und die Gesamtperformance.

Eine interessante Anleitung zu der Thematik findest du z.B. unter Optimizing MySQL: Queries and Indexes.

Gruß,
Marco
 
Also kurze Zwischenmeldung, durch den Querycache konnte ich den CPU-Load schon mal halbieren.

Merkt der Cache denn, wenn sich etwas verändert ?

Gruß

Fabian
 
Back
Top