MySQL hohe Load

FraggDieb

New Member
Hallo Community,

meine MySQL sprengt aktuell meinen Server bisschen und ich bräuchte bisschen hilfe in Sachen Tuning.

Habe mal die tuning-primer.sh laufen lassen
Code:
SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 2 sec.
You have 68 out of 7427 that take longer than 2 sec. to complete
Your long_query_time seems to be fine

BINARY UPDATE LOG
The binary update log is enabled

WORKER THREADS
Current thread_cache_size = 32
Current threads_cached = 1
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 4
Historic max_used_connections = 6
The number of used connections is 6% of the configured maximum.
You are using less than 10% of your configured max_connections.
Lowering max_connections could help to avoid an over-allocation of memory
See "MEMORY USAGE" section to make sure you are not over-allocating

MEMORY USAGE
Max Memory Ever Allocated : 33 M
Configured Max Per-thread Buffers : 72 M
Configured Max Global Buffers : 29 M
Configured Max Memory Limit : 101 M
Physical Memory : 1000.22 M
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 11 M
Current key_buffer_size = 15 M
Key cache miss rate is 1 : 35
Key buffer fill ratio = 2.00 %
Your key_buffer_size seems to be too high.
Perhaps you can use these resources elsewhere

QUERY CACHE
Query cache is enabled
Current query_cache_size = 4 M
Current query_cache_used = 2 M
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 50.96 %
Current query_cache_min_res_unit = 4 K
MySQL won't cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 32 K
Current read_rnd_buffer_size = 28 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 512.00 K
You have had 77 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 = 1134 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
You currently have open more than 75% of your open_files_limit
You should set a higher value for open_files_limit in my.cnf

TABLE CACHE
Current table_cache value = 512 tables
You have a total of 1149 tables
You have 512 open tables.
Current table_cache hit rate is 19%, 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 290 temp tables, 4% 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 = 12 K
Current table scan ratio = 68963 : 1
You have a high ratio of sequential access requests to SELECTs
You may benefit from raising read_buffer_size and/or improving your use of indexes.

TABLE LOCKING
Current Lock Wait ratio = 1 : 179
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'
If you have a high concurrency of inserts on Dynamic row-length tables
consider setting 'concurrent_insert=2'.

meine my.cnf sieht aktuell so aus:
Code:
#
# 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
#
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
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
#
key_buffer		= 15M
net_buffer_length    = 8K
sort_buffer_size     = 32K
myisam_sort_buffer_size = 32K
read_buffer_size     = 16K
read_rnd_buffer_size = 32K
join_buffer_size     = 512K
max_allowed_packet	= 16M
thread_stack		= 128K
thread_cache_size	= 32
max_connections        = 30
table_cache            = 512
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 4M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log		= /var/log/mysql/mysql.log
#
# Error logging goes to syslog. This is a Debian improvement :)
#
# 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.
#server-id		= 1
log_bin			= /var/log/mysql/mysql-bin.log
# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!
expire_logs_days	= 10
max_binlog_size         = 100M
#binlog_do_db		= include_database_name
#binlog_ignore_db	= include_database_name
#
# * BerkeleyDB
#
# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
skip-bdb
#
# * 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!
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
#skip-innodb
#
# * 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

#
# * NDB Cluster
#
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
#
# The following configuration is read by the NDB Data Nodes (ndbd processes)
# not from the NDB Management Nodes (ndb_mgmd processes).
#
# [MYSQL_CLUSTER]
# ndb-connectstring=127.0.0.1


#
# * IMPORTANT: Additional settings that can override those from this file!
#
!includedir /etc/mysql/conf.d/

Server:
CPU: Intel(R) Celeron(R) CPU 2.66GHz
Ram: 1GB

top auszug:
Code:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16349 mysql     20   0  125m  36m 5500 S 94.6  3.6  10:39.76 mysqld

Ist ja doch relativ hoch. Auf dem Server wird Hosting betrieben. Besucherzahlen schwanken stetig. Falls Ihr noch mehr Infos braucht.. einfach schreiben... Vielen Dank soweit.

MfG
FraggDieb
 
Lass mich raten? OVH Isgenug L resp. dessen Pendant vor der "Revolution"?

Ich glaube die Antwort auf deine Frage haste dir selber gegeben...
CPU: Intel(R) Celeron(R) CPU 2.66GHz
%CPU: 94.6

Hosting auf einem solchen Server ist schon allein für sich eine wacklige Geschichte...
Da hilft dir auch Tunen nicht viel, wenn deine CPU röstet...

