Optimierungs- / Fehlersuchhilfe

MySQL, PostgreSQL, SQLite
fix
Posts: 12
Joined: 2005-01-02 01:21
Location: GieÃ?en

Optimierungs- / Fehlersuchhilfe

Post by fix » 2005-02-26 13:03

Hi.

Ich bräuchte mal eine gewisse Optimierungs- / Fehlerfindhilfe. Wäre jedem sehr dankbar, der mit helfen kann :)

Folgendes Problem:

Wir betreiben ein VBulletin 3 Forum mit einer Datenbankgröße von ca. 300mb. Die Ladezeiten sind teils sehr langsam (die Seiten brauchen 2-10 Sekunden um generiert zu werden - zum testen: http://www.united-forum.de).

Die Sache ist aber, dass wir jetzt auf dem gleichen Server ein weiteres Testforum installiert haben und die Ladezeiten dort nur circa 0.2 Sekunden betragen. ok, da war auch keine 300MB Datenbank drin, aber damit sollte der Server (2400celeron mit 512MB RAM) schon fertig werden, da er sonst keinerlei Belastung hat [ca. 50-100 User online]. Ich hatte die Datenbank auch schon "aufgeräumt" (also zB den Suchindex gelöscht) und die Datenbank so auf ca. 200 MB verkleinert - auch da trat keinerlei Geschwindigkeitsverbesserung auf.

Bei dem Testforum ist es dann so, dass, sobald man die größere Datenbank importiert, auch dieses langsam wird (Ladezeiten von 2-10 Sekunden). Veränderter Code vom Forum ist auszuschließen, das habe ich alles schon durchgetestet. Es muss eigentlich irgendein Problem mit der Datenbankabfrage sein - ich weiß nur absolut nicht mehr was es sein könnte.

Die Forum läuft mit mysql (4.0.15) und php (5.0.3) - auch der unserialize bug von php ist auszuschließen.

Mal ein paar Server-Stats:

---
(top)

Tasks: 103 total, 5 running, 96 sleeping, 0 stopped, 2 zombie
Cpu(s): 84.8% user, 7.2% system, 0.0% nice, 8.0% idle
Mem: 512616k total, 497960k used, 14656k free, 3236k buffers
Swap: 514072k total, 49936k used, 464136k free, 274072k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16647 wwwrun 14 0 15668 15m 6424 R 28.5 3.0 0:01.24 httpd2-prefork
16610 wwwrun 15 0 15752 15m 6556 R 26.5 3.0 0:29.68 httpd2-prefork
16645 wwwrun 9 0 14648 14m 6468 S 7.2 2.8 0:01.14 httpd2-prefork
16588 wwwrun 18 0 16384 15m 6452 R 3.6 3.2 0:08.94 httpd2-prefork
16667 root 14 0 976 976 748 R 2.4 0.2 0:00.28 top
27692 mysql 9 0 48168 44m 2088 S 0.8 9.0 1:04.58 mysqld
30234 mysql 9 0 48168 44m 2088 S 0.8 9.0 1:02.36 mysqld
27750 mysql 10 0 48168 44m 2088 S 0.4 9.0 1:00.92 mysqld
30245 mysql 9 0 48168 44m 2088 S 0.4 9.0 1:06.14 mysqld
1 root 9 0 88 72 52 S 0.0 0.0 0:14.33 init
2 root 9 0 0 0 0 S 0.0 0.0 0:00.03 keventd
3 root 19 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd_CPU0
4 root 9 0 0 0 0 S 0.0 0.0 1:02.00 kswapd
5 root 9 0 0 0 0 S 0.0 0.0 0:00.00 bdflush
6 root 9 0 0 0 0 S 0.0 0.0 0:16.97 kupdated
9 root 9 0 0 0 0 S 0.0 0.0 0:00.00 khubd
10 root 9 0 0 0 0 S 0.0 0.0 3:38.39 kjournald
55 root 9 0 0 0 0 S 0.0 0.0 0:01.00 kjournald
535 root 9 0 460 440 440 S 0.0 0.1 0:00.09 dhcpcd
602 root 9 0 604 576 524 S 0.0 0.1 0:06.19 syslogd
605 root 9 0 1592 452 452 S 0.0 0.1 0:00.14 klogd
615 root 9 0 1188 840 840 S 0.0 0.2 0:00.03 saslauthd
616 root 9 0 1220 872 872 S 0.0 0.2 0:00.02 saslauthd
617 root 9 0 1220 872 872 S 0.0 0.2 0:00.05 saslauthd
618 root 9 0 1220 920 920 S 0.0 0.2 0:00.01 saslauthd
619 root 9 0 1188 840 840 S 0.0 0.2 0:00.02 saslauthd
629 bin 9 0 508 488 488 S 0.0 0.1 0:00.00 portmap
676 root 9 0 272 228 228 S 0.0 0.0 0:00.00 startpar
677 root 8 0 800 736 684 S 0.0 0.1 0:01.01 xinetd
679 named 9 0 1572 1256 1164 S 0.0 0.2 0:00.01 named
680 named 9 0 1572 1256 1164 S 0.0 0.2 0:05.96 named
681 named 9 0 1572 1256 1164 S 0.0 0.2 0:01.28 named
682 named 9 0 1572 1256 1164 S 0.0 0.2 0:01.67 named
683 named 9 0 1572 1256 1164 S 0.0 0.2 0:00.00 named
721 root 9 0 1152 980 928 S 0.0 0.2 0:00.51 sshd
899 root 8 0 1300 1108 1060 S 0.0 0.2 0:12.38 master
971 root 9 0 784 720 676 S 0.0 0.1 0:12.98 nscd
972 root 9 0 784 720 676 S 0.0 0.1 0:07.87 nscd
973 root 9 0 784 720 676 S 0.0 0.1 0:13.90 nscd
974 root 9 0 784 720 676 S 0.0 0.1 0:00.33 nscd
975 root 9 0 784 720 676 S 0.0 0.1 0:00.47 nscd
976 root 9 0 784 720 676 S 0.0 0.1 0:00.38 nscd
977 root 9 0 784 720 676 S 0.0 0.1 0:00.36 nscd
979 root 9 0 572 544 500 S 0.0 0.1 0:04.17 cron
992 root 9 0 496 440 440 S 0.0 0.1 0:00.04 mingetty
993 root 9 0 496 440 440 S 0.0 0.1 0:00.03 mingetty
994 root 9 0 496 440 440 S 0.0 0.1 0:00.03 mingetty
995 root 9 0 496 440 440 S 0.0 0.1 0:00.04 mingetty
996 root 9 0 496 440 440 S 0.0 0.1 0:00.03 mingetty
997 root 9 0 496 440 440 S 0.0 0.1 0:00.03 mingetty
998 root 9 0 476 428 428 S 0.0 0.1 0:00.00 agetty
5942 root 9 0 1300 1096 1096 S 0.0 0.2 0:00.01 pipelog.pl
6412 root 9 0 1300 1096 1096 S 0.0 0.2 0:00.00 pipelog.pl

---

(ps aux)

wwwrun 30347 0.0 0.6 25696 3504 ? S Feb24 0:17 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 30401 0.0 0.6 25016 3316 ? S Feb24 0:03 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 30485 0.0 0.6 25244 3252 ? S Feb24 0:04 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 30489 0.0 0.6 25756 3316 ? S Feb24 0:03 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
postfix 32561 0.0 0.2 4224 1188 ? S Feb24 0:00 qmgr -l -t fifo -u
root 27656 0.0 0.1 2704 916 ? S 00:29 0:00 /bin/sh /usr/bin/mysqld_safe --user=mysql --pid-file=/var/lib/mysql/mysqld.pid --socket=/var/li
mysql 27688 0.0 9.0 63580 46140 ? S 00:29 0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27689 0.0 9.0 63580 46140 ? S 00:29 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27690 0.0 9.0 63580 46140 ? S 00:29 0:24 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27691 0.1 9.0 63580 46140 ? S 00:29 1:12 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27692 0.1 9.0 63580 46140 ? S 00:29 1:04 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27693 0.1 9.0 63580 46140 ? S 00:29 1:08 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27694 0.1 9.0 63580 46140 ? S 00:29 1:14 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27695 0.1 9.0 63580 46140 ? S 00:29 1:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27696 0.1 9.0 63580 46140 ? S 00:29 1:18 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27697 0.1 9.0 63580 46140 ? S 00:29 1:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27699 0.1 9.0 63580 46140 ? S 00:29 1:11 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27700 0.1 9.0 63580 46140 ? S 00:29 1:11 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 27750 0.1 9.0 63580 46140 ? S 00:30 1:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 28085 0.1 9.0 63580 46140 ? S 00:40 1:17 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 28086 0.1 9.0 63580 46140 ? S 00:40 1:16 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30233 0.1 9.0 63580 46140 ? S 01:49 1:13 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30234 0.1 9.0 63580 46140 ? S 01:49 1:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30237 0.1 9.0 63580 46140 ? S 01:49 0:59 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30240 0.1 9.0 63580 46140 ? S 01:49 1:18 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30241 0.1 9.0 63580 46140 ? S 01:49 1:05 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30242 0.1 9.0 63580 46140 ? S 01:49 1:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30244 0.1 9.0 63580 46140 ? S 01:49 1:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
mysql 30245 0.1 9.0 63580 46140 ? S 01:49 1:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql
wwwrun 1503 0.6 2.6 25960 13572 ? S 03:57 3:42 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
root 2122 0.0 0.2 3312 1408 ? S 04:18 0:08 /usr/bin/perl /root/confixx/pipelog.pl
postfix 14225 0.0 0.2 4204 1336 ? S 11:38 0:00 showq -t unix -u
postfix 15353 0.0 0.2 4204 1292 ? S 12:14 0:00 pickup -l -t fifo -u
wwwrun 16357 2.8 3.0 25944 15852 ? D 12:46 0:20 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16385 10.9 3.0 25720 15632 ? S 12:47 1:14 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16389 2.4 3.1 25988 15928 ? S 12:47 0:16 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
root 16414 0.0 0.4 5580 2176 ? S 12:48 0:00 sshd: root@notty
root 16420 0.0 0.4 5580 2176 ? S 12:48 0:00 sshd: root@notty
root 16422 0.0 0.2 4652 1260 ? S 12:48 0:00 /usr/lib/ssh/sftp-server
wwwrun 16427 3.1 3.0 26084 15868 ? S 12:48 0:19 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16456 3.6 3.0 25656 15484 ? S 12:49 0:18 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16458 1.8 3.0 25952 15728 ? S 12:49 0:09 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16588 6.0 3.0 26044 15820 ? S 12:54 0:12 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16610 27.4 3.1 26084 15896 ? R 12:55 0:57 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16613 2.3 2.9 25352 15076 ? S 12:55 0:04 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
root 16644 0.1 0.4 5576 2152 ? S 12:56 0:00 sshd: root@pts/0
wwwrun 16645 3.4 3.0 25876 15652 ? S 12:56 0:03 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16646 1.2 2.8 24748 14380 ? S 12:56 0:01 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16647 5.3 2.9 25568 15288 ? S 12:56 0:05 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
root 16648 0.0 0.4 5576 2152 ? S 12:56 0:00 sshd: root@pts/0
root 16650 0.0 0.3 2836 1652 pts/0 S 12:56 0:00 -bash
wwwrun 16691 3.3 2.6 24096 13812 ? S 12:57 0:02 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
postfix 16692 0.0 0.4 5760 2132 ? S 12:57 0:00 smtpd -n smtp -t inet -u
postfix 16693 0.0 0.2 4192 1280 ? S 12:57 0:00 proxymap -t unix -u
postfix 16694 0.0 0.3 5232 1800 ? S 12:57 0:00 cleanup -z -t unix -u
postfix 16695 0.0 0.3 5068 1736 ? S 12:57 0:00 trivial-rewrite -n rewrite -t unix -u
postfix 16696 0.0 0.3 4352 1636 ? S 12:57 0:00 local -t unix
root 16697 0.0 0.0 0 0 ? Z 12:58 0:00 [cron] <defunct>
root 16698 0.0 0.0 0 0 ? Z 12:58 0:00 [cron] <defunct>
wwwrun 16720 0.0 1.2 17528 6408 ? S 12:58 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16721 0.0 1.2 17528 6408 ? S 12:58 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
wwwrun 16722 0.0 1.2 17528 6408 ? S 12:58 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -DSSL
root 16723 0.0 0.1 2668 720 pts/0 R 12:58 0:00 ps aux

---

Im slowquerielog ist hin & wieder mal ein Eintrag, aber der letzte stamm zB von gestern Abend irgendwann - die Probleme treten aber auch jetzt auf - das hat also wohl nichts damit zu tun.

---

Bei der mysql Konfiguration hab ich schon viele Sachen probiert, die haben alle nichts gebracht.

Die aktuelle Konfiguration ist jetzt (auf Anraten des VBulletin Supports):

# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
log-slow-queries = /usr/mysql/mysqld.slow.log
skip-locking
skip-innodb
max_connections = 650
key_buffer = 16M
myisam_sort_buffer_size = 64M
table_cache = 1024
thread_cache_size = 64
wait_timeout = 10800
connect_timeout = 10
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
tmp_table_size = 32M
max_allowed_packet = 16M
net_buffer_length = 8K
query_cache_type = 1
query_cache_size = 32M
query_cache_limit = 1M

Vorher war sie:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
log-slow-queries = /usr/mysql/mysqld.slow.log
skip-locking
max_connections = 300
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 128
thread_cache_size = 64
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
net_buffer_length = 8K
myisam_sort_buffer_size = 32M
query_cache_type = 1
query_cache_size = 16M
query_cache_limit = 1M

Bei keiner der Konfiguration ist ein Unterschied der Geschwindigkeit bemerkbar.

---

Die Tabellen hab ich schon durch optimze, repair etc laufen lassen - das hat auch nichts gebracht.

Ich weiß, dass es wohl schwer ist die Ursache zu finden - ist auch nicht das erste mal, dass ich wo nach Hilfe frage. Bisher hat leider niemand den Grund finden können, was natürlich recht deprimierend ist, weil man weiß, dass der Server das Forum locker packen können muss, aber trotzdem diese langen Ladezeiten hat...

Danke für alle Tipps & Hinweise.

edit: zum Vergleich noch das Testforum und ein anderes auf dem Server gehostetes Projekt - nur um zu zeigen, dass der Server generell deutlich schneller kann / will.

http://abi05.united-forum.de (kleine phpkit page)
http://vb3test.united-forum.de (testforum) htaccess: test / vb3test

User avatar
Joe User
Project Manager
Project Manager
Posts: 11615
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Optimierungs- / Fehlersuchhilfe

Post by Joe User » 2005-02-26 14:00

Source an das System anpassen und insbesondere die DB-Queries optimieren/reduzieren...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

fix
Posts: 12
Joined: 2005-01-02 01:21
Location: GieÃ?en

Re: Optimierungs- / Fehlersuchhilfe

Post by fix » 2005-02-26 14:43

Der Code ist ja eigentlich recht simpel (und läuft ja vorallem auch gut - siehe Testforum).

Von den Datenbankqueries hab ich keine gefunden die übermäßig langsam sind und extrem viele sind es auch nicht (im Schnitt ca. 10-15 pro Seite).

streicher
Posts: 17
Joined: 2003-06-02 18:39

Re: Optimierungs- / Fehlersuchhilfe

Post by streicher » 2005-02-26 18:51

Hmm, von der Leistung her sollte der Server dies in der Tat noch gut wegstecken können. An den Queries vom vB liegt es nicht, die sind schon sehr gut optimiert. Was ich allerdings sah, ist daß noch Version 3.0.3 läuft. Die ist nicht sicher und sollte upgedatet werden. Aktuell ist 3.0.7.

Auch in der my.cnf sind ein paar Sachen anders, als wir es hatten:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock

[mysqld]
skip-locking
max_connections = 300
key_buffer = 16M
myisam_sort_buffer_size = 64M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 1024
thread_cache_size = 64
wait_timeout = 1800
connect_timeout = 10
max_allowed_packet = 16M
max_connect_errors = 10
query_cache_limit = 1M
query_cache_size = 16M
query_cache_type = 1
skip-innodb
#log-bin

[mysqld_safe]
open_files_limit = 8192

[mysqldump]
quick
max_allowed_packet = 16M

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

Wir hatten allerdings MySQL 4.0.20 und php 4.3.10 im Einsatz, da gerade php 5 noch nicht für vB empohlen wird. Viel Glück.

fix
Posts: 12
Joined: 2005-01-02 01:21
Location: GieÃ?en

Re: Optimierungs- / Fehlersuchhilfe

Post by fix » 2005-02-26 20:32

PHP 4.3.10 hatten wir erst auch - wir haben dann versucht ob halt 5 was bringt.

Die VBulletin Version wird demnächst geupdated, die Sicherheitsänerungen sind aber schn lange übernommen - trotzdem danke für den Hinweiß.

Ich teste mal deine empfohlenen mysql Einstellungen.