MySQL Laggt

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Mahlzeit,


    ich bin hier der Zeit mit einem kleineren (oder doch größerem) Problem zu gange, was MySQL betrifft. Wir haben zwei Server, mit je einem MySQL Server, welche sich auch noch miteinander synchronisieren. Seit kurzem ist die Speicherzeit eines Accounts extrem angestiegen (bis zu 2,5 Sekunden!), beim laden jedoch nur 8 ms. Dies bringt den Server natürlcih erheblich zum laggen, insbesondere dann wenn ich "mal eben" die Accounts sichern will.


    Der Zeit haben wir etwa 5700 registrierte Accounts (davon natürlich einige gebannt, inaktiv, und natürlich nicht immer pemanent Online), zu Zeiten unserer INI Files hatten wir untefähr das drei bis vierfache. Unsere Accountdatenbank selbst wurde nicht von mir erstellt - jedoch sind dort alle Daten in einer einzigen Tabelle zusammengefasst, was immerhin rund 110 Werten entspricht (ja es ist ein GF :D )


    Wie gesagt, seit kurzem is das erst so extrem, und hält sich auch recht stabil. Eine Datenbankoptimierung mit optimize table accounts; hat nicht wirklich was gebracht.


    Hat hier noch jemand eine Idee?

  • Mehr Infos zum Problem..


    .. Root Server
    .. vServer
    .. GameServer
    .. Wie werden Accounts geladen
    .. Wie werden Accounts gespeichert
    .. Seit wann ist das Problem [Seit MySQL/Seit viele Spieler Online]
    .. Wo/Wann/Wie oft werden Accounts gespeichert

  • Wir haben einen vServer..


    die Accounts werden geladen mit diesem SQL Befehl:

    SQL
    SELECT * FROM `tabelle` WHERE `Name` = 'Zunno'


    Danach wird mysql_fetch_field benutzt...
    Dies dauert schlappe 8 Millisekunden.


    Die Accounts werden so gespeichert:
    Für jede Varriable wird ein Query ausgeführt.

    SQL
    UPDATE `tabelle` SET `Geld` = '1243' WHERE `Name` = 'Zunno'


    Hier die Funktion dazu die ich mir geschrieben habe.
    stock MySQLUpdate(playerid,spalte[],data)
    {
    new query[128],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(query,sizeof(query), "UPDATE `accounts` SET `%s` = '%d' WHERE `Name` = '%s'",spalte,data,name);
    mysql_query(query);
    mysql_free_result();
    }


    Das Problem besteht seid dem wir auf MySQL umgestiegen sind.


    Die Accounts werden alle 15,30 & 45 Minuten nach Login gespeichert.
    Da wenn alle Accounts gleichzeitig gespeichert werden, mega Lags entstehen.
    So mindert sich das ganze etwas...
    Das Speichern dauert im Schnitt 1500 Millisekunden..
    Natürlich werden die Accounts auch gespeichert wenn jemand Disconnected.



    Mit freundlichen Grüßen,
    Zunno