inkább leírom röviden, tömören mi a probléma, és hogy hogyan épül fel a rendszer.
Régebben is ugyan ez a fajta kifagyásunk volt, ami annyit tesz hogy egy bizonyos idõn belül rengeteg sok incomming connection-t jelez a log a játékosok neveivel, és IP -jével. Ekkor a szerver nem állt le, hanem futott azzal a játékosszámmal ami a fagyás elõtt volt, de nem lehetett fellépni a szerverre, sõt a szervergépnek a processzorát is 100% -ra terhelte. Ekkoriban írtunk egy segélykérõ topicot a hivatalos fórumra (
http://forum.sa-mp.com/showthread.php?t=294180 ). Itt összehordtak pár baromságot, viszont többen is írták hogy próbáljuk átírni a mysql rendszerünket multi-thread használatával. Ezt eleinte elleneztem, ugyanis elég hatalmas rendszerrõl van szó, továbbá rengetek sok visszatérõ értékes funckió is van (pl. GetVehilceOwner ) amit viszont nem lehet beletenni. (vagyis lehet, de külön-külön kellene mindig beírogatni). Ekkor megpróbálkozunk a MYSQL R6 plugint lecserélni a StrickenKid féle MySQL 2.1.1 -re. A rendszer stabilabb lett, viszont a kifagyás nem szûnt meg.
Ekkor olyan módszert alkalmaztam, miszerint 4db mysql kapcsolatot hozok létre. Elsõben az összes lehetséges lekérdezést átírtam multi-thread-ot használva. A másodikban a visszatérõ értékes lekérdezéseket tettem. A harmadikban a multi-threados ciklusos (loopos) lekérdezések vannak. (aminek több mint egy értéke van. pl. amikor a házak betöltését csinálja). A negyediben pedig ugyancsak a ciklusos lekérdetések vannak, de itt a visszatérõ értékesek. (ebbõl csak pár db van).
A rendszer gyorsabb, viszont a fagyás ismételten elõfordul. Egyedül az változott hogy a fagyás után nem fagy be a szerver a 100% -os processzorhasználattal, hanem simán leáll.
Mielõtt valaki félreértené, a ciklusos lekérdetések alatt nem arra gondolok hogy van egy ciklus, és abban van mysql_query meghívva, hanem amikor több adatról van szó, akkor ciklussal megy végig az egészen.
pl..
[pawn]
new temp[256], id, Float:x, Float:y, Float:z;
mysql_query(\"SELECT `id`, `x`, `y`, `z` FROM `houses`\");
mysql_store_result();
while ( mysql_fetch_row(temp,\"|\") )
{
sscanf(temp,\"p<|>ifff\",id, x, y, z);
CreateHouse(id, x, y, z);
}
mysql_free_result();
[/pawn]