Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 30
  1. #1
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±

    Нагрузка на базу данных

    Привет всем. Столкнулся с такой проблемой что стала лагать MySQL база когда я включаю сохранения всего что есть на сервере (сервер на локалке, не хочется что то хост покупать). Да я вполне соглашусь с тем кто скажет что у меня ЖД прожил свое и ему пора на помойку.

    Вот сами сохранения
    PHP код:
    SetTimer("SaveVehicle"400000);
        
    SetTimer("SavePlayer"300000);
        
    SetTimer("SaveApartment"200000);
        
    SetTimer("SaveHome"250000); 
    PHP код:
    public SavePlayer()
    {
        for(new 
    iGetPlayerPoolSize() + 1ai++)
            
    SavePlayer_1(i);

        
    SetTimer("SavePlayer"300000);
    }

    stock SavePlayer_1(playerid)
    {
        
    format(gstringsizeof(gstring),"UPDATE `players` SET `Name` = '%s', `Sex` = '%d', `Skin` = '%d', `Money` = '%d' WHERE `ID`='%d'"
            
    pInfo[playerid][pName], pInfo[playerid][pSex], pInfo[playerid][pSkin], pInfo[playerid][pMoney], pInfo[playerid][pID]);
        
    mysql_function_query(mysqlconnectgstringfalse"""");
    }

    public 
    SaveHome()
    {
        for(new 
    iMAX_HOMEi++)
        {
            
    format(gstringsizeof(gstring),"UPDATE `home` SET `NamePlayer` = '%s', `IDInterior` = '%d', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `NumHome` = '%d', `IDStreets` = '%d', `Сity` = '%d', `X` = '%f', `Y` = '%f', `Z` = '%f' WHERE `ID` = '%d'"
                
    iHome[i][hNamePlayer], iHome[i][hIDInterior], iHome[i][hBought], iHome[i][hStatus], iHome[i][hMoney], iHome[i][hBank], iHome[i][hNumHome], iHome[i][hIDStreets], iHome[i][hCity], iHome[i][hX], iHome[i][hY], iHome[i][hZ], iHome[i][hID]);
               
    mysql_function_query(mysqlconnectgstringfalse"""");
        }
        
    SetTimer("SaveHome"250000);
    }

    public 
    SaveApartment()
    {
        for(new 
    iMAX_APARTMENT_PLAYERi++) // Зачем тут два цикла? Ну в первом обращение к 0 ячейке во втором к 1
        
    {
            
    format(gstringsizeof(gstring),"UPDATE `apartment` SET `NamePlayer` = '%s', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `IDInterior` = '%d' WHERE `ID`='%d'"
                
    iApartment[0][i][aNamePlayer], iApartment[0][i][aBought], iApartment[0][i][aStatus], iApartment[0][i][aMoney], iApartment[0][i][aBank], iApartment[0][i][aIDInterior], iApartment[0][i][aID]);
               
    mysql_function_query(mysqlconnectgstringfalse"""");
        }
        for(new 
    iMAX_APARTMENT_PLAYERi++)
        {
            
    format(gstringsizeof(gstring),"UPDATE `apartment` SET `NamePlayer` = '%s', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `IDInterior` = '%d' WHERE `ID`='%d'"
                
    iApartment[1][i][aNamePlayer], iApartment[1][i][aBought], iApartment[1][i][aStatus], iApartment[1][i][aMoney], iApartment[1][i][aBank], iApartment[1][i][aIDInterior], iApartment[1][i][aID]);
               
    mysql_function_query(mysqlconnectgstringfalse"""");
        }
        
    SetTimer("SaveApartment"200000);
    }

    public 
    SaveVehicle()
    {
        for(new 
    iMAX_VEHICLESi++)
        {
            if(!
    iVehicle[i][vMoney]) continue;
            
    SaveVehicle_1(i);
        }
        
    SetTimer("SaveVehicle"400000);
    }

    stock SaveVehicle_1(vehicleid)
    {
        
    format(gstringsizeof(gstring),"UPDATE `vehicle` SET `NamePlayer` = '%s', `Money` = '%d', `Status` = '%d', `HP` = '%f', `VehicleID` = '%d', `Color1` = '%d', `Color2` = '%d', `Paintjob` = '%d', `Tyres` = '%d', `Spoiler` = '%d', `FrontBumper` = '%d', `RearBumper` = '%d', `Nitro` = '%d', `Hydraulics` = '%d', `Engine` = '%d' WHERE `ID`='%d'"
             
    iVehicle[vehicleid][vNamePlayer], iVehicle[vehicleid][vMoney], iVehicle[vehicleid][vStatus], iVehicle[vehicleid][vHP], iVehicle[vehicleid][vVehicleID], iVehicle[vehicleid][vColor1], iVehicle[vehicleid][vColor2], iVehicle[vehicleid][vPaintjob], iVehicle[vehicleid][vTyres], iVehicle[vehicleid][vSpoiler], iVehicle[vehicleid][vFrontBumper], iVehicle[vehicleid][vRearBumper], iVehicle[vehicleid][vNitro], iVehicle[vehicleid][vHydraulics], iVehicle[vehicleid][vEngine], iVehicle[vehicleid][vID]);
           
    mysql_function_query(mysqlconnectgstringfalse"""");

    В чем собственно лаги базы: когда заходишь на сервер у тебя в течении 10 секунд появляется только окно авторизации, после того как авторизировался самп просто зависает на секунд 15 (это идет загрузка содержимого аккаунта), при этом всём ЖД компа загружен на 83% (все эти проценты жрет процесс mysqlbd.exe). Если же я отключаю сохранения, то все становится нормально, ЖД нагружен на 1%, окно авторизации появляется за наносекунды и т.д.

    В чем может быть проблема? Может можно как то оптимизировать процесс сохранения что бы даже мой ущербный жесткий диск успел все записывать?

    - - - Добавлено - - -

    Кто то спросит зачем мне таймеры

    Ну представим мой сервак ддудосят и он аварийно завершает работу, при этом не вызывается OnGameModeExit, и что? Сохранения все пропадают

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Кто так таймеры использует? Разве так не проще?
    PHP код:
    SetTimer("SaveVehicle"400001); 
    PHP код:
    public SaveVehicle() 

        for(new 
    iMAX_VEHICLESi++) 
        { 
            if(!
    iVehicle[i][vMoney]) continue; 
            
    SaveVehicle_1(i); 
        } 

    А по проблеме не знаю, сколько записей в БД?

  3. #3
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Так еще больше подвисать будет, я использую по совету DeimoS

    200 записей квартир
    170 домов
    1 машина
    1 игрок

  4. #4
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Так канеш не кто не делает в наше время))
    Ну а что мешает написать систему в большое кол-во(на каждую квартиру, игрока и т.п.) таймеров с плавным сохранением?

    - - - Добавлено - - -

    Если так допустим сделать...
    PHP код:
    #define MAX_TIME_INTERVAL (200) //ms

    public sm_SavePlayer() 

        for(new 
    iGetPlayerPoolSize() + 1ai++) 
            
    SetTimerEx("SavePlayer_1"MAX_TIME_INTERVAL0"i"i);

    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  5. #5
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    ща попробуем

  6. #6
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Главное интервал под себя настроить, а дальше всё по маслу пойдёт.
    Время сохранения увеличится, но лаги должны пройти.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  7. #7
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    база как задыхалась, так и задыхается



    задержку ставил и на 300 и на 400 дальше уже думаю не имеет смысла

  8. #8
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    база как задыхалась, так и задыхается

    А код показать можно?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  9. #9
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    PHP код:
    public SaveHome()
    {
        for(new 
    iMAX_HOMEi++)
            
    SetTimerEx("SaveHome_1"MAX_INTERVAL_SAVE_TIME0"i"i);

        
    SetTimer("SaveHome"250000);
    }

    public 
    SaveHome_1(homeid)
    {
        
    format(gstringsizeof(gstring),"UPDATE `home` SET `NamePlayer` = '%s', `IDInterior` = '%d', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `NumHome` = '%d', `IDStreets` = '%d', `Сity` = '%d', `X` = '%f', `Y` = '%f', `Z` = '%f' WHERE `ID` = '%d'"
                
    iHome[homeid][hNamePlayer], iHome[homeid][hIDInterior], iHome[homeid][hBought], iHome[homeid][hStatus], iHome[homeid][hMoney], iHome[homeid][hBank], iHome[homeid][hNumHome], iHome[homeid][hIDStreets], iHome[homeid][hCity], iHome[homeid][hX], iHome[homeid][hY], iHome[homeid][hZ], iHome[homeid][hID]);
           
    mysql_function_query(mysqlconnectgstringfalse"""");

    ой да чет я уже спать хочу, i * не дописал, ща секунду

    - - - Добавлено - - -

    Нагрузка диска упала с 97% до 46%, лаги пропали (ну хз как при онлайне будет). Может кто то предложит вариант по лучше ?

  10. #10
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Главное интервал под себя настроить
    PHP код:
    #define MAX_TIME_INTERVAL (200) //ms 
    Пробуй увеличивать)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •