Пределы подключения AWS RDS

45

RDS-сервер имеет до 40 подключений максимум, так как в следующей документации
я использую Magento 1.9, и в некоторых моментах я достигаю максимального количества, после чего сайт не работает.
Есть ли у вас какой-либо рекомендуемый способ решить эту проблему?

Насколько я понимаю, если у меня есть 2 веб-сервера для подключения к RDS-серверу ... тогда у меня должно быть 2 RDS-соединения, не более.

Алаа Бадран
источник
2
«Насколько я понимаю, если у меня есть 2 веб-сервера для подключения к RDS-серверу ... тогда у меня должно быть 2 RDS-соединения, не более». Это неверное понимание. Обычно это 1 соединение на рабочий процесс или поток.
Майкл - sqlbot
Спасибо @ Michael-sqlbot .. Да, я неправильно понял это, но я хотел убедиться. Но почему, когда у нас есть 40 подключений, приходящих на RDS, он отказывается от другого подключения и будет недоступен, пока другие подключения не будут закрыты?
Алаа Бадран
Это по замыслу, из max_connectionsпараметра. Для большинства рабочих нагрузок вы должны иметь возможность безопасно увеличить его, потому что это безопасное консервативное значение по умолчанию ... но вы захотите выяснить причину этих всплесков.
Майкл - sqlbot

Ответы:

65

Предельная переменная max_connections AWS RDS основана на типе экземпляра, поэтому вы можете обновить RDS или создать дополнительную реплику.

Типы RDS с пределом max_connections:

  • t2.micro 66
  • t2.small 150
  • m3.medium 296
  • t2.medium 312
  • м3 большая 609
  • t2.large 648
  • m4.large 648
  • m3.xlarge 1237
  • r3.large 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • м3.2большой 2492
  • r3.xlarge 2540

Ссылаясь на max_connections в AWS RDS Размеры экземпляра MySQL в 2015 году

Обновление 2017-07

Текущий параметр max_connections RDS MySQL используется по умолчанию {DBInstanceClassMemory/12582880}, если вы используете t2.micro с 512 МБ ОЗУ, max_connections может быть (512 * 1024 * 1024) / 12582880 ~ = 40 и т. Д.


Каждый веб-сервер может иметь много подключений к RDS, что зависит от ваших запросов SQL от веб-сервера.

Ник Цай
источник
Я знаю это, но когда при достижении 40 соединений сервер не отвечает? Проверьте это: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/…
Алаа Бадран
1
Я проверяю группы параметров RDS, max_connections используется по умолчанию {DBInstanceClassMemory/12582880}, поэтому, когда вы используете t2.micro с 512 МБ ОЗУ, max_connections может быть тем, (512*1024*1024)/12582880 = 40.69что может объяснить ваши 40 максимальных соединений.
Ник Цай
2
Вы можете проверить значение, запросив RDS MySQL с помощью команды show variables like 'max_connections';.
Ник Цай
1
Вы можете создать новое parameter groupи изменить значение max_connections на значение, которое вы хотите. Это будет новый лимит соединения для вашего экземпляра RDS.
обратная косая
1
Этот ответ сохраняется в 2019 году. Вы всегда можете проверить себя, выполнивSHOW VARIABLES WHERE Variable_name='max_connections'
Дейв Стейн
30

Вы можете изменить max_connectionsзначение, либо обновив политику параметров по умолчанию, либо создайте новую - я бы предложил пойти с последним.

  • Перейти к RDS
  • Группы параметров
  • Создайте новую группу параметров (AWS оставит все по умолчанию)
  • искать max_connectionsзначение
  • Измените значение для использования
  • Перейти к экземпляру RDS и изменить
  • Выберите новую группу параметров, созданную и перезапустите экземпляр или дайте AWS перезагрузить его во время следующего окна обслуживания

Надеюсь это поможет!

Дэвид
источник
2
<3 это должен быть принятый ответ
bbozo
2
хотя я установил max_connections равным 1000, rds по-прежнему допускает только 100 макс. подключений на микроэкземпляре
Мигель Мота
1

Хотя увеличение максимального количества соединений в конфигурации сервера может решить проблему, вам следует рассмотреть возможность проверки конфигураций и реализаций вашего приложения.

Я не эксперт по Magento, но, поскольку у меня недавно была похожая проблема в проекте, над которым я работал, я заметил, что реализация структуры по умолчанию, которую я использовал, создавала соединение при каждом обращении к базе данных.

Хотя это может не вызвать каких-либо проблем, в тот момент, когда у вас больше посетителей или задач, которые интенсивно работают с базами данных и могут работать на нескольких соединениях, лучший способ предотвратить сбой сервера с ошибкой «СЛИШКОМ МНОГО СОЕДИНЕНИЙ» - внедрить базу данных. пул подключений.

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

Просто имейте в виду, что пул соединений должен быть многопоточным.

Уриэль Бертош
источник
1

Войдите в свой экземпляр RDS (используя клиент MySQL) и выполните следующий запрос:

SHOW VARIABLES LIKE 'max_connections';
Шамми Шайлай
источник
1

Актуальная информация для Postgresql t3-instance (группа параметров default.postgres10):

  • db.t3.micro - 112 max_connections
  • db.t3.small - 225 макс_соединений
  • db.t3.medium - 450 max_connections
  • db.t3.large - 901 max_connections
  • db.t3.xlarge - 1802 max_connections
  • db.t3.2xlarge - 3604 max_connections

Это похоже на default.postgres9 и default.postgres11

anton.uspehov
источник
0

Это не 40 подключений, а 40 экземпляров RDS. Скорее всего, вы используете только 1 экземпляр на основе вашего описания.

Вы можете иметь тысячи соединений с сервером RDS, потому что каждый раз, когда открывается сеанс с базой данных, это создает новое соединение. Вероятно, вы сталкиваетесь с ограничениями производительности и должны увеличить размер экземпляра RDS.

Джейсон с
источник
Спасибо @jason У меня есть следующая информация: При достижении 40-го соединения RDS не отвечает, пока не закроются другие соединения. У нас есть R3.xlarge RDS экземпляр. Вот скриншот этого: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/… У нас неактивный ЦП с большим количеством подключений
Alaa Badran
Это связи, а не другое
Орландо