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

Загубена връзка с MySQL сървър по време на заявка при произволни прости заявки

Връзката с MySQL може да бъде прекъсната по различни начини, но бих препоръчал да прегледате отново отговора на Марио Карион, тъй като това е много мъдър отговор.

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

...това може лесно да се случи, ако пулът от връзки е обвързан с процес, което според мен е в ActiveRecord, което означава, че една и съща връзка може да бъде „проверена“ няколко пъти едновременно в различни процеси.

Решението е, че връзките към базата данни трябва да се установят само СЛЕД fork изявление в сървъра на приложения.

Не съм сигурен кой сървър използвате, но ако използвате warmup функция - не.

Ако изпълнявате извиквания към базата данни преди първата мрежова заявка - не го правете.

Всяко от тези действия може потенциално да инициализира пула за връзки преди fork възниква, което води до споделяне на MySQL пула за връзки между процесите, докато системата за заключване не е.

Не казвам, че това е единствената възможна причина за проблема, както е посочено от @sloth-jr, има и други опции... но повечето от тях изглеждат по-малко вероятни според вашето описание.

Странична бележка:

Всеки процес може да съдържа определен брой връзки. Във вашия случай може да имате до 500X36 връзки . (вижте редакцията)

Като цяло, броят на връзките в пула често може да бъде същият като броя на нишките във всеки процес (не трябва да е по-малък от броя на нишката, или спорът ще ви забави). Понякога е добре да добавите още няколко в зависимост от приложението ви.

РЕДАКТИРАНЕ:

Извинявам се, че пренебрегнах факта, че броят на процесите се отнасяше към MySQL данните, а не към данните на приложението.

Броят на процесите, който показахте, е данните на MySQL сървъра, които изглежда използва нишка за IO схема за връзка . Данните „Процес“ всъщност отчитат активните връзки а не реални процеси или нишки (въпреки че трябва да се преведе и на броя на нишките).

Това означава, че от възможни 500 връзки на процес на приложение (т.е. ако използвате 8 процеса за приложението си, това би било 8X500=4000 разрешени връзки) приложението ви е отворило само 36 връзки досега.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично улавяне на изключения за PDO в PHP

  2. Как да променя типа данни на импортирана електронна таблица в mysql?

  3. Мащабиране на временните записи в базата данни, за да се преброят общите суми, за да се спре прекомерният абонамент

  4. Изключение на mySQL:Не може да се свърже с нито един от посочените хостове на MySQL. чрез C#

  5. Автоматично довършване в клиента от командния ред на MySQL