Различия в производительности между DEV и производственной средой MYSQL server - PullRequest
0 голосов
/ 20 ноября 2018

Я создаю приложение с Laravel 5.6 и VueJS, запрашивая данные у API на бэкэнде Laravel.В моей среде DEV запросы вообще не занимают время, но в производственной среде ответ на API занимает 85,7 секунды, а в среде DEV - 0,1 секунды.Данные в обеих средах одинаковы.

Используя следующие команды в моем контроллере, я смог получить точные запросы и выполнить их один за другим:

DB::enableQueryLog();

    // then my eloquent stuff
    $query = Sportevent::whereHas('photos')->with('photos');
    if($request->input('year')){
        $year = $request->input('year');
        $query = $query->where('date','like', $year.'%');
    }
    if($request->input('country')){
        $country = $request->input('country');
        $query = $query->where('country',$country);
     }
    $sportevents = $query->orderBy('date',"DESC")->paginate(10);

// then I display the queries:
dd(DB::getQueryLog());

Здесьэто запросы, которые не были выбраны, не выбрав год или страну, включая производительность в обеих средах со временем:

// --------------------------------------------------------------
// DEV: 0.0208 seconds | PROD: 73 seconds (had to use stopwatch)
// --------------------------------------------------------------
select count(*) as aggregate from `events` where exists 
   (select * from `photos` where `events`.`id` = `photos`.`eventID` 
   and `active` = 1)

// ------------------------------------------
// DEV: 0.025 seconds | PROD: 38.9721 seconds
// ------------------------------------------
select * from `events` where exists (select * from `photos` where
  `events`.`id` = `photos`.`eventID` and `active` = 1) 
   order by `date` desc limit 10 offset 0

// ------------------------------------------
// DEV: 0.0112 seconds | PROD: 0.0141 seconds
// ------------------------------------------
select * from `photos` where `active` = 1 and `photos`.`eventID` in 
    (11194, 11087, 10506, 10797, 9910, 10118, 10212, 9655, 10047, 10049)

Таблица событий содержит около 6000 записей и фотографий менее 50000 записей.Если вам нужна дополнительная информация, когда речь заходит о структуре таблиц, дайте мне знать, прежде чем голосовать вниз в разделе комментариев :-)

На рабочем сервере много других приложений, работающих с Laravel или Wordpress, использующих базы данных на том же MySQL.установка и ни один из них не имеет подобных проблем.

1 Ответ

0 голосов
/ 20 ноября 2018

Хотя первые два запроса не выдают много, им приходится проходить большую часть данных и, следовательно, они выглядят очень требовательно к памяти и / или процессору.

Похоже, что моя среда DEV обладает большей мощностью, чем моя производственная среда, и поэтому у меня были огромные различия.

Решение в конце было простым: я добавил ИНДЕКС типа INDEX в столбец photos.eventID, что в любом случае было бы хорошей идеей.

Это небольшое изменение заставило мой API отвечать за 0,4 секунды вместо 85,7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...