Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jakie są limity połączeń dla Google Cloud SQL z App Engine i jak najlepiej ponownie wykorzystać połączenia z bazą danych?

Krótka odpowiedź:Twoje zapytania są prawdopodobnie zbyt wolne, a serwer mysql nie ma wystarczającej liczby wątków, aby przetworzyć wszystkie żądania, które próbujesz wysłać.

Długa odpowiedź:

W tle Cloud SQL ma dwa ograniczenia, które są tutaj istotne:

  • Połączenia:odpowiadają obiektowi „conn” w kodzie. Na serwerze istnieje odpowiednia struktura danych. Gdy masz zbyt wiele takich obiektów (obecnie skonfigurowanych do 1000), najrzadziej używany zostanie automatycznie zamknięty. Gdy połączenie zostanie zamknięte pod tobą, przy następnej próbie użycia tego połączenia otrzymasz nieznany błąd połączenia (ApplicationError:1007).
  • Żądania współbieżne:są to zapytania wykonywane na serwerze. Każde wykonywane zapytanie wiąże wątek na serwerze, więc istnieje limit 100. Gdy jest zbyt wiele jednoczesnych żądań, kolejne żądania będą odrzucane z wyświetlanym błędem (ApplicationError:1033)

Nie wygląda na to, że limit połączeń ma na Ciebie wpływ, ale chciałem o tym wspomnieć na wszelki wypadek.

Jeśli chodzi o współbieżne żądania, zwiększenie limitu może pomóc, ale zwykle pogarsza problem. W przeszłości widzieliśmy dwa przypadki:

  • Zakleszczenie:Długo działające zapytanie blokuje krytyczny wiersz bazy danych. Wszystkie kolejne zapytania blokują się na tej blokadzie. Aplikacja wygasa dla tych zapytań, ale nadal działają na serwerze, wiążąc te wątki do momentu przekroczenie limitu czasu zakleszczenia wyzwalacze.
  • Wolne zapytania:każde zapytanie jest naprawdę, bardzo wolne. Zwykle dzieje się tak, gdy zapytanie wymaga tymczasowego sortowania plików. Aplikacja przekroczy limit czasu i ponawia zapytanie, podczas gdy pierwsza próba zapytania jest nadal uruchomiona i liczy się z limitem jednoczesnych żądań. Jeśli możesz znaleźć swój średni czas zapytania, możesz oszacować, ile QPS może obsłużyć Twoja instancja mysql (np. 5 ms na zapytanie oznacza 200 QPS na każdy wątek. Ponieważ jest 100 wątków, możesz wykonać 20 000 QPS. 50 ms na zapytanie oznacza 2000 QPS.)

Powinieneś użyć WYJAŚNIENIE i POKAŻ STAN INNODB SILNIKA aby zobaczyć, który z tych dwóch problemów ma miejsce.

Oczywiście możliwe jest również, że po prostu generujesz mnóstwo ruchu w swojej instancji i po prostu nie ma wystarczającej liczby wątków. W takim przypadku prawdopodobnie i tak będziesz maksymalizować procesor dla instancji, więc dodanie większej liczby wątków nie pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Narzędzie do importowania plików CSV do bazy danych MySQL?

  2. Transakcja konieczna do pojedynczego zapytania o aktualizację?

  3. Zapobieganie wstrzykiwaniu SQL w Node.js

  4. Odpowiednik kolumny MSSQL IDENTITY w MySQL

  5. Jak zaimportować plik XML do tabeli bazy danych MySQL za pomocą XML_LOAD(); funkcjonować