tl; dr: Почему время, затрачиваемое на получение результатов оператора SELECT 10 000 раз из RDS по запросу от EC2, настолько неравномерно?
Обновлен вопрос с результатами малых и средних серверов RDS
Экспериментируя с AWS для проверки времени, затраченного на получение результата SQL-запроса, я получил следующий очень неравномерный результат:
Я написал PHP-код, чтобы сообщить мне время, затраченное на получение результата запроса SELECT для п раз с сервера.
while($flag<n)
{
$t=microtime(true);
$result=$con->query($q);
$t=microtime(true)-$t;
$total+=$t;
$flag++;
}
Результаты для 5 испытаний были: 20, 21, 20, 20, 21 (все в секундах).
Результаты для 5 испытаний были: 33, 33, 33, 33, 3 (все в секундах).
Результаты 11 испытаний: 272, 709, 49, 48, 711, 593, 47, 316, 153, 47, 636 (Все в секундах)
Результаты 5 испытаний: 53, 54, 53, 158, 698 (Все в секундах)
Результаты 5 испытаний: 96, 123, 579, 252 (Все в секундах)
Почему время, затраченное RDS при тестировании 10 000 циклов оператора SELECT, настолько неравномерно? И почему он такой высокий, чем у серверов EC2?
[Я не думаю, что это связано с сетью, потому что, когда я проводил эксперимент с меньшими петлями (1000 петель), показания для EC2 -> RDS были 4, 5, 5, 5, 4.]
Когда я регистрировал время для каждого запроса на выборку, я заметил следующее:
Среднее время, затрачиваемое на каждый запрос: 0,015419
Количество запросов Заняло больше среднего времени из 10000: 1644
Общее время, затраченное на запросы, выполнение которых заняло больше среднего: 119,364 (78% от общего времени)
Среднее время, затрачиваемое на каждый запрос: 0,063605
Количество запросов Заняло больше среднего времени из 10000: 8629
Общее время, затраченное на запросы, на выполнение которых ушло больше среднего: 628,6426 (98,8% от общего времени)
Я регистрировал время для каждого запроса на выборку в цикле из 10 000 запросов. Я заметил, что после некоторых запросов время для каждого запроса увеличивается до ~ 0,07 (с ~ 0,003) секунды. Но это происходит после случайного количества запросов. Мол, иногда после ~ 8000 запросов, а иногда после ~ 3000 запросов. Что может быть причиной? Кроме того, когда на 10000 запросов требуется ~ 45 секунд, загрузка ЦП в RDS составляет около 5%. В то время как когда это занимает> 100 секунд, то CPU составляет около 10-15%.
Я обновил сервер RDS с t2.micro до t2.small и далее до t2.medium. И снова производительность была неравномерной:
Результаты для 5 испытаний были: 53, 54, 53, 158, 698 (все в секундах).
Результаты для 5 испытаний были: 96, 123, 579, 252 (все в секундах).
Я переключил RDS в другую зону. Теперь показания кажутся последовательными. Возможно, проблема заключалась в краже процессора каким-то шумным соседом.
Результаты для 5 испытаний были: 156, 151, 151, 151, 151, 302 (все в секундах).
Я заметил, что вы используете db.micro
пример. Как и в случае с EC2, микроэкземпляры спроектированы так, чтобы быть экономичными, но за счет снижения производительности. Тем не менее, вы получите много худшая производительность при загрузке этих типов серверов по сравнению с обычными экземплярами, поскольку процессорное время отводится экземпляру «последним» по сравнению с другими экземплярами, использующими то же оборудование.
Чтобы доказать это, снова запустите тесты с db.medium
экземпляр, и вы найдете его гораздо более последовательным.