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

mysql TIME_WAIT; проблем с твърде много връзки

Ако клиент се свърже с MySQL-сървър, той обикновено отваря локален порт, например:

 localhost:12345 -> mysqlserver:3306

Ако клиентът затвори връзката, клиентът получава TIME_WAIT. Поради TCP маршрутизиране, пакет може да пристигне със закъснение на временния порт. Връзката в TIME_WAIT просто изхвърля тези пакети. Без TIME_WAIT локалният порт може да се използва повторно за друга връзка и да получава пакети от предишна връзка.

При много често приложение в мрежата, което отваря mysql-връзка на заявка, се очаква голямо количество TIME_WAIT връзки. Няма нищо лошо в това.

Могат да възникнат проблеми, ако обхватът на вашия локален порт е твърде нисък, така че вече не можете да отваряте изходящи връзки. Обичайното изчакване е настроено на 60 секунди. Така че вече може да възникне проблем при повече от 400 заявки в секунда при ниски диапазони.

Проверете:

За да проверите количеството TIME_WAIT, можете да използвате следната команда:

$ cat /proc/net/sockstat
sockets: used 341
TCP: inuse 12 orphan 0 tw 33365 alloc 23 mem 16
UDP: inuse 9 mem 2
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

Стойността след "tw", в този случай 33365, показва количеството TIME_WAIT.

Решения:

а. TIME_WAIT настройка (примери за базирана на Linux OS):

Намалете времето за изчакване за TIME_WAIT:

# small values are ok, if your mysql server is in the same local network
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout

Увеличете обхвата на портовете за локални портове:

# check, what you highest listening ports are, before setting this
echo 15000 65000 > /proc/sys/net/ipv4/ip_local_port_range

Настройките /proc/sys/net/ipv4/tcp_tw_recycle и /proc/sys/net/ipv4/tcp_tw_reuse може и да е интересно. (Но ние изпитахме странни странични ефекти с тези настройки, така че по-добре ги избягвайте. Повече информация в този отговор )

б. Постоянни връзки

Някои езици за програмиране и библиотеки поддържат постоянни връзки. Друго решение може да бъде използването на локално инсталиран прокси като "ProxySQL". Това намалява количеството нови и затворени връзки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да накарам електронните таблици на Google Drive да действат като MySQL база данни?

  2. Грешка в MySQL:mysql_fetch_assoc() очаква параметър 1 да бъде ресурс

  3. Необходимо ли е да се използва mysql_real_escape_string(), когато magic_quotes_gpc е включен?

  4. Изберете ден от седмицата от дата

  5. Как да създадете глобален конфигурационен файл?