~ Wieviele MySQL-Threads laufen gleichzeitig?
~ Welche Art von Querys läuft? / Was genau zieht all die Ressourcen?
~ Was gibt TOP bei der globalen Auslastung aus? (WaitAverage, ...)

Deine RAM/Hdd-Ratio und Lock-Ratio sehen nicht schlecht aus, ich nehme an dass einfach dein Server zusammenbricht.

Es ist eine arme kleine Celeron-CPU...
Ich hab auch einen solchen Server und glaub mir - es ist definitiv das Geld wert sich deren hübsche DualCores zu nehmen ^^
 
Hallo,

ja genau es ist der Isgenug L
Nur ich versteh nicht, vorher lief der Server mit 100Kunden flüssig und kam zu den Hauptzeiten auf eine Load von 1.x aber es ging alles recht flott und ohne bemerkbaren verzögerungen. Hatte den Server vor einer Zeit neu aufgesetzt und aktuell liegen 30 Kunden auf diesem.
Sobald das nötige Geld da ist, wird sowieso auf ein größeren Server umgezogen, da auch diese "nervige" Traffic-Regelung arg stört.

ein mysql status ergibt:
Code:
iw-hosting:~# /etc/init.d/mysql status
Threads: 2  Questions: 102819  Slow queries: 0  Opens: 1284  Flush tables: 1  Open tables: 64  Queries per second avg: 101.700.

~ Welche Art von Querys läuft? / Was genau zieht all die Ressourcen?
Das wüsste ich auch gerne... Bitte mal auf die Sprünge helfen...

Die WaitAverage beträgt "0.3%"

Hättest du vlt. ICQ? Wenn ja add mich mal bitte 333900335
Danke schonmal.
 
vorher lief der Server mit 100Kunden flüssig
Es kommt ja nicht auf die Anzahl von Kunden an sondern was die machen, welche Software läuft und wieviele Vists die haben
Gut möglich dass deine 30 neuen Kunden mysql-seitig mehr dem Server abverlangen als deine alten 100...

und kam zu den Hauptzeiten auf eine Load von 1.x
"Nur" 1.x? :D
EIn WebServer sollte immer unter 0.5 - 0.7 bleiben, danach dauert es einfach für Bescuher zu lange bevor die was sehen. Besser ist natürlich 0.2-0.5 - aber das ist zu Stoßzeiten nicht wirklich möglich bei solcher Kundendichte.

da auch diese "nervige" Traffic-Regelung arg stört.
Huh? Was ist denn an OVH's Traffic-Policy schlecht? :D
~Traffic Flatrate bei allen Angeboten
~ 10Mb/s je Verbindung
~ 20 Mb/s Traffic sofern 100Mb/s auf alle Server nicht überschritten werden
~ IRC erlaubt
~ ...

Also verglichen mit der deutschen Konkurrenz ist OVH in meinen Augen recht gut - zumals die bereits 3x einen abgefackelten RPS mitten in der Nacht per Konsole -kostenlos- gefixt haben :D
Sobald dein Server nimmer pingt schauen die nach - also solchen Support findet man selten...

Das wüsste ich auch gerne...
Einfachster Weg: in PhpMyAdmin unter "Process List" schauen.
Paarmal refresh drücken und du siehst welche Art es ist - und wer der Besitzer ist :D

Die WaitAverage beträgt "0.3%"
Defintiv also die CPU die abraucht. Wenn der Prozessor die Querys nicht abgearbeitet kriegt bleiben dir 2 Optionen:
~ den/die verantwortlichen Kunden kicken
~ besseren Server nehmen

Übrigens würde ich nicht auf einem Isgenug Revolution hosten - die neuen haben keinerlei Backup, so dass bei Festplattenausfall 250GB Daten in Rauch aufgehen... - sofern du keine externe Festplatte hinzugemietet hast.
Die älteren Modelle hatten wenigstens noch 100% FTP-Backup.

Bitte adde mich 248-978-444, mein Pidgin mag dich nicht :D
 
