Zum Inhalt springen

Servertuning (Apache und MySQL)


Empfohlene Beiträge

Hallo zusammen,

ich brauche mal hilfe ... ich habe nen relativ schmalen Rootserver und möchte diesen effektiver nutzen. Zur Zeit brauchen div. Seiten ca. 50 Sekunden zum laden und das ist schlicht weg nicht akzeptabel.

Hier die Daten des Servers:

  • AMD Athlon64 3200+
  • 1024 MB RAM
  • 2 x 80 GB

Ich habe mal den MySQL Performance Tuning Primer durchlaufen lassen, dieser spukt mir folgendes aus.

-- MYSQL PERFORMANCE TUNING PRIMER --

- By: Matthew Montgomery -

MySQL Version 4.1.13 x86_64

Uptime = 5 days 1 hrs 25 min 29 sec

Avg. qps = 12

Total Questions = 5381333

Threads Connected = 20

Server has been running for over 48hrs.

It should be safe to follow these recommendations

To find out more information on how each of these

runtime variables effects performance visit:

MySQL AB :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 5.2.3 System Variables

Visit MySQL AB :: MySQL Enterprise Advisors

for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES

Current long_query_time = 10 sec.

You have 4692 out of 5381439 that take longer than 10 sec. to complete

The slow query log is NOT enabled.

Your long_query_time may be too high, I typically set this under 5 sec.

WORKER THREADS

Current thread_cache_size = 0

Current threads_cached = 0

Current threads_per_sec = 1

Historic threads_per_sec = 0

Your thread_cache_size is fine

MAX CONNECTIONS

Current max_connections = 100

Current threads_connected = 20

Historic max_used_connections = 51

The number of used connections is 51% of the configured maximum.

Your max_connections variable seems to be fine.

MEMORY USAGE

Max Memory Ever Allocated : 105 M

Configured Max Per-thread Buffers : 155 M

Configured Max Global Buffers : 26 M

Configured Max Memory Limit : 181 M

Physical Memory : 1000.81 M

Max memory limit seem to be within acceptable norms

KEY BUFFER

Current MyISAM index space = 34 M

Current key_buffer_size = 16 M

Key cache miss rate is 1 : 4326

Key buffer fill ratio = 4.00 %

Your key_buffer_size seems to be too high.

Perhaps you can use these resources elsewhere

QUERY CACHE

Query cache is supported but not enabled

Perhaps you should set the query_cache_size

SORT OPERATIONS

Current sort_buffer_size = 512 K

Current record/read_rnd_buffer_size = 508 K

Sort buffer seems to be fine

JOINS

Current join_buffer_size = 132.00 K

You have had 14143 queries where a join could not use an index properly

You should enable "log-queries-not-using-indexes"

Then look for non indexed joins in the slow query log.

If you are unable to optimize your queries you may want to increase your

join_buffer_size to accommodate larger joins in one pass.

Note! This script will still suggest raising the join_buffer_size when

ANY joins not using indexes are found.

OPEN FILES LIMIT

Current open_files_limit = 1024 files

The open_files_limit should typically be set to at least 2x-3x

that of table_cache if you have heavy MyISAM usage.

Your open_files_limit value seems to be fine

TABLE CACHE

Current table_cache value = 64 tables

You have a total of 1227 tables

You have 64 open tables.

Current table_cache hit rate is 0%, while 100% of your table cache is in use

You should probably increase your table_cache

TEMP TABLES

Current max_heap_table_size = 16 M

Current tmp_table_size = 32 M

Of 130989 temp tables, 1% were created on disk

Effective in-memory tmp_table_size is limited to max_heap_table_size.

Created disk tmp tables ratio seems fine

TABLE SCANS

Current read_buffer_size = 252 K

Current table scan ratio = 752 : 1

read_buffer_size seems to be fine

TABLE LOCKING

Current Lock Wait ratio = 1 : 1126

You may benefit from selective use of InnoDB.

If you have long running SELECT's against MyISAM tables and perform

frequent updates consider setting 'low_priority_updates=1'

Dahingehend würde ich gerne wissen, was für meine Maschine so die "optimalen" Werte wären. Das selbe für den Apache ...

Über eine Antwort würde ich mich sehr freuen

Gruß Sven

Link zu diesem Kommentar
Auf anderen Seiten teilen

schaut soweit ja nicht schlecht aus - allerdings ist dein MySQL-release über 2 1/2 jahre alt. sprechen gründe gegen ein upgrade auf 4.1.22?

du kannst dem MySQL-server angeben, dass long queries geloggt werden - das steht auch im tuning primer drin.

ist der MySQL direkt in den apachen eingebunden oder läuft das über ein apache-modul wie z.b. PHP? welche version vom apachen setzt du ein?

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

