MySQL Problem

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
  • Guten Abend,
    ich habe ein kleines Problem.
    Ich benutze ein GF Script und habe im Scriptfiles Ordner den Account Ordner auf MySQL umgeschrieben.
    Ich habe alles angepasst im Scirpt und in der MySQL Datenbank.


    Das Script zeigt keine Errors oder Warnings, er liest und speichert auch alle Accounts vom MySQL.
    Komischerweise laggt es aber übertrieben, ich weiß nicht an was es liegen könnte.
    Das war absolut nicht so, als der Account Ordner über Dini lief...


    Ich kann mir das echt nicht erklären.


    Das sind die Logs:


    Das hier kommt mir sehr komisch vor:

    Zitat

    [23:55:07] Warning: PlayerDialogResponse PlayerId: 1 dialog ID doesn't match last sent dialog ID

    Bitte um Hilfe!


    Danke.

    2 Mal editiert, zuletzt von Puma_Boy () aus folgendem Grund: Text editiert, Neue Log eingefügt

  • Da ich mit geholfen habe dieses zu erstellen das MYSQL System ist wie vom Maddins tutorial aufgebaut.
    Jedoch laggt der Server in alle 30 Sekunden abständen nun manchmal nicht aber dann laggt es so stark das nichtmal mehr cmds oder sowas ankommen und das
    ca 2 minuten lang nun ich habe keine ahnung mehr woran es liegt die mysql daten tabelle ist 147 tabellen groß eben das was der gf alles saven muss.
    es fing erst an zu laggen seit dem wir das Auf Mysql umgeschrieben haben jemand ne idee?


    Function OnPlayerRegister(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME],IP[16];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    GetPlayerIp(playerid,IP,sizeof(IP));
    format(query, sizeof(query), "INSERT INTO `Accounts` (`Name`, `Passwort`, `Netzip`) VALUES ('%s', '%s', '%s')", Name, pass, IP);
    mysql_query(query);
    for(new i;i!=_:pInfo;i++)
    {
    PlayerInfo[playerid][pInfo:i] = 0;
    }
    PlayerInfo[playerid][pLevel] = 1;
    SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
    PlayerInfo[playerid][pHealth] = 99.0;
    SetPlayerHealth(playerid,PlayerInfo[playerid][pHealth]);
    PlayerInfo[playerid][pPos_x] = 2246.6;
    PlayerInfo[playerid][pPos_y] = -1161.9;
    PlayerInfo[playerid][pPos_z] = 1029.7;
    SetPlayerPos(playerid,PlayerInfo[playerid][pPos_x],PlayerInfo[playerid][pPos_y],PlayerInfo[playerid][pPos_z]);
    PlayerInfo[playerid][pInt] = 0;
    SetPlayerInterior(playerid,PlayerInfo[playerid][pInt]);
    PlayerInfo[playerid][pLocal] = 255;
    PlayerInfo[playerid][pTeam] = 3;
    PlayerInfo[playerid][pModel] = 212;
    SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
    PlayerInfo[playerid][pPhousekey] = 255;
    PlayerInfo[playerid][pPbiskey] = 255;
    PlayerInfo[playerid][pAccount] = 0;
    PlayerInfo[playerid][pReg] = 1;
    GivePlayerMoney(playerid, 50000);
    gPlayerLogged[playerid] = 1;
    PlayerUpdate(playerid);
    ShowPlayerDialog(playerid,DIALOG_STARTBONUS,DIALOG_STYLE_LIST,"Startbonus","30.000$ \n10 Respektpunkte \nÜberraschung","Wählen","Abbrechen");
    return 1;
    }


    Function PlayerUpdate(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(gPlayerLogged[playerid] == 1)
    {
    M_OnPlayerUpdate();
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    PlayerInfo[playerid][pModel] = GetPlayerSkin(playerid);
    PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
    PlayerInfo[playerid][pLevel] = GetPlayerScore(playerid);
    PlayerInfo[playerid][pCrimes] = GetPlayerWantedLevel(playerid);
    mysql_SetInt("Accounts","Level",PlayerInfo[playerid][pLevel],"Name",name);
    mysql_SetInt("Accounts","Admin",PlayerInfo[playerid][pAdmin],"Name",name);
    mysql_SetInt("Accounts","Supporter",PlayerInfo[playerid][pSupporter],"Name",name);
    mysql_SetInt("Accounts","DonateRank",PlayerInfo[playerid][pDonateRank],"Name",name);
    mysql_SetInt("Accounts","Pupgrade",PlayerInfo[playerid][gPupgrade],"Name",name);
    mysql_SetInt("Accounts","ConnectTime",PlayerInfo[playerid][pConnectTime],"Name",name);
    mysql_SetInt("Accounts","Reg",PlayerInfo[playerid][pReg],"Name",name);
    mysql_SetInt("Accounts","Sex",PlayerInfo[playerid][pSex],"Name",name);
    mysql_SetInt("Accounts","Age",PlayerInfo[playerid][pAge],"Name",name);
    mysql_SetInt("Accounts","Origin",PlayerInfo[playerid][pOrigin],"Name",name);
    mysql_SetInt("Accounts","CK",PlayerInfo[playerid][pCK],"Name",name);
    mysql_SetInt("Accounts","Muted",PlayerInfo[playerid][pMuted],"Name",name);
    mysql_SetInt("Accounts","Exp",PlayerInfo[playerid][pExp],"Name",name);
    mysql_SetInt("Accounts","Cash",PlayerInfo[playerid][pCash],"Name",name);
    mysql_SetInt("Accounts","Account",PlayerInfo[playerid][pAccount],"Name",name);
    mysql_SetInt("Accounts","PlayerKreditDauer",PlayerInfo[playerid][pPlayerKreditDauer],"Name",name);
    mysql_SetInt("Accounts","PlayerKredit",PlayerInfo[playerid][pPlayerKredit],"Name",name);
    mysql_SetInt("Accounts","Crimes",PlayerInfo[playerid][pCrimes],"Name",name);
    mysql_SetInt("Accounts","Kills",PlayerInfo[playerid][pKills],"Name",name);
    mysql_SetInt("Accounts","Deaths",PlayerInfo[playerid][pDeaths],"Name",name);
    mysql_SetInt("Accounts","Arrested",PlayerInfo[playerid][pArrested],"Name",name);
    mysql_SetInt("Accounts","WantedDeaths",PlayerInfo[playerid][pWantedDeaths],"Name",name);
    mysql_SetInt("Accounts","PhoneBook",PlayerInfo[playerid][pPhoneBook],"Name",name);
    mysql_SetInt("Accounts","LottoNr",PlayerInfo[playerid][pLottoNr],"Name",name);
    mysql_SetInt("Accounts","Fishes",PlayerInfo[playerid][pFishes],"Name",name);
    mysql_SetInt("Accounts","BiggestFish",PlayerInfo[playerid][pBiggestFish],"Name",name);
    mysql_SetInt("Accounts","Job",PlayerInfo[playerid][pJob],"Name",name);
    mysql_SetInt("Accounts","PayCheck",PlayerInfo[playerid][pPayCheck],"Name",name);
    mysql_SetInt("Accounts","Rest",PlayerInfo[playerid][pRest],"Name",name);
    mysql_SetInt("Accounts","HeadValue",PlayerInfo[playerid][pHeadValue],"Name",name);
    mysql_SetInt("Accounts","Jailed",PlayerInfo[playerid][pJailed],"Name",name);
    mysql_SetInt("Accounts","JailTime",PlayerInfo[playerid][pJailTime],"Name",name);
    mysql_SetInt("Accounts","GangJailed",PlayerInfo[playerid][pGangJailed],"Name",name);
    mysql_SetInt("Accounts","Mauled",PlayerInfo[playerid][pMauled],"Name",name);
    mysql_SetInt("Accounts","Mats",PlayerInfo[playerid][pMats],"Name",name);
    mysql_SetInt("Accounts","Drugs",PlayerInfo[playerid][pDrugs],"Name",name);
    mysql_SetInt("Accounts","Leader",PlayerInfo[playerid][pLeader],"Name",name);
    mysql_SetInt("Accounts","Member",PlayerInfo[playerid][pMember],"Name",name);
    mysql_SetInt("Accounts","FMember",PlayerInfo[playerid][pFMember],"Name",name);
    mysql_SetInt("Accounts","Rank",PlayerInfo[playerid][pRank],"Name",name);
    mysql_SetInt("Accounts","Char",PlayerInfo[playerid][pChar],"Name",name);
    mysql_SetInt("Accounts","ContractTime",PlayerInfo[playerid][pContractTime],"Name",name);
    mysql_SetInt("Accounts","DetSkill",PlayerInfo[playerid][pDetSkill],"Name",name);
    mysql_SetInt("Accounts","SexSkill",PlayerInfo[playerid][pSexSkill],"Name",name);
    mysql_SetInt("Accounts","BoxSkill",PlayerInfo[playerid][pBoxSkill],"Name",name);
    mysql_SetInt("Accounts","LawSkill",PlayerInfo[playerid][pLawSkill],"Name",name);
    mysql_SetInt("Accounts","MechSkill",PlayerInfo[playerid][pMechSkill],"Name",name);
    mysql_SetInt("Accounts","JackSkill",PlayerInfo[playerid][pJackSkill],"Name",name);
    mysql_SetInt("Accounts","CarSkill",PlayerInfo[playerid][pCarSkill],"Name",name);
    mysql_SetInt("Accounts","NewsSkill",PlayerInfo[playerid][pNewsSkill],"Name",name);
    mysql_SetInt("Accounts","DrugsSkill",PlayerInfo[playerid][pDrugsSkill],"Name",name);
    mysql_SetInt("Accounts","CookSkill",PlayerInfo[playerid][pCookSkill],"Name",name);
    mysql_SetInt("Accounts","FishSkill",PlayerInfo[playerid][pFishSkill],"Name",name);
    mysql_SetFloat("Accounts","Health",PlayerInfo[playerid][pHealth],"Name",name);
    mysql_SetFloat("Accounts","SHealth",PlayerInfo[playerid][pSHealth],"Name",name);
    mysql_SetInt("Accounts","Int",PlayerInfo[playerid][pInt],"Name",name);
    mysql_SetInt("Accounts","Local",PlayerInfo[playerid][pLocal],"Name",name);
    mysql_SetInt("Accounts","Team",PlayerInfo[playerid][pTeam],"Name",name);
    mysql_SetInt("Accounts","Model",PlayerInfo[playerid][pModel],"Name",name);
    mysql_SetInt("Accounts","Pnumber",PlayerInfo[playerid][pPnumber],"Name",name);
    mysql_SetInt("Accounts","Phousekey",PlayerInfo[playerid][pPhousekey],"Name",name);
    mysql_SetInt("Accounts","Pbiskey",PlayerInfo[playerid][pPbiskey],"Name",name);
    mysql_SetFloat("Accounts","Pos_x",PlayerInfo[playerid][pPos_x],"Name",name);
    mysql_SetFloat("Accounts","Pos_y",PlayerInfo[playerid][pPos_y],"Name",name);
    mysql_SetFloat("Accounts","Pos_z",PlayerInfo[playerid][pPos_z],"Name",name);
    mysql_SetInt("Accounts","CarLic",PlayerInfo[playerid][pCarLic],"Name",name);
    mysql_SetInt("Accounts","NewLic",PlayerInfo[playerid][pNewLic],"Name",name);
    mysql_SetInt("Accounts","FlyLic",PlayerInfo[playerid][pFlyLic],"Name",name);
    mysql_SetInt("Accounts","BoatLic",PlayerInfo[playerid][pBoatLic],"Name",name);
    mysql_SetInt("Accounts","FishLic",PlayerInfo[playerid][pFishLic],"Name",name);
    mysql_SetInt("Accounts","GunLic",PlayerInfo[playerid][pGunLic],"Name",name);
    mysql_SetInt("Accounts","LKWLic",PlayerInfo[playerid][pLKWLic],"Name",name);
    mysql_SetInt("Accounts","RollerLic",PlayerInfo[playerid][pRollerLic],"Name",name);
    mysql_SetInt("Accounts","MotoLic",PlayerInfo[playerid][pMotoLic],"Name",name);
    mysql_SetInt("Accounts","Zig",PlayerInfo[playerid][pZig],"Name",name);
    mysql_SetInt("Accounts","Kekse",PlayerInfo[playerid][pKekse],"Name",name);
    mysql_SetInt("Accounts","ZigSucht",PlayerInfo[playerid][pZigSucht],"Name",name);
    mysql_SetInt("Accounts","Gun1",PlayerInfo[playerid][pGun1],"Name",name);
    mysql_SetInt("Accounts","Gun2",PlayerInfo[playerid][pGun2],"Name",name);
    mysql_SetInt("Accounts","Gun3",PlayerInfo[playerid][pGun3],"Name",name);
    mysql_SetInt("Accounts","Gun4",PlayerInfo[playerid][pGun4],"Name",name);
    mysql_SetInt("Accounts","Ammo1",PlayerInfo[playerid][pAmmo1],"Name",name);
    mysql_SetInt("Accounts","Ammo2",PlayerInfo[playerid][pAmmo2],"Name",name);
    mysql_SetInt("Accounts","Ammo3",PlayerInfo[playerid][pAmmo3],"Name",name);
    mysql_SetInt("Accounts","Ammo4",PlayerInfo[playerid][pAmmo4],"Name",name);
    mysql_SetInt("Accounts","CarTime",PlayerInfo[playerid][pCarTime],"Name",name);
    mysql_SetInt("Accounts","Mulltime",PlayerInfo[playerid][pMulltime],"Name",name);
    mysql_SetInt("Accounts","PayDay",PlayerInfo[playerid][pPayDay],"Name",name);
    mysql_SetInt("Accounts","PayDayHad",PlayerInfo[playerid][pPayDayHad],"Name",name);
    mysql_SetInt("Accounts","CDPlayer",PlayerInfo[playerid][pCDPlayer],"Name",name);
    mysql_SetInt("Accounts","Wins",PlayerInfo[playerid][pWins],"Name",name);
    mysql_SetInt("Accounts","Loses",PlayerInfo[playerid][pLoses],"Name",name);
    mysql_SetInt("Accounts","AlcoholPerk",PlayerInfo[playerid][pAlcoholPerk],"Name",name);
    mysql_SetInt("Accounts","DrugPerk",PlayerInfo[playerid][pDrugPerk],"Name",name);
    mysql_SetInt("Accounts","MiserPerk",PlayerInfo[playerid][pMiserPerk],"Name",name);
    mysql_SetInt("Accounts","PainPerk",PlayerInfo[playerid][pPainPerk],"Name",name);
    mysql_SetInt("Accounts","TraderPerk",PlayerInfo[playerid][pTraderPerk],"Name",name);
    mysql_SetInt("Accounts","Tut",PlayerInfo[playerid][pTut],"Name",name);
    mysql_SetInt("Accounts","Radio",PlayerInfo[playerid][pRadio],"Name",name);
    mysql_SetInt("Accounts","Warns",PlayerInfo[playerid][pWarns],"Name",name);
    mysql_SetInt("Accounts","GWD",PlayerInfo[playerid][pGWD],"Name",name);
    mysql_SetInt("Accounts","Adjustable",PlayerInfo[playerid][pAdjustable],"Name",name);
    mysql_SetInt("Accounts","Fuel",PlayerInfo[playerid][pFuel],"Name",name);
    mysql_SetInt("Accounts","Married",PlayerInfo[playerid][pMarried],"Name",name);
    mysql_SetInt("Accounts","MarriedTo",PlayerInfo[playerid][pMarriedTo],"Name",name);
    mysql_SetInt("Accounts","InvWeapon",PlayerInfo[playerid][pInvWeapon],"Name",name);
    mysql_SetInt("Accounts","InvAmmo",PlayerInfo[playerid][pInvAmmo],"Name",name);
    mysql_SetInt("Accounts","InvWeapon2",PlayerInfo[playerid][pInvWeapon2],"Name",name);
    mysql_SetInt("Accounts","InvAmmo2",PlayerInfo[playerid][pInvAmmo2],"Name",name);
    mysql_SetInt("Accounts","InvDrugs",PlayerInfo[playerid][pInvDrugs],"Name",name);
    mysql_SetInt("Accounts","InvMats",PlayerInfo[playerid][pInvMats],"Name",name);
    mysql_SetInt("Accounts","FlugTime",PlayerInfo[playerid][pFlugTime],"Name",name);
    mysql_SetInt("Accounts","Roadblock",PlayerInfo[playerid][pRoadblock],"Name",name);
    mysql_SetInt("Accounts","PlayMinutes",PlayerInfo[playerid][pPlayMinutes],"Name",name);
    mysql_SetInt("Accounts","GesamtMinutes",PlayerInfo[playerid][pGesamtMinutes],"Name",name);
    mysql_SetInt("Accounts","MinutesSinceLogin",PlayerInfo[playerid][pMinutesSinceLogin],"Name",name);
    mysql_SetInt("Accounts","MinutesSinceAn",PlayerInfo[playerid][pMinutesSinceAn],"Name",name);
    mysql_SetInt("Accounts","SFPASS",PlayerInfo[playerid][pSFPASS],"Name",name);
    mysql_SetInt("Accounts","LVPASS",PlayerInfo[playerid][pLVPASS],"Name",name);
    mysql_SetInt("Accounts","HandyGeld",PlayerInfo[playerid][pHandyGeld],"Name",name);
    mysql_SetInt("Accounts","HandyVer",PlayerInfo[playerid][pHandyVer],"Name",name);
    mysql_SetInt("Accounts","UhrID",PlayerInfo[playerid][pUhrID],"Name",name);
    mysql_SetInt("Accounts","HandyID",PlayerInfo[playerid][pHandyID],"Name",name);
    mysql_SetInt("Accounts","OwnPerso",PlayerInfo[playerid][pOwnPerso],"Name",name);
    mysql_SetInt("Accounts","OwnAntrag",PlayerInfo[playerid][pOwnAntrag],"Name",name);
    mysql_SetInt("Accounts","PersoStop",PlayerInfo[playerid][pPersoStop],"Name",name);
    mysql_SetInt("Accounts","Gehalt",PlayerInfo[playerid][pGehalt],"Name",name);
    mysql_SetInt("Accounts","FrakSperre",PlayerInfo[playerid][pFrakSperre],"Name",name);
    mysql_SetInt("Accounts","BoxMats",PlayerInfo[playerid][pBoxMats],"Name",name);
    mysql_SetInt("Accounts","BoxDrugs",PlayerInfo[playerid][pBoxDrugs],"Name",name);
    mysql_SetInt("Accounts","ban",PlayerInfo[playerid][pban],"Name",name);
    mysql_SetInt("Accounts","Tot",PlayerInfo[playerid][pTot],"Name",name);
    mysql_SetInt("Accounts","FarmTime",PlayerInfo[playerid][pFarmTime],"Name",name);
    mysql_SetInt("Accounts","GDeaths",PlayerInfo[playerid][pGDeaths],"Name",name);
    mysql_SetInt("Accounts","GKills",PlayerInfo[playerid][pGKills],"Name",name);
    mysql_SetInt("Accounts","Meldung",PlayerInfo[playerid][pMeldung],"Name",name);
    mysql_SetInt("Accounts","HouseKey",PlayerInfo[playerid][pHouseKey],"Name",name);
    mysql_SetInt("Accounts","RentHouseKey",PlayerInfo[playerid][pRentHouseKey],"Name",name);
    mysql_SetInt("Accounts","Autowarn",PlayerInfo[playerid][pAutowarn],"Name",name);
    mysql_SetInt("Accounts","Bikewarn",PlayerInfo[playerid][pBikewarn],"Name",name);
    mysql_SetInt("Accounts","Flywarn",PlayerInfo[playerid][pFlywarn],"Name",name);
    mysql_SetInt("Accounts","LKWwarn",PlayerInfo[playerid][pLKWwarn],"Name",name);
    mysql_SetInt("Accounts","Waffenwarn",PlayerInfo[playerid][pWaffenwarn],"Name",name);
    }
    }
    return 1;
    }


    Alles weitere findet ihr hier: http://pastebin.com/hJfibYZS
    Edit: MYSQL System hinzugefügt

    Einmal editiert, zuletzt von Quini ()

  • Habt ihr einen Timer welcher alle 30 Sekunden irgend einen "Scheiß" abspeichert, wie z.B. die Accounts?
    Wenn ja, ist das normal wenn ihr einen schlechten PC habt.
    Bei meinem alten Script (Selfmade) war es auch so, und ich hatte jede Minute nen fetten Lag, keine CMDs o.ä gingen, dann nach ein paar Sekunden ging es wieder für 1 Minute.

  • Also im Selfmade sowas einzubauen Spitzen leistung Im Selfmade bei mir geht alles problemlos mit MYSQL nur in diesem Godfather nicht
    doch da die User ja igendwas brauchen was sie gamen können bis mein Selfmade fertig ist müssten wir das fixxen mein PC ist nicht schlecht also nen Timer besitzen wir aber
    der Speichert nur alle 10 Minuten alle Accounts über MYSQL ab.

  • Hat jemand eventuell noch eine Idee woran es liegen könnte?

  • Also im Selfmade sowas einzubauen Spitzen leistung Im Selfmade bei mir geht alles problemlos mit MYSQL nur in diesem Godfather nicht
    doch da die User ja igendwas brauchen was sie gamen können bis mein Selfmade fertig ist müssten wir das fixxen mein PC ist nicht schlecht also nen Timer besitzen wir aber
    der Speichert nur alle 10 Minuten alle Accounts über MYSQL ab.


    Quini da hast du auch schon der fehler da erstens diese variante etwas sehr langsam ist, ist das auch klar außerdem auch wenn es nicht viele User sind denk ich eher
    das es an den querys liegt daher würde ich es an eurer stelle mal probieren den timer zu entfernen weil sowas ist nicht umbedingt nötig die account immer upzudaten alle 10 Minuten und ihr könnt euch eine zweiten Thread eröffnen per OnQueryFinish.


    oder ihr habt auch die möglichkeit umzusteigen auf das rc 7 plugin
    http://forum.sa-mp.com/showthread.php?t=337810


  • Quini da hast du auch schon der fehler da erstens diese variante etwas sehr langsam ist, ist das auch klar außerdem auch wenn es nicht viele User sind denk ich eher
    das es an den querys liegt daher würde ich es an eurer stelle mal probieren den timer zu entfernen weil sowas ist nicht umbedingt nötig die account immer upzudaten alle 10 Minuten und ihr könnt euch eine zweiten Thread eröffnen per OnQueryFinish.


    oder ihr habt auch die möglichkeit umzusteigen auf das rc 7 plugin
    http://forum.sa-mp.com/showthread.php?t=337810

    das heißt es laggt übelst wegen den Timer? also den einfach entfernen?
    und was meinst du mit MYSQL ist nicht so eine gute variante ich habe gehört dies so die Schellste File Speicherung sein?
    daswegen benutze ich es eig nur ansonsten hätte ich Dini weiter benutzt.

  • das heißt es laggt übelst wegen den Timer? also den einfach entfernen?
    und was meinst du mit MYSQL ist nicht so eine gute variante ich habe gehört dies so die Schellste File Speicherung sein?
    daswegen benutze ich es eig nur ansonsten hätte ich Dini weiter benutzt.


    Nee da hast mich ihrgend wie falsch verstanden ^^.


    Alsozum Thema Mysql wenn du ladst und speicherst werden querys augeführt und diese werden 1 nach dem anderen abgearbeitet
    und daher kommt das das mysql laggt


    genauer siehe hier [ SCRIPTING ] [MySQL] OnQueryFinish - Performance verbessern!

    Also du weisst bestimmt das man verschiedene möglichkeiten hat mit mysql zu arbeiten und um die abfragen zu optimieren ein beispiel wäre auch die benutzung
    von sscanf mit mysql. So aber zu dem Thema Mysql Rc 7 plugin was ich empfehle.
    Da fallen einige probleme weg welche man mit dem vorgängern hatte ( die laggs).


    speed siehe


    http://forum.sa-mp.com/showpost.php?p=1827054&postcount=6


    With mysql_fetch_row, no caching


    1. mysql_fetch_row calls took 3065 milliseconds


    2. sscanf (parsing) took 27ms in total (500 calls to function)


    3. the rest of the house loading code took 129ms (irrelevant)


    Total: 3221ms




    With caching


    1. cache functions (loading and parsing) took 166ms


    2. the rest of the house loading code took 108ms (irrelevant)


    Total: 274ms


    //edit


    @ Quini ja entfern mal die timer ob es sich bessert

  • Also ich habe den Timer Health von OnPlayerLogin entfernt und den
    Account Update timer nun geht es einiges besser aber es gibt immer noch kleine Laggs
    das heißt nicht mehr so extrem aber z.b wenn ich in den ooc chat schreibe kommt die nachricht erst sagen wir 10 bis 20 sekunden
    später meinst du es liegt immer noch an den timers oder einfach an mysql sowie wir es gemacht haben beim reggen?


    das mitm R7 Plugin verstehe ich überhaupt nicht kriege es gerade mal so hin es zumachen so wie maddin es sagte :S

  • mySQL ist durchaus eine bessere Option als jede "dateibasierende Datenbank", weil das Lesen und Schreiben von Festplatten einfach niemals so schnell sein wird (wobei das mit SATA5 vllt auch irgendwann nicht mehr wahr ist ^^)
    Allerdings ist - je nach Aufbau deiner Querys - die Leistungsanforderung immens höher. Achte darauf, dass du bei SQL nicht immer gleich alles und jeden ausliest/einträgst, so wie du es momentan machst, sondern immer nur das, was gerade auch geändert wird. Ich rate also von einer einfachen "spielerSpeichern"-Funktion ab und empfehle stattdessen die Werte direkt umzuschreiben, wenn sie sich inGame ändern. Beim Auslesen ist das natürlich nicht so einfach, aber auch da gibt es mittel und wege, das ganze etwas "prozessorfreundlicher" zu gestalten.


    Je nachdem was für ein System du hast - und was für eine Anbindung, fällt dieses Gewicht weniger oder mehr in die Fehlerlösung mit ein. Wobei ich mal denke, dass jeder PC den ein Gamer heutzutage hat definitiv ausreicht um Datenbank mit weniger als 100.000 Einträgen binnen (mili)sekunden abzuarbeiten. Alternativ kannst du, während deine Spieler gespeichert werden, das ganze einfach mal via SendClientMessage debuggen und schauen, ob die Lags synchron zur Speicherung auftreten.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Also ich habe den Timer Health von OnPlayerLogin entfernt und den
    Account Update timer nun geht es einiges besser aber es gibt immer noch kleine Laggs
    das heißt nicht mehr so extrem aber z.b wenn ich in den ooc chat schreibe kommt die nachricht erst sagen wir 10 bis 20 sekunden
    später meinst du es liegt immer noch an den timers oder einfach an mysql sowie wir es gemacht haben beim reggen?


    das mitm R7 Plugin verstehe ich überhaupt nicht kriege es gerade mal so hin es zumachen so wie maddin es sagte :S


    Hm also mit dem rc 7 plugin da könnte ich dir sogar ein beispiel geben falls du daran interesse hättest aber wie schon LeijaT gesagt hast
    kannst es verteilen oder dir noch einen zweiten Thread aufbauen.


    //edit


    wann genau entstehen nun die laggs

  • Als ich meine Account immer mit der MySQL WHERE Name = 'Name' geupdatet habe, hat es bei mir auch gelaggt. Ein Account hat 20.000 ms zum speichern gebraucht (20 sek).
    Meine Lösung: Datenbank ID beim Login auslesen lassen. Und dann per Datenbank ID Updaten.

    SQL
    UPDATE `accounts` SET `Feld` = '24' WHERE `ID` = 23


    anstatt

    SQL
    UPDATE `accounts` SET `Feld` = '24' WHERE `Name` = 'EinerVonVielen'



    Probiers aus :P


  • Noch besser wäre es so zu machen:


    SQL
    UPDATE `accounts` SET `Feld` = '24' WHERE `ID` = 23 LIMIT 1




    Da du ja sowieso weißt, dass du diese ID nur ein mal haben wirst und SQL
    dann nicht die Einträge 24 bis 148.571.548 überprüfen muss ;)


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Ja wobei die ID sollte schon als PRIMERY KEY difiniert sein.
    Dadurch weiß die Datenbank auch: "Hey das ist ein Wert den kann es nur einmal in der Datenbank geben."
    Und sucht demnach auch nicht weiter wenn er einen Wert gefunden hat.
    Und vergleicht auch nicht wie bei der Varriante mit dem Namen die ganzen Werte mit einander.


    Daher spart das schon ziemlich viel Zeit beim Updaten von Daten.

  • Ja wobei die ID sollte schon als PRIMERY KEY difiniert sein.
    Dadurch weiß die Datenbank auch: "Hey das ist ein Wert den kann es nur einmal in der Datenbank geben."
    Und sucht demnach auch nicht weiter wenn er einen Wert gefunden hat.
    Und vergleicht auch nicht wie bei der Varriante mit dem Namen die ganzen Werte mit einander.


    Daher spart das schon ziemlich viel Zeit beim Updaten von Daten.

    Also auf klar deutsch es laggt weil er jedes mal den namen auslesen muss und dann erst den wert setzt? also müsste ich sogesehen den namen einmal auslesen und dann über eine
    variabel ihn updaten lassen? oder eben wie ihr es meint über die id die in der datenbank eingetragen wird? wo genau müsste ich dies machen hätte jemand mal nen beispiel?
    login und Update etc habe ich oben ja gepostet.

  • Was du noch machen könntest, wäre mit Variablen zu arbeiten heißt also der Spieler connectet, du ließt alle Werte aus und schreibst die in Variable rein. Wenn der Spieler disconnectet schreibst du die Werte in die Datenbank rein. so müsstest du nicht immer mit MySQL arbeiten sondern nur beim laden und speichern.


    Lg

  • so habe ich es doch nur login und register und PlayerUpdate
    ansonsten arbeite ich mit variabeln wie PlayerInfo sonst nichts mysql wird nur mein connecten und disconnecten verwendet
    daher frage ich mich auch wieso der server dadurch laggt. hats bei dini bzw fwrite auch nicht?

  • Ich denke mal dein Datenbank ist nach so einem Prinzip aufgebaut:


    Wenn du nun den Namen in der WHERE Anweisung benutzt, sucht er die komplette Datenbank nach dem namen ab, auch wenn schon einer gefunden wurde, da es möglich ist im Feld Name, doppelte Werte also zweimal z.B. User1 abspeichern lässt.
    Wenn du nun aber die ID in der WHERE Anweisung benutzt, dann gibt es diese ID nur einmal. Denn wenn deine Datenbank so eingestellt ist wie auf meinem Screen, kannst du eine ID nicht doppelt eintragen. Daher weiß MySQL auch genau, es gibt diesen Wert nur einmal und muss nicht alles miteinander vergleichen.


    Daher funktioniert das so schneller.
    Also einfach beim Registrieren die ID gleich auslesen lassen, und dann immer die ID benutzen beim Updaten.


    format(query,128,"INSERT INTO `accounts` (Name) VALUES ('%s')",username);
    mysql_query(query);
    PlayerInfo[playerid][pID] = mysql_insert_id();


    Kleines Beispiel wie es im Register stock aussehen könnte.


    Natürlich ändert sich die ID nicht, daher brauch man sie nicht abspeichern lassen bei jedem Disconnect. Sondern nur beim Connecten (Einloggen) auslesen.



    Ich kann mich vielleicht in der erklärung bischen vertun aber so wurde es mir mal erzählt, ich weiß aufjedenfall das es per ID schneller als per Namen geht :P
    Ich hoffe ich konnte helfen.


    Mit freundlichen Grüßen,
    Zunno