Я провожу нагрузочное / стресс-тестирование веб-приложения PHP, которое поддерживается экземпляром базы данных Small RDS. Когда я попадаю на веб-сайт с ~ 50 одновременными веб-запросами, база данных RDS просто перестает отвечать на все запросы на подключение примерно на 10 секунд (как из моего веб-приложения, так и от меня, использующего клиент командной строки mysql с других машин). PHP выдает следующую ошибку:
Could not connect to database. Lost connection to MySQL server at 'reading initial communication packet', system error: 110
Я предположил, что это был просто плохой / медленный SQL в веб-приложении, которое потребляло ресурсы, но эта производительность кажется действительно плохо, поэтому я копнул немного глубже. Я устанавливаю другой сервер mysql на микро-экземпляре EC2 с той же версией mysql, клоном базы данных и конфигурацией по умолчанию. Экземпляр EC2 работает в несколько раз лучше (как по задержке, так и по количеству одновременных веб-запросов до кваканья).
Мой экземпляр RDS и мой экземпляр EC2 используют одну и ту же версию mysql с конфигурациями по умолчанию, хотя я пытался настроить экземпляр RDS для увеличения различных буферов, max_connections и max_connection_errors, но все безрезультатно.
Что дает? Почему экземпляр RDS с улучшенным «дисковым» вводом-выводом, 3-кратным объемом оперативной памяти и более выделенным процессором будет уступать слабому экземпляру EC2?
Я подозреваю, что это либо причуда AWS, либо проблема конфигурации MySQL / RDS - надеюсь, что гуру по любому из этих вопросов сможет пролить свет на проблему ... Спасибо!
Одна из проблем, с которыми мы столкнулись при работе с небольшим экземпляром RDS, - это настройка количества подключений. Это формула, основанная на ОЗУ - и она позволяет только ~ 150 подключений к небольшой БД. Это первое, на что я бы посмотрел.
SHOW PROCESSLIST;
будет команда. Если вы не используете какой-либо пул соединений в своем приложении, я мог бы увидеть, что этот предел достигнут довольно быстро.
Просто выстрел в темноте, но все равно удачи!
Вам необходимо создать «группу параметров БД», а затем использовать инструменты командной строки для редактирования параметра: Руководство по развертыванию AWS RDS.