Vserver mit HLstatsX lahme MySQL ?!?

NacKteOmA

New Member
Hallo

Also ich habe einen vServer bei Hosteurope. Dort laufen ein paar eher kleine Seiten und Foren drauf, allerdings laufen dort 2x HLstatsX (bzw. ELstatsNEO) das ist ein Statistik Programm für Gameserver. Es sammelt SEHR viele Daten deswegen ist das Programm doch sehr Ressourcenlastig.Ich glaube bei mir ist nun die MySQL für die 2 Stück zu lahm. Geht mal auf

Luschen Clan - Counter-Strike: Source - Player Rankings

man sieht dort unten dann "Executed 7 queries, generated this page in 3.5729 Seconds." Das ist etwas lang und noch schlimmer wird es hier

Luschen Clan - Counter-Strike: Source - Server Chat Statistics

dort sieht man dann "Executed 6 queries, generated this page in 12.8783 Seconds." das ist einfach zu lang, meine Foren sind auch ein stück langsamer geworden, aber nicht so extrem.

Weiß jemand was dafür an der MySQL zu niedrig eingestellt sein kann?

Meine my.cnf sieht so (nur die Werte)

# The MySQL server
[mysqld]
set-variable=local-infile=0
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 32M
max_allowed_packet = 2M
table_cache = 128
sort_buffer_size = 1024K
net_buffer_length = 16K
read_buffer_size = 512K
read_rnd_buffer_size = 1024K
myisam_sort_buffer_size = 16M

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
Last edited by a moderator:
such mal nach "tuning-primer"

das tool zeigt dir an welchen schrauben du drehen solltest/kannst

und such mal nach "vzfree", damit siehst du wieveil Ressourcen du noch übrig hast die du dann evtl. mysql zur Verfügung stellen kannst
 
vzfree sagt soweit

VPS Speichernutzung:
Momentan genutzt: 1258.5 MB
Maximal genutzt: 1258.5 MB
Zugesichert: 1024 MB
Maximal nutzbar: 2100 MB

Ich kann ohne Probleme bis 1,85GB RAM gehen, ab dann kommst mal so drauf an wieviel die anderen so nutzen.

nachdem primer werde ich jetzt mal suchen und mich mit beschäftigen.
 
*Aus Erfahrung*
Nie Hlstats- oder Psychostats-Backend auf den gleichen Server wie MySQL und Frontend legen. Das nix wird :)
Hlstats zwingt sogar echtes Metall in die Knie.

Versuch mit nice, cpulimit und ulimit den User von Hlstats start zu bändigen, dann sollte es auch schon viel besser laufen :D
 
So sieht die Ausgabe von mysqltuner.pl

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.45
[!!] Switch to 64-bit OS - MySQL cannot currenty use all of your RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 215M (Tables: 1022)
[--] Data in InnoDB tables: 2M (Tables: 128)
[!!] Total fragmented tables: 67
-------- Performance Metrics ------------------------------------------
[--] Up for: 28s (73 q [2.607 qps], 9 conn, TX: 93K, RX: 13K)
[--] Reads / Writes: 63% / 37%
[--] Total buffers: 149.0M global + 2.8M per thread (100 max threads)
[OK] Maximum possible memory usage: 429.5M (5% of installed RAM)
[OK] Slow queries: 0% (0/73)
[OK] Highest usage of available connections: 2% (2/100)
[OK] Key buffer size / total MyISAM indexes: 128.0M/116.1M
[!!] Key buffer hit rate: 80.0% (395 cached / 79 reads)
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 4 sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 3 total)
[!!] Thread cache is disabled
[OK] Table cache hit rate: 83% (31 open / 37 opened)
[OK] Open file limit used: 5% (61/1K)
[OK] Table locks acquired immediately: 100% (76 immediate / 76 locks)
[OK] InnoDB data size / buffer pool: 2.1M/4.0M

--------Recommendations-------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Set thread_cache_size to 4 as a starting value
Variables to adjust:
query_cache_size (>= 8M)
thread_cache_size (start at 4)
join_buffer_size (> 128.0K, or always use indexes with joins)

Einwenig habe ich schon verändert z.b. KeyBuffer von 32 auf 128MB und ein paar andere Werte nochmal erhöht die bei "Variables to adjust:" angegeben waren.

Die Werte die jetzt noch angezeigt werden (die 3 Stück) kann ich nicht einfach in meine my.cnf eintragen, die exestieren dort noch nicht, wenn ich die dann rein haue und den mysql neustarte gibts folgende Meldung

./mysql: line 150: ./mysql: No such file or directory
Starting service MySQL warning: /var/lib/mysql/mysql.sock didn't appear within 30 seconds

