Mysql
 sql >> база данни >  >> RDS >> Mysql

Какви са ограниченията на връзката за Google Cloud SQL от App Engine и как най-добре да използвате повторно DB връзки?

Кратък отговор:Вашите заявки вероятно са твърде бавни и mysql сървърът няма достатъчно нишки, за да обработи всички заявки, които се опитвате да му изпратите.

Дълъг отговор:

Като фон, Cloud SQL има две ограничения, които са от значение тук:

  • Връзки:Те съответстват на обекта 'conn' във вашия код. На сървъра има съответна структура от данни. След като имате твърде много от тези обекти (в момента конфигурирани на 1000), най-малко използвания наскоро автоматично ще бъде затворен. Когато връзка се затвори под вас, ще получите неизвестна грешка при връзката (ApplicationError:1007) следващия път, когато се опитате да използвате тази връзка.
  • Едновременни заявки:Това са заявки, които се изпълняват на сървъра. Всяка изпълняваща се заявка свързва нишка в сървъра, така че има ограничение от 100. Когато има твърде много едновременни заявки, следващите заявки ще бъдат отхвърлени с грешката, която получавате (ApplicationError:1033)

Не звучи като ограничението на връзката ви засяга, но исках да го спомена за всеки случай.

Когато става въпрос за едновременни заявки, увеличаването на лимита може да помогне, но обикновено влошава проблема. Има два случая, които сме виждали в миналото:

  • Застой:Дълго изпълнявана заявка заключва критичен ред от базата данни. Всички следващи заявки блокират на това заключване. Приложението изтече на тези заявки, но те продължават да работят на сървъра, обвързвайки тези нишки до време за изчакване на блокиране тригери.
  • Бавни заявки:Всяка заявка е наистина, много бавна. Това обикновено се случва, когато заявката изисква временно сортиране на файл. Приложението изтече и се опитва отново да изпълни заявката, докато първият опит на заявката все още се изпълнява и се отчита спрямо ограничението за едновременна заявка. Ако можете да намерите средното си време на заявка, можете да получите оценка за това колко QPS може да поддържа вашият mysql екземпляр (например 5 ms на заявка означава 200 QPS за всяка нишка. Тъй като има 100 нишки, можете да направите 20 000 QPS. 50 ms на заявка означава 2000 QPS.)

Трябва да използвате EXPLAIN и ПОКАЖЕТЕ СТАТУСА НА INNODB НА ДВИГАТЕЛЯ за да видите кой от двата проблема се случва.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как форумите ви показват непрочетени теми?

  2. Как да получите обратно данни от Mysql за дни, в които няма статистика

  3. Изтичане на памет в Java MySQL JDBC

  4. MySQL команди:Cheat Sheet на общите MySQL заявки

  5. Как мога да пренапиша тази заявка, за да избегна грешката:Не можете да посочите целева таблица за актуализиране в клауза FROM