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

Проблем с пула за връзки

Ето потока от събития, за да илюстрира какво се случва:

  1. Връзка се иска и използва от обаждащия се (приложение или пул за връзки)
  2. Обаждащият се запазва препратка към него, за да може връзката да бъде използвана повторно
  3. Обаждащият се преминава през период на неактивност (например система за разработчици през нощта или система за QA през уикенда).
  4. След като връзката към базата данни не се използва, базата данни счита, че връзката е неактивна. Тъй като е неактивна, след определен период от време (по подразбиране на MySQL е 8 часа) базата данни затваря връзката.
  5. Обаждащият се все още има манипулатор на връзката и когато обаждащият се опита отново да използва връзката, открива неприятно, че връзката е затворена.

Причината, поради която autoReconnect=true работи и че пулът, тестващ валидността на връзката, работи, е, че вие ​​инструктирате извикващата система да тества връзката за тази ситуация и да опита отново, ако тази ситуация се случи.

Що се отнася до това дали заявката за валидиране ще повлияе на производителността:на теория тя използва връзка, за да направи нещо. На практика нещо е толкова тривиално, че ефектът му е незначителен в контекста на цялата ви система.

[РЕДАКТИРАНЕ]

В този случай Apache DBCP е пулът за връзки, който виси на връзката, но НЕ искате DBCP да затваря връзката след всяко повикване. Целта на пула от връзки е да поддържа връзка готова за следващото обаждане, защото създаването на връзки е скъпо. Обектите за връзка, поддържани от пула, са подкрепени от действителни връзки към базата данни и базата данни е тази, която затваря тази действителна връзка след периода на изчакване на неактивност. Имайте предвид, че времето за изчакване за затваряне на неактивни връзки се конфигурира в базата данни, а не в пула за връзки. Поради това DBCP няма начин да разбере дали връзката е била затворена или не, освен ако действително не се опита да се свърже с нея. Ето защо имате нужда от заявка за валидиране.

За повече информация относно конфигурирането на DBCP вижте страницата за конфигуриране и документите за API .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция MySQL CEILING() – закръгля до най-близкото цяло число

  2. mysql заявка за избор на всички освен нещо

  3. ред на изпълнение в уеб среда

  4. Вземете от базата данни, но само за последните 30 дни

  5. Как да настроите MySQL ред на САМО ЧЕТЕНЕ?