Hallo und danke für die Antwort.
Es kommt ja nicht auf die Anzahl von Kunden an sondern was die machen, welche Software läuft und wieviele Vists die haben
Gut möglich dass deine 30 neuen Kunden mysql-seitig mehr dem Server abverlangen als deine alten 100...
Es sind teils alte Kunde aber auch teilweise neue. Werde es heute (wo ich auch zeit habe) unter die Lupe nehmen.
"Nur" 1.x?
EIn WebServer sollte immer unter 0.5 - 0.7 bleiben, danach dauert es einfach für Bescuher zu lange bevor die was sehen. Besser ist natürlich 0.2-0.5 - aber das ist zu Stoßzeiten nicht wirklich möglich bei solcher Kundendichte
Auch trotz einer Load von 1.xx (meistens 1.0x) zu den Stoßzeiten war der Seitenaufbau immer zügig. Selbst jetzt wo die Load auf 2-3 steigt gehts zackig.
Huh? Was ist denn an OVH's Traffic-Policy schlecht?
~Traffic Flatrate bei allen Angeboten
~ 10Mb/s je Verbindung
~ 20 Mb/s Traffic sofern 100Mb/s auf alle Server nicht überschritten werden
~ IRC erlaubt
~ ...
Ja du sagst es, so ist es schön.... Nur leider war das mal... die haben mittlerweile alles umgeänder so das vll 2-3 Kunden da durchblicken. Die eigenen Mitarbeiter blicken durch Ihre Traffic-Regelung nicht mehr durch. Les dazu mal im Forum mehr (SLA Prem. / SLA. Std / SLA Busniss).
Wenn du mit einem RPS/Isgenug länger mehr als 10Mbit/s dauer machst, wirste auf 10Mbit/s gedrosselt.
Erst bei den Servern über dem Isgenug (der so genannten PRO-Reihe) darf man seine 100Mbit/s dauerhaft nutzen. Leider war das eine fehlerhafte Mischkalkulation von OVH :(

Beim Support muss ich dir recht geben. Der ist eigentlich echt 1a.

Habe im PMA mal rumgeklickt und bisschen die Prozesse studiert und mein Verdacht hat sich bestädigt. Liegt wohl an einem schlechten Programmierem Script eines Kunden. Dieser wird drauf hingewiesen und vorrübergehen gesperrt.

Übrigens würde ich nicht auf einem Isgenug Revolution hosten - die neuen haben keinerlei Backup, so dass bei Festplattenausfall 250GB Daten in Rauch aufgehen... - sofern du keine externe Festplatte hinzugemietet hast.
Die älteren Modelle hatten wenigstens noch 100% FTP-Backup.
Du hat vollkommen recht. Es ist sehr schade, dass bei der neuen Isgenug Reihe kein Backupspace vorhanden ist. Da ich aber noch ein RPS da stehen habe, wird dieser für Backups genommen. Tägliche Backups um 2:30

Wie gesagt, sobald das nötige Geld da ist, wird auf die tolle "PRO"-Reihe umgestiegen.



PS: Hab dich mal geadded ;) Hatte gleiche Probleme mal mit Pidgin. Aber leider ist mein Laptop aus Schulischen/Beruflichen Gründen wieder auf WindowsXP und meine Linux-Partition liegt auf Grundeis.

MfG
FraggDieb
 
Les dazu mal im Forum mehr (SLA Prem. / SLA. Std / SLA Busniss).
Ich lese das und die franz. Mailing-Listen fleißig mit, schließlich hängt meine Firma davon ab dass die Server laufen :D

Soweit in den ML diskutiert wurde, und das was ins deutsche durchgesickert ist:
~SLA standart:
mehrere Roots an einer 100Mb/s Leitung. Somit keinerlei Garantie auf Bandbreite, aber maximal 100Mb/s. Wenn man mehr als 10Mb/s verbrät wird man auf das garantiefreie NoSLA runtergestuft.

~SLA Premium:
1 Root pro 100Mb/s Leitung. Man darf aber entweder 20Mb/s je Root oder 100Mb/s ingesamt nutzen, sonst kommt man auf NoSLA

~Sla Business
Zusatz für jeweils 1 Root (+150E/Monat). 100Mb/s erlaubt, respketiv mehr bei ihren 1GB/s Servern.

Wie gesagt, sobald das nötige Geld da ist, wird auf die tolle "PRO"-Reihe umgestiegen.
Gute Idee :D Kann dir den Root zu 80Euro/Monat anraten sofern du das nötige Kleingeld mit deinem Webhosting einnimmst.
Ist recht leistungsfähig und hat einen fairen Preis,

Da ich aber noch ein RPS da stehen habe, wird dieser für Backups genommen
Sogar mein Webspace-Hosting ist billiger (und schneller xD ) je GB als deren RPS-Server. Ich rate dir eher an ne externe Festplatte anstülpen zu lassen, kostet ja "nur" 12Euro/Monat. Dann haste 500GB schönsten Speicher unter dem Preis eins RPS :D
 
Back
Top