mysql und apache optimal einstellen

Drogenfahnder

New Member
Hallo,
wie kann ich apache und mysql optimal einstellen? nach welchen Kriterien werden die werte errechnet? Hier im Forum wird soweit ich gesehen habe nur gesagt das man das und das einstellen muss bei dem server. Aber nicht woher die Werte stammen.

Vielleicht kann mir da einer helfen. da mein vServer sehr langsam ist.

Grüße
 
Hallo!
Such bitte mal im Forum nach tuning-primer Script. Da gibt es auch schon einige Erklärungen dazu.

mfG
Thorsten
 
Anleitung findest du hier

konfiguration ist immer vom RAM abhängig. Je weniger RAM du hast, desto kleiner muß MaxClients in der Apache .conf und max_clients in der my.cnf sein.

Beispiel httpd.conf
Code:
Timeout 30
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 2

<IfModule prefork.c>
StartServers       1
MinSpareServers    1
MaxSpareServers    2
ServerLimit       20
MaxClients        20
MaxRequestsPerChild  4000
<IfModule>


HostnameLookups off
Beispiel my.cnf
Code:
[mysqld]

key_buffer = 2M
net_buffer_length = 1K

sort_buffer_size = 32K
myisam_sort_buffer_size = 32K
read_buffer_size = 16K
read_rnd_buffer_size = 32K
join_buffer_size = 512K

query_cache_size = 2M
thread_cache = 8
table_cache = 512
max_allowed_packet = 256K

max_connections = 20
low_priority_updates = 1
long_query_time = 2
Plesk, Spamassassin, Dr. Web, Bind deaktiviert. Ein vServer mit ~ 350 MB RAM handhabt mit dieser Konfiguration ~ 20 gleichzeitge Verbindungen.

mit
Code:
ab -n 50 -c 20 http://www.deine_seite.de/
kannst du dann deine Konfiguration testen.

-n 50 = Anzahl der Requests
-c 20 = Anzahl gleichzeitiger Verbindungen

Code:
Percentage of the requests served within a certain time (ms)
  50%   2607
  66%   2961
  75%   3186
  80%   3234
  90%   3789
  95%   3861
  98%   3898
  99%   3898
 100%   3898 (longest request)
100% sollte nicht höher als ~ 4000 sein.

und privvmpages dürfen dabei keine failcnt aufweisen!
Code:
cat /proc/user_beancounters
 
Last edited by a moderator:
hallo
bei dem tuner-primer skript kommt das hier heraus:
Code:
-- MYSQL PERFORMANCE TUNING PRIMER --
             - By: Matthew Montgomery -

MySQL Version 4.1.13 i686

Uptime = 2 days 4 hrs 45 min 1 sec
Avg. qps = 2
Total Questions = 403413
Threads Connected = 1

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:
http://dev.mysql.com/doc/refman/4.1/en/server-system-variables.html

SLOW QUERIES
Current long_query_time = 10 sec.
You have 44 out of 403425 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 = 1
Historic max_used_connections = 20
The number of used connections is 20% of the configured maximum.
Your max_connections variable seems to be fine.

MEMORY USAGE
Max Memory Ever Allocated : 31 M
Configured Max Per-thread Buffers : 130 M
Configured Max Global Buffers : 4 M
Configured Max Memory Limit : 135 M
Total System Memory : 10.59 G
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 6 M
Current key_buffer_size = 2 M
Key cache miss rate is 1 : 186
Key buffer fill ratio = 20.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 = 252 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 2404 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 390 tables
You have 64 open tables.
Current table_cache hit rate is 2%, 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 294 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 = 1062 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 118
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'

my.cnf
Code:
[mysqld]
port		= 3306
socket		= /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 2M 
max_allowed_packet = 1M
table_cache = 64 
sort_buffer_size = 512k 
net_buffer_length = 8K
read_buffer_size = 256k 
read_rnd_buffer_size = 256k  
myisam_sort_buffer_size = 4M


serv_tuninf_conf
Code:
<IfModule prefork.c>
	# number of server processes to start
	StartServers         1
	# minimum number of server processes which are kept spare
	MinSpareServers      1
	# maximum number of server processes which are kept spare
	MaxSpareServers      3
	# highest possible MaxClients setting for the lifetime of the Apache process.
	ServerLimit        150
	# maximum number of server processes allowed to start
	MaxClients          150
	# maximum number of requests a server process serves
	MaxRequestsPerChild  0