schaut soweit ja nicht schlecht aus - allerdings ist dein MySQL-release über 2 1/2 jahre alt. sprechen gründe gegen ein upgrade auf 4.1.22?

du kannst dem MySQL-server angeben, dass long queries geloggt werden - das steht auch im tuning primer drin.

ist der MySQL direkt in den apachen eingebunden oder läuft das über ein apache-modul wie z.b. PHP? welche version vom apachen setzt du ein?

s'Amstel

Hallo Amstel,

erstmal vielen Dank für die Antwort auf diese Thematik.

Grundsätzlich spricht nichts gegen ein Upgrade auf eine neueres MySQL Release, sofern alles weiterhin funktioniert.

Soweit ich weiß, ist der MySQL direkt in den Apache eingebunden (habe den Rootserver übernommen) wo finde ich dementsprechende Informationen?

Die Version des Apache 2.0.54 ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Soweit ich weiß, ist der MySQL direkt in den Apache eingebunden (habe den Rootserver übernommen)

d.h. keine scriptsprache dazwischen?

wo finde ich dementsprechende Informationen?

in der liste der im apachen (mit LoadModule) geladenen module:

"httpd -l" (also kleines L) listet dir die geladenen module.

allenfalls poste diese ausgabe doch mal hier.

in der httpd.conf im ersten abschnitt sind alle module ladenden anweisungen zu finden.

Die Version des Apache 2.0.54 ...

auch reichlich alt und von unzähligen security releases überholt worden ;)´

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

neben den veralteten Ständen der Dienste, ist mir auch immer aufgefallen, falls eigene Scripte laufen, dass hier z.B. SQL Statements häufig sehr unperformant formuliert werden:

  • "select * from" wenn nur ein Feld verwendet wird
  • $result = select * from
    while (..)
    select * from tabelle where a = $result[feld]
  • Blobs werden innerhalb der Datenbank abgelegt

Bitte wirklich mal schauen, wo zuviel Zeit für die Ausführung verloren geht. Oft sind es nicht die Konfigurationen, sondern die eigene Programmierung.

HTH Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

neben den veralteten Ständen der Dienste, ist mir auch immer aufgefallen, falls eigene Scripte laufen, dass hier z.B. SQL Statements häufig sehr unperformant formuliert werden:

  • "select * from" wenn nur ein Feld verwendet wird
  • $result = select * from
    while (..)
    select * from tabelle where a = $result[feld]
  • Blobs werden innerhalb der Datenbank abgelegt

Bitte wirklich mal schauen, wo zuviel Zeit für die Ausführung verloren geht. Oft sind es nicht die Konfigurationen, sondern die eigene Programmierung.

HTH Phil

Hallo Phil,

daran habe ich auch schon gedacht, weil andere Seiten wesentlich schneller laufen, die auf dem selben Server liegen.

Gruß Sven

Link zu diesem Kommentar
Auf anderen Seiten teilen

You have 4692 out of 5381439 that take longer than 10 sec. to complete

Das ist doch auf jeden Fall etwas, was mal gar nicht sein sollte. Länger als 10 Sekunden! Wieviele Millionen Sätze werden da verarbeitet und wieviele hundert Tabellen miteinander verknüpft? ;)

Meistens hilft in dem Fall schon ein entsprechender Index auf die Datei und es läuft viel schneller.

(Ein weiteres Problem ist dann natürlich die Ausgabe des Ergebnisses, aber das wird ja von MySQL nicht geloggt. Also hier hat wirklich die reine Abfrage auf dem Server länger als 10 Sekunden gedauert.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Als ich mal Probleme mit der Auslastung meines Root Servers hatte , half ein Wechsel vom Apache zu Lighttpd. Allerdings war bei mir das Problem nicht in den Skripten selber begründet sondern in der Menge der Zugriffe. Da bei dir ja nur einzelne Seiten Probleme machen würde ich sagen überprüfe als erstes deine Indizes sowie die jeweiligen Skripte.

Auch den schnellsten Server bekommt man mit schlechtem Coding ganz schnell in die Knie.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Als ich mal Probleme mit der Auslastung meines Root Servers hatte , half ein Wechsel vom Apache zu Lighttpd. Allerdings war bei mir das Problem nicht in den Skripten selber begründet sondern in der Menge der Zugriffe. Da bei dir ja nur einzelne Seiten Probleme machen würde ich sagen überprüfe als erstes deine Indizes sowie die jeweiligen Skripte.

Auch den schnellsten Server bekommt man mit schlechtem Coding ganz schnell in die Knie.

Hallo,

ja genau das war mein Problem, habe den Sourcecode und die Abfragen um ca. 50% minimieren können. Zudem sind einige Abfragen

SELECT * FROM
durch
SELECT id FROM

ersetzt worden. Die Ladezeiten haben sich drastisch verringert. Vielen Dank für den Tip

Gruß´Sven

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...