So richtig kann ich damit nichts anfangen. Mir sind auch die Sache wie

[!!] Thread cache is disabled
[!!] Key buffer hit rate: 80.0% (395 cached / 79 reads)
[!!] Query cache is disabled
[!!] Total fragmented tables: 67

ein Dorn im Auge, großer Performance zuwags hab ich nun noch nicht erlebt.
 
Hi d4f

Also genauer nutze ich ja ELstatsNEO (die Weiterentwicklung). Also z.B. bei den neuen Stats ist es nun nicht mehr so wie bei HLstatsX das der hlstats.pl nach ein paar Tagen zum RAM fresser wird, musste die hlstats immer einmal täglich neustarten, dann hatte der hlstats.pl Prozess so 0,1% RAM genutzt ohne neustart nach paar Tagen 0,5%. Dies ist nun bei ELstatsNEO geschichte, allerdings ist es durch viele neue funktionen bestimmt Datenbank lastiger. Aber wenn ich den bändige haben doch die Stats noch weniger Ressourcen und sind noch langsamer, die Geschwindigkeit der Foren und HPs ist ok, nur nicht mehr so High wie ich es früher hatte.

Ich hab auch schon geplant mir einen Vserver mit 1 - 1,5GB RAM zu holen und diesen als MySQL Server zu nutzen.
 
Problem ist dass
~ Hlstats frisst viel Leistung (Realtime Parsing des LogStreams)
~Querys fressen Leistung
~MySQL frisst Leistung
~Apache Anzeige frisst Leistung

Wieviele Querys/Sekunde hast du und was sagt top bez. hlstats?

Ich sponsore im Firmennamen Psychostats; wir haben zirka 100Installationen und kommen mit 40Euro/Monat (1x Billig-Server MySQL, 1x BilligServer Parser und Webhosting auf unseren WebServern für Frontend)
Also: sobald es optimal aufgeteilt ist haste Leistung pur (auch idr mit Hlstats)
aber bei alles-auf-einem kanns Probleme geben :S
 
ja, ich habe Server bei denen und bin mehr als zufrieden. Super Support, super Leistung (Preis-Leistung, Hardware und Anbindung), kaum bis keine Ausfälle...
 
30-35Q/S ist aber nicht typisch für solche Sachen :D
Haste ICQ/MSN/Skype/IRC? Ich würds mir gern genauer ansehen.

Unsere Tests mit HlStats sind bisher zu Rund gelaufen um wahr zu sein, da muss doch irgendwo ein Problem liegen können *g*

Ich rate übrigens Proplay für vServer an, ich konnte mich bisher noch nicht über deren Leistung beklagen.
 
Jetzt sinds nach 2 Tagen übrigens 22 Q/S von der GESAMTEN Datenbank, nicht nur die ELstatsNEO Tabelle(n).

d4f meine ICQ NR. bekommst du per PN
 
Also ich hab mal mit d4f geschrieben und er stellt mir zu test zwecken einer seiner MySQL Datenbank zur verfügung, danke hier einmal ;)

Mich beschäftigt warum ich diesen Werte in der my.cnf nicht eintragen kann also

join_buffer_size (> 128.0K, or always use indexes with joins)

Brauche diese noch andere Werte mit dem sie zusammenarbeiten? Wenn ich diesen Wert einfüge kommt diese Fehlermeldung bei ./mysql start

Starting service MySQL warning: /var/lib/mysql/mysql.sock didn't appear within 30 seconds
 
So als Zusatz der Momentan genutzte Speicher liegt nun bei 1400MB (ursprünglich 1250MB).

Die Ladezeiten bei Luschen Clan - Counter-Strike: Source - Player Rankings nun bei einen akzeptablen Wert, das generieren liegt bei
Executed 8 queries, generated this page in 0.9103 Seconds.
Vorher war es bei 3-4 Sekunden.

Allerdings bei der ganzen Chat History dauert es nun nach ein paar Tagen noch länger jetzt sind es nicht mehr nur 12-13 Sekunden sondern nun 14-15 Sekunden. Ich habe mal etwas durchgelesen bei den MySQL kram. Kann es sein das ELstatsNEO an dieser stelle schlecht gecodet ist, denn wenn man auf "Players" klickt so springt die mysql im "%CPU" plötzlich auf 50-60% (passiert bei den ELstatsNEO nichts liegt der Wert bei 2-8%) und bei der Globalen Chat ("Chat") History fliegt der "%CPU" Wert für 4 Sekunden auf bis zu 110%. Kann es sein das er jedes mal die Komplette MySQL der ELstatsNEO durchscannt und dann die sachen dann zuordnet? Das würde doch diesen CPU Last anstieg erklären können. Was meint ihr?