</IfModule>
MaxKeepAliveRequests 100
KeepAliveTimeout 15

plesk, dr web, spamassissn hab ich schon längers deaktiviert ebenso die module aus apache entfernt die ich nicht brauche

das geht bei mir nicht

das problem ich habe auf meinem vServer nur 4Gb flexi RAM.
Ich überleg mir gerade ob ich den nächst höheren nehmen soll dieser hat 256MB zugesichert und 512MB flexi
 
Hallo!
Keine Ahnung was genau auf deinem Server läuft, aber wenn du (häufigen) Gebrauch vom mySQL machst, solltest du eventuell den query_cache aktivieren.

mfG
Thorsten
 
in my.cnf einfügen bzw. ändern
Code:
[mysqld]
sort_buffer_size = 32K
myisam_sort_buffer_size = 32K
read_buffer_size = 16K
read_rnd_buffer_size = 32K
join_buffer_size = 512K

query_cache_size = 2M
table_cache = 256
thread_cache = 8

low_priority_updates = 1
und in serv_tuninf_conf ändern
Code:
MaxRequestsPerChild  4000
KeepAliveTimeout 2
das sollte erstmal reichen. Anschließend MySQL und Apache neu starten!
Code:
service mysqld restart
Code:
service httpd restart
 
Last edited by a moderator:
wieviele Anfragen Apache handhaben kann ist rein vom RAM anhängig!

Zuerst ermittelt man wieviel RAM für Apache u. MySQL zur Verfügung stehen. Linux, Plesk, qmail, bind, Dr. Web, Spamassassin ect. verbrauchen ja alle schonmal RAM.

Anhaltswert ist ~ 250 MB, d.h. hat man 1 GB RAM stehen Apache u. MySQL noch ~ 750 MB RAM zur Verfügung.

Nun ermittelt man wieviel RAM ein prefork httpd2 Prozess benötigt. Bei Seiten die MySQL nutzen sind das ~ 12 - 15 MB RAM. Jeder httpd2 Prozess (Task) kann eine Server - Client Verbindung handhaben (Besucher).

Für MySQL reservieren wir mal ~ 50 MB, bleiben für Apache und seinen httpd2 Prozessen 700 MB übrig.

700 MB : 15 MB = 46 httpd2 Prozesse (Tasks)

Nun schauen wir uns die httpd.conf von Apache an:
Code:
<IfModule prefork.c>
StartServers       5
MinSpareServers    5 [COLOR="Red"]httpd Prozesse[/COLOR]
MaxSpareServers    10
ServerLimit       46
MaxClients        41 [COLOR="Red"]httpd Prozesse[/COLOR]
MaxRequestsPerChild  8000
<IfModule>

Apache startet beim Start 5 Prozesse (StartServers) und forkt dann bis maximal 46 Prozesse (ServerLimit). Mindestens 5 Prozesse werden nicht beschäftigt und maximal 10. Für Requests stehen maximal 41 Prozesse (httpd2) zur Verfügung. Apache bedient hier 41 Besucher gleichzeitig!

Jeder Prozess wird eleminiert sobald er 8000 Aufgaben erledigt hat. Apache forkt dann neue Prozesse nach (= Selbstbereinigung).

Code:
Timeout 30
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 2

HostnameLookups off
Webseiten bestehen ja nicht nur aus einer html Datei sondern auch aus Bildern ect. Jede Datei, jedes Script verursacht einen Requests. KeepAlive On bedeutet, der httpd2 Prozess hält die Verbindung solange offen bis maximal 150 Requests bearbeitet wurden. 2 Sekunden nach dem letzen Requests wird die Verbindung beendet.

Beispiel:

Eine Webseite hat eine HTML Datei und 10 Bilder. Macht zusammen 11 Requets. Der Besucher bekommt die Seite sehr schnell angezeit. Klickt er innerhalb von 2 Sekunden nicht auf einen Link, beendet Apache die Verbindung und der httpd2 Prozess wird für den nächsten Besucher frei.

Anleitung zur Optimierung mit Beispielkonfiguration

MySQL

50 MB haben wir reserviert. Nun müssen wir die Buffers + Caches ect. so klein machen, daß bei max_clients = 41 die 50 MB RAM nicht überschritten werden. Zur Kontrolle verwenden wir das Tuning-Primer Script.
 
Last edited by a moderator:
Hallo,

Kann mir bitte jemand helfen , ich bekomm das nicht hin .

