Днес уебсайтът отново е блокиран и се намира голям брой сън
Причини за съня:
1 Клиентската програма не извика mysql_close() преди да излезе.
2 Клиентът е спал повече от wait_timeout или interactive_timeout секунди, без да отправя никакви заявки към сървъра.
3 Клиентската програма приключи рязко по средата на трансфер на данни
Ако броят на спящите процеси в един и същи период е твърде голям и общият брой връзки в други състояния надвишава стойността max_connection, тогава MySQL вече не може да обработва никакви заявки освен root потребителя, не може да установи връзка с която и да е заявка или се задържа директно
Решение:
1. Първо, проверете дали вашата програма използва метода pconnect, и второ, проверете дали mysql_close() се извиква навреме преди страницата да бъде изпълнена. Опитайте се да не използвате метода pconnect, т.е. използвайте mysql_connect. Когато програмата се изпълни, mysql_close трябва да се извика изрично
2. Добавете wait_timeout и interactive_timeout към my.cnf, задайте стойността по-малка, по подразбиране стойността wait_timeout е 8 часа, можете да я промените на 1 час или половин час. По този начин mySQL ще унищожи мъртвите връзки по-бързо. Предотвратете общия брой връзки да надвишава стойността на max_connection.
wait_timeout твърде голям ще доведе до освобождаване на голям брой SLEEP процеси в MySQL навреме, което забавя производителността на системата, но ако настройките са твърде малки, може да се сблъскат с проблеми като "MySQL е изчезнал".
Настройте стойността на max_connection на по-висока стойност, но това очевидно не е подходящо – колкото повече връзки имате, толкова повече напрежение оказва сървъра ви. Всъщност тези връзки са излишни и прекратяването им възможно най-скоро е най-добрата политика.
3. Анализирайте SQL заявката на системата стъпка по стъпка, намерете SQL, който е твърде бавен, и го оптимизирайте
1)interactive_timeout: Значение на параметър: Броят секунди, през които сървърът чака дадена дейност, преди да изключи интерактивната връзка. Интерактивен клиент се дефинира като клиент, който използва CLIENT_INTERACTIVE опция в mysql_real_connect(). Параметрите по подразбиране: 28800 секунди (8 часа)
(2)wait_timeout: Значение на параметър: Броят секунди, през които сървърът чака за активност преди да затвори неинтерактивната връзка. Когато нишката започне, стойността на сесийния wait_timeout се инициализира въз основа на глобалната wait_timeout или глобалната стойност на interactive_timeout, в зависимост от типа клиент (дефиниран CLIENT_INTERACTIVE опциите за свързване на mysql_real_connect()). Параметрите по подразбиране: 28800 секунди (8 часа)
Съществува горна граница за максималния брой връзки, които MySQL Server може да поддържа, тъй като всяка връзка се установява и използва памет, затова очакваме клиентите да прекъснат връзката и да освободят заетата памет след свързване с MySQL Server, за да изпълнят съответната операция. Ако вашият MySQL Server има голям брой неактивни връзки, не само че ще изразходва памет напразно, но ако връзките продължават да се натрупват и отварят, в крайна сметка ще достигнат максималния брой връзки в MySQL Server, който ще отчете грешката "твърде много връзки". Задаването на стойността на wait_timeout трябва да се оценява според функционирането на системата. След като системата работи известно време, можете да проверите статуса на връзката на текущата система чрез командата show processlist; ако откриете голям брой свързани процеси в състояние на сън, това означава, че параметрите са твърде големи и можете да направите подходящи корекции за по-малки корекции.
SQL команда:
Този метод на модификация е вСлед рестартиране на mysql услугата, тя ще бъде невалидна, затова е най-добре да конфигурирате тези две свойства в конфигурационния файл на mysql.
Модифицирай my.cnf файла под Linux:
|