Limity połączeń AWS RDS


45

Serwer RDS wymyślił maks. 40 połączeń, ponieważ w poniższej dokumentacji
używam Magento 1.9, a w niektórych momentach osiągam maksymalną liczbę, a następnie witryna jest nieczynna.
Czy masz zalecany sposób rozwiązania tego problemu?

Z mojego zrozumienia, jeśli mam połączenie 2 serwerów WWW z serwerem RDS .. to powinienem mieć 2 połączenia RDS, nie więcej.


2
„Z mojego zrozumienia, jeśli mam połączenie 2 serwerów WWW z serwerem RDS ... to powinienem mieć 2 połączenia RDS, nie więcej.” To niepoprawne zrozumienie. Zazwyczaj jest to 1 połączenie na proces roboczy lub wątek.
Michael - sqlbot

Dzięki @ Michael-sqlbot .. Tak, źle to zrozumiałem, ale chciałem się upewnić. Ale dlaczego, gdy mamy 40 połączeń przychodzących do RDS, odrzuca inne połączenia i jest nieosiągalny, dopóki inne połączenia nie zostaną zamknięte?
Alaa Badran

To zgodnie z projektem, od max_connectionsparametru. W przypadku większości obciążeń powinieneś być w stanie bezpiecznie je zwiększyć, ponieważ jest to bezpiecznie zachowawcza wartość domyślna ... ale będziesz chciał zbadać przyczynę tych skoków.
Michael - sqlbot

Odpowiedzi:


65

Zmienna limitu maksymalnych połączeń AWS RDS max_connections jest oparta na typie wystąpienia, dzięki czemu można uaktualnić RDS lub wykonać więcej replik.

Typy RDS z limitem max_connections:

  • t2.micro 66
  • t2.small 150
  • m3. med. 296
  • t2.medium 312
  • m3. duże 609
  • t2. duży 648
  • m4.large 648
  • m3. duży 1237
  • r3. duży 1258
  • m4.xlarge 1320
  • m2. duży 1412
  • m3.2xduża 2492
  • r3.xlarge 2540

Odwoływanie się przez max_connections na AWS RDS MySQL Instance Sizes w 2015 r

Aktualizacja 2017-07

Bieżące ustawienie max_connections RDS MySQL jest domyślne {DBInstanceClassMemory/12582880}, jeśli używasz t2.micro z 512 MB pamięci RAM, maksymalna liczba połączeń może wynosić (512 * 1024 * 1024) / 12582880 ~ = 40 i tak dalej.


Każdy serwer WWW może mieć wiele połączeń z RDS, co zależy od twoich żądań SQL z serwera WWW.


Wiem o tym, ale kiedy po osiągnięciu 40 połączeń serwer nie odpowiada? Sprawdź to: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/…
Alaa Badran

1
Sprawdzam RDS Parameter Groups, max_connections jest domyślnie {DBInstanceClassMemory/12582880}ustawiony, więc kiedy używasz t2.micro z 512 MB pamięci RAM, max_connections (512*1024*1024)/12582880 = 40.69może wyjaśnić twoje maks. 40 połączeń.
Nick Tsai,

2
Możesz sprawdzić wartość, wysyłając zapytanie do RDS MySQL za pomocą polecenia show variables like 'max_connections';.
Nick Tsai

1
Możesz utworzyć nowy parameter groupi zmienić wartość max_connections na żądaną. Będzie to nowy limit połączenia dla Twojego wystąpienia RDS.
backslashN

1
Ta odpowiedź będzie obowiązywać w 2019 r. Zawsze możesz sprawdzić siebie, wykonującSHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein

30

Możesz zmienić max_connectionswartość, aktualizując domyślną zasadę dotyczącą parametrów lub tworząc nową - sugeruję skorzystanie z tej drugiej.

  • Idź do RDS
  • Grupy parametrów
  • Utwórz nową grupę parametrów (AWS pozostawi wszystko jako domyślne)
  • wyszukaj max_connectionswartość
  • Zmień wartość do użycia
  • Przejdź do instancji RDS i zmodyfikuj
  • Wybierz utworzoną nową grupę parametrów i zrestartuj instancję lub pozwól AWS zrestartować ją podczas następnego okna konserwacji

Mam nadzieję że to pomoże!


2
<3 to powinna być zaakceptowana odpowiedź
bbozo

2
mimo że ustawiłem max_connections na 1000, rds wciąż dopuszcza tylko 100 max połączeń w mikro instancji
Miguel Mota

1

Zwiększenie maksymalnej liczby połączeń w konfiguracji serwera może rozwiązać problem, należy jednak rozważyć sprawdzenie konfiguracji i implementacji aplikacji.

Nie jestem ekspertem od Magento, ale ponieważ ostatnio miałem podobny problem z projektem, nad którym pracowałem, zauważyłem, że domyślna implementacja frameworku, z którego korzystałem, tworzyła połączenie z każdym wywołaniem bazy danych.

Chociaż nie może to powodować żadnych problemów, w chwili, gdy masz więcej odwiedzających lub niektóre zadania, które intensywnie korzystają z bazy danych i mogą działać na wielu połączeniach, najlepszym sposobem zapobiegania awarii serwera z błędem „ZA DUŻO POŁĄCZEŃ” jest wdrożenie bazy danych pula połączeń.

Zapobiega to tworzeniu przez aplikację większej liczby połączeń, które serwer może obsłużyć, i nie powoduje awarii aplikacji dla użytkowników. Pula połączeń utrzymywałaby kolejkę żądań dostępu do bazy danych, dopóki połączenie nie stanie się dostępne, aby można było kontynuować przetwarzanie żądania użytkowników.

Pamiętaj tylko, że pula połączeń powinna być bezpieczna dla wątków w scenariuszu wielowątkowym.


1

Zaloguj się do instancji RDS (za pomocą klienta MySQL) i uruchom następujące zapytanie:

SHOW VARIABLES LIKE 'max_connections';

1

Rzeczywiste informacje dla instancji Postgresql t3 (default.postgres10 grupa parametrów):

  • db.t3.micro - 112 maks. połączeń
  • db.t3.small - 225 maks. połączeń
  • db.t3.medium - 450 maks. połączeń
  • db.t3.large - 901 max_connections
  • db.t3.xlarge - 1802 max_connections
  • db.t3.2xlarge - 3604 max_connections

Jest podobny do default.postgres9 i default.postgres11


0

To nie jest maksymalnie 40 połączeń, to jest maksymalnie 40 wystąpień RDS. Najprawdopodobniej używasz tylko 1 wystąpienia na podstawie twojego opisu.

Możesz mieć tysiące połączeń z serwerem RDS, ponieważ za każdym razem, gdy sesja jest otwierana z bazą danych, tworzy się nowe połączenie. Prawdopodobnie napotykasz ograniczenia wydajności i powinieneś rozważyć zwiększenie instancji RDS.


Dzięki @jason Mam następujące informacje: Po osiągnięciu 40 połączenia RDS nie odpowiada, dopóki inne połączenia nie zostaną zamknięte. Mamy instancję r3.xlarge RDS. Oto zrzut ekranu tego: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/... Mamy bezczynny procesor z dużą liczbą połączeń
Alaa Badran

To są połączenia, a nie inne
Orlando
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.