MySQLtuner.pl sagt auch ich habe viele Joins ohne Indexes, deswegen schlägt er auch dieses noch vor
join_buffer_size (> 128.0K, or always use indexes with joins)
 
Last edited by a moderator:
So ich hole mal dieses "leidige" und alte Thema wiederraus.

Ich habe bei meinen HLstatsX (jetzt verwende ich HLstatsX CE) immernoch einige Slow-Queries und in manchen bereichen der HLstatsX CE wird immernoch eine hohe CPU Last der MySQL (ca. 50% Gesamt CPU Last auf einen Quadcore Intel) erzeugt.

Problem scheinen wohl falsche/schlechte Indizes zu sein. Zumindest nach meinen Recherchen. Allerdings möchte ich nun auch nicht willkürlich in der MySQL rumspielen und nachher die DB zerschissen.

Ich habe mal die Slow-Queries logen lassen.

Code:
Version: 5.0.32-Debian_7etch11-log (Debian etch distribution). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# Time: 091121 11:44:38
# User@Host: xxxxxx[xxxxx] @ xxxxxx []
# Query_time: 4  Lock_time: 0  Rows_sent: 5  Rows_examined: 149665
use xxxxxx;
SELECT DISTINCT a.`serverId` , `name` FROM `hlstats_Events_Chat` a
INNER JOIN `hlstats_Servers` b ON a.serverId = b.serverId and b.game = 'css' ORDER by `sortorder`,`name`,`serverid` ASC LIMIT 0, 50;
# Time: 091121 11:44:42
# User@Host: xxxxxx[xxxxx] @ xxxxx []
# Query_time: 4  Lock_time: 0  Rows_sent: 50  Rows_examined: 449015
SELECT
                        eventTime,
                        lastName,
                        IF (message_mode=2,CONCAT('(Team) ', message),message) AS message,
                        hlstats_Servers.name AS serverName,
                        hlstats_Events_Chat.playerId,
                        flag,
                        map
                FROM
                        hlstats_Events_Chat
                INNER JOIN
                        hlstats_Players ON (hlstats_Players.playerId=hlstats_Events_Chat.playerId)
                INNER JOIN 
                        hlstats_Servers ON (hlstats_Servers.serverId = hlstats_Events_Chat.serverId)
                WHERE
                        hlstats_Servers.game='css'
                ORDER BY
                        eventTime desc,
                        lastName desc
                LIMIT
                        0,50;
# Time: 091121 11:44:51
# User@Host: xxxxx[xxxxxx] @ xxxxxx []
# Query_time: 3  Lock_time: 0  Rows_sent: 5  Rows_examined: 149668
SELECT DISTINCT a.`serverId` , `name` FROM `hlstats_Events_Chat` a
INNER JOIN `hlstats_Servers` b ON a.serverId = b.serverId and b.game = 'css' ORDER by `sortorder`,`name`,`serverid` ASC LIMIT 0, 50;
# Time: 091121 11:44:57
# User@Host: xxxxxx[xxxxx] @ xxxxxx []
# Query_time: 6  Lock_time: 0  Rows_sent: 50  Rows_examined: 449024
SELECT
                        eventTime,
                        lastName,
                        IF (message_mode=2,CONCAT('(Team) ', message),message) AS message,
                        hlstats_Servers.name AS serverName,
                        hlstats_Events_Chat.playerId,
                        flag,
                        map
                FROM
                        hlstats_Events_Chat
                INNER JOIN
                        hlstats_Players ON (hlstats_Players.playerId=hlstats_Events_Chat.playerId)
                INNER JOIN 
                        hlstats_Servers ON (hlstats_Servers.serverId = hlstats_Events_Chat.serverId)
                WHERE
                        hlstats_Servers.game='css'
                ORDER BY
                        lastName desc,
                        eventTime desc
                LIMIT
                        0,50;

Das ist soweit der Log.

Wer möchte kann sich diese Stats mal anschauen zu finden unter http://www.nackteoma-server.de/luschen/hlstatsxce/web/hlstats.php

In der my.cnf konnte ich nun doch "join_buffer_size" aktivieren. Der Vorteil war nur geringfügig, der RAM Verbrauch/Bedarf ist dadurch schon förmlich "explodiert".

P.S.: Diese Stats laufen nicht mehr auf einen Vserver sondern schon auf 2 Rootservern mit Intel Q6600 und 8GB RAM (einmal für MySQL und einen für den Apache und Parser)

Über hilfe würde ich mich sehr freuen :)

EDIT Systemdaten:
Debian Etchnhalf (Debian 4.5)
MySQL 5.0.32
Apache 2.2.3
PHP 5.2.0-8+etch15
 
Last edited by a moderator:
Back
Top