Блог на SuperHosting.BG

30май/12

4 съвета за справяне с max_user_connections

max_user_connectionsВ тази публикация от рубриката “Съвети от support- a” се надяваме да ви отговорим максимално ясно на въпросите: “...already has more than 'max_user_connections' … какво е и защо?” Колегите от техническия екип на нашата хостинг компания споделят в следващите редове четири основни насоки, които ще ви помогнат да оптимизирате работата на сайта си или по-точно определени аспекти при използването на базите данни към него. Приятно четене и разбира се, коментарите са отворени, за да допълните темата с вашите съвети, въпроси и/или ноу-хау! :)

Понякога при динамични сайтове, използващи бази данни, е възможно да се появи следното съобщение:

mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: User cpanelname_mysqluser already has more than 'max_user_connections' active connections in /home/cpanelname/public_html/file.php

Причината за появата му се дължи на достигнат максимален брой конкурентни MySQL конекции за даден MySQL потребител т.е. максималният брой връзки към базата данни са запълнени. Максималният брой конкурентни MySQL връзки, които може да има определен MySQL потребител е настройка на MySQL сървъра. Тази настройка е глобална за сървъра и при услугата споделен хостинг е 30. Посочената стойност е съобразена така, че да се гарантира стабилност на услугата. Тя е напълно достатъчна за нормалната работа на над 99% от приложенията/сайтовете. Има различни случаи, обаче, в които връзките биха могли да се запълнят, като едни от най-често срещаните са следните:

1. Изтегляне (зареждане) на външни ресурси (rss емисии, валутни курсове, прогнози за времето, проверка за нови версии на системи и др.) в реално време

В случай, че източникът, от който се изтегля ресурса, е временно недостъпен и/или има технически проблем, вашият сайт/приложение ще изчаква да получи отговор, докато не изтече стандартния "time out" на връзката. Ако за всеки посетител на вашия сайт се изтегля информация от външен източник, то всяка връзка към базата данни, отворена преди да изтеглите ресурса, ще бъде активна, докато се чака отговора от външния източник. Ако сайта/приложението ви изтеглят външни ресурси в реално време, то най-добре е те да бъдат изключени и да се провери дали отсрещния сървър, от който се изтегля ресурса, е активен.

Съвет от support- a:

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

2. Бавни заявки към базата данни

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

Съвет от support- a:

При разработването на сайтовете обърнете внимание на заявките към базата данни! Неоптималните заявки могат да доведат до допълнително натоварване и забавяне на сайта.

3. PHP скрипт не затваря връзката с базата данни

Възможно е php скрипт поради някаква причина да не затваря връзката към базата данни.

Съвет от support- a:

Добра практика е след като бъде отворена връзка към базата данни и след приключване на действията със самата база данни (свързване, извличане на данни, добавяне на данни и т.н.), то връзката да бъде затворена. За сайтове на php може да се ползва mysql_close().

4. Ползване на един и същ MySQL потребител в различните приложения в акаунта

Броят конкурентни MySQL връзки за даден MySQL потребител може да бъде достигнат, ако имате повече от едно приложение/сайт и за всички тях използвате един и същ MySQL потребител.

Съвет от support- a:

Добра практика е да се използват отделни MySQL потребители за всяка база данни.

Увеличаването на броя връзки не е подходящо решение, ако някоя от описаните по-горе причини е налице, защото в даден момент (понякога в рамките на минути) конекциите ще бъдат отново запълнени... Разбира се има случаи, в които са необходими повече на брой конкурентни връзки към MySQL сървъра. Тогава е удачно преминаването към друг тип хостинг решение, а именно виртуален сървър (VPS), Cloud* или нает сървър.

* Ако искате да тествате как работят приложенията/сайтовете ви на новата ни Cloud услуга, изпратете имейл на колегите от Техническа поддръжка и ще ви предоставим данни за достъп до Cloud акаунт. Услугата има много интересни функционалности, опции за улеснено управление на използваните ресурси и една много важна характеристика – плащате толкова, колкото ползвате! :) Съвсем скоро услугата ще бъде достъпна и за поръчка през нашия сайт, като в момента нашите клиенти, заявили желание, вече я тестват. Всички те, а надяваме се и вие, :) ни давате полезна обратна връзка, за да можем да ви предложим максимално функционална, атрактивна и лесна за ползване услуга, с което да улесним вашата работа! :)

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

Коментари (2) Връзки за обратно следене (2)
  1. 1

    Благодаря. Впрочем имате ли наблюдения дали този проблем се появява по-често в joomla или в Drupal?

    • 1.1

      Здравейте, Кирил! Не можем да се ангажираме с подобна статистика, тъй като много зависи от самия начин, по който е реализиран сайта, а не толкова от това дали използва Joomla, Drupal или друга CMS система.

  2. 2

    [...] 1. Некоректни данни за връзка към базата данни 2. Достигнат максимален брой паралелни връзки към MySQL [...]

  3. 3

    [...] 2. Достигнат максимален брой паралелни връзки към MySQL [...]


Оставете коментар

Notify me of followup comments via e-mail. You can also subscribe without commenting.