Ich habe einen Root mit 24GB ram .
Ich brauch eine datenbank mit MAX Leistung .

hier meine my.cfg hoffe das sie mir jemand ausfüllen kann .

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
#
# * Basic Settings
#

#
# * IMPORTANT
# If you make changes to these settings and your system uses apparmor, you may
# also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
#

user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1
#
# * Fine Tuning
# http://blog.koehntopp.de/uploads/PT_isotopp_deutsch.pdf
#
key_buffer = 1024M
max_allowed_packet = 512M
thread_stack = 192K
thread_cache_size = 756
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
max_connections = 2500
table_cache = 512
#thread_concurrency = 10
#
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size = 128M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file = /var/log/mysql/mysql.log
general_log = 1

log_error = /var/log/mysql/error.log

# Here you can see queries with especially long duration
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem



[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
 
Was liefert denn das tuning-primer-script, dass in diesem Thread genannt wurde und du sicherlich schon ausgeführt hast?
 
MOD: Bilder bitte immer als Anhang. Danke!

Will nicht so ganZ ;)

brauch einfach eine gute datenbank die nicht bei viel leistung down geht ;)
 

Attachments

  • 64108crazyshot_3.png
    64108crazyshot_3.png
    18.2 KB · Views: 179
Last edited by a moderator:
Kündige den Server lieber - ist in deinem Fall sinnvoller...

Noch nicht einmal die Ausgaben vom Skript hast du beachtet, aber Hauptsache einen Root mit 24 GB RAM und wahrscheinlich auch noch mit Gbit-Anbindung.
 
warum so unfreundlich ? ich bin nicht der server owner , ich wollte nur jemand einen gefallen machen ..... kann mir denn keiner helfen ? warum alle so EGO ?
 
@skydrak : Auch wenn die Aussage zutrifft wird er es vermutlich ignorieren... Insofern lieber helfen als dann IP's blacklisten zu müssen ;)

@sidler2 : Drehen wir es doch mal um : Was läuft denn bei dir das superviel 24 GB ram braucht und um jeden Preis Hyperschnell sein muss?

my.cnf : Google doch mal ;) Ich hab mit 2 einfachen Begriffen nun nen Haufen an ergebnisen gefunden

Achja, AFAIK kannst du dem Script auch direkt nen user verfüttern, dann musst du es dort nicht eintragen...
 
2 VB Boards mit mehr als 1k User mit so nem Admin... Die armen User :rolleyes:

Bis auf das das du deinen Stärkevergleich vortsetzt und mir sagst wie viel dein Server nicht arbeiten musst hast du mein post komplett ignoriert, oder?
 
Ob hier einfaches hochdrehen der Werte reichen wird ist fraglich - die sind ja schon "größer als üblich" (auch wenn der Server wohl noch mehr hergibt). Noch dazu wo MyISAM ja keinen wirklichen Buffer für die Daten hat (und sich aufs Dateisystem verlässt). D.h. u.U. schadet man sich nur durch ein weiteres anheben der Werte. ... Also d.h. falls überhaupt MySQL das Problem ist.

Ich denke hier wird man wohl oder übel nicht drum herum kommen sich die Anwendung/Abfragen genauer ansehen zu müssen.


Der erste, einfache, Schritt um zu sehen was los ist wäre die langsamen Abfragen auszuwerten (folgende 2 Zeilen in die my.cnf eintragen):
Code:
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 1
und nach ein paar Stunden/Mintuen schauen was sich dort drinnen alles findet.

warum so unfreundlich ? ich bin nicht der server owner , ich wollte nur jemand einen gefallen machen ..... kann mir denn keiner helfen ? warum alle so EGO ?

Der Ton hat sich so eingebürgert, wenn Neulinge auf "Expterten" treffen im Internet .. ist nicht nur hier der Fall. Ist vllt. etwas unschön aber ändert wenig daran das manche Themen leider nicht einfach so abgehandelt werden können.

Entsprechend ist eine my.cnf auch kein Kreuzworträtsel das man sich einfach mal "ausfüllen" lässen kann.

Du wirst dich die nächsten paar Tage/Wochen entweder etwas ausgiebieger mit dem Thema beschäftigen müssen oder, falls du keine Lust dazu hast, .. deinem Freund/Bekannten/etc. einfach sagen müssen dass er jemanden mit mehr Fachwissen in dem Bereich auftreiben muss.
 
Last edited by a moderator:
Back
Top