2015-11-27 1 views
6

У меня есть MySQL 5.6.27-0ubuntu0.14.04.1, который запускается на экземпляре Google Compute с 4-мя процессорами.Увеличение MySQL-процессора, когда у меня есть Спящее соединение, которое остается открытым

Я заметил, что если у меня есть соединение, которое будет спать в течение длительного времени, тогда центральный процессор сервера будет увеличиваться линейным образом. Я не понимаю, почему? Если я убью сон, тогда CPU просто вернется к правильному использованию.

Так резюме я следующее: я замечаю процессор моего экземпляра увеличивается: enter image description here

Затем я проверяю PROCESSLIST на моем сервере

mysql> show processlist 
-> ; 
+-------+--------+-------------------+----------------+---------+------+-------+------------------+ 
| Id | User | Host    | db    | Command | Time | State | Info    | 
+-------+--------+-------------------+----------------+---------+------+-------+------------------+ 
| 85949 | nafora | paper-eee-2:58461 | state_recorder | Sleep | 1300 |  | NULL    | 
| 85956 | nafora | paper-eee-2:58568 | state_recorder | Sleep | 64 |  | NULL    | 
| 85959 | root | localhost   | NULL   | Query | 0 | init | show processlist | 
+-------+--------+-------------------+----------------+---------+------+-------+------------------+ 

Вы можете видеть, что я только что 2, что Сон и один здесь с 1300 секунд (потому что у меня есть процесс, который застрял при открытии соединения)

Так что я убиваю соединение 85949, а CPU просто fa вниз. enter image description here

Может кто-нибудь объяснить мне, почему одно спальное соединение может повлиять на мою базу данных.

Спасибо.

+0

Странный выпуск. Не могли бы вы добавить немного больше информации о системе? Версия MySQL? Возможно, InnoDB или MyISAM? В случае выхода InnoDB «SHOW ENGINE INNODB STATUS»? Также может быть полезен способный мониторинг: http://dev.mysql.com/doc/refman/5.0/en/innodb-monitors.html. Какой-то фон на соединениях? Они много читали/писали, прежде чем простаивать. Они автоматизированы? и т. д. –

+1

Вы должны попытаться выяснить, что делает этот процесс. Возможно, эта статья помогает: https://www.percona.com/blog/2007/02/08/debugging-sleeping-connections-with-mysql/ – fancyPants

ответ

2

Некоторые незащищенные соединения или длительные медленные запросы могут привести к такому поведению. Вы можете ограничить незаблокированные соединения, настроив глобальную переменную wait_timeout как разумное значение, а также установить другую связанную переменную interactive_timeout с максимальной эффективностью.

Приложениям, использующим пул соединений (Java, .NET и т. Д.), Необходимо настроить wait_timeout для соответствия их настройкам пула соединений. По умолчанию 8 часов (wait_timeout = 28800) хорошо работает с правильно настроенными пулами подключений.

Настройте wait_timeout, чтобы быть немного длиннее ожидаемого срока службы соединения пула приложений. Это хорошая проверка безопасности. Также профилируйте запросы, чтобы наблюдать за работой экземпляра MySQL, вы можете избежать I/O bottlenecks.