
Я перевел производственный сервер на OpenVZ, что я уже делал много раз, но на этот раз это повлияло на поведение транзакций некоторых операций.
Все мои таблицы innoDB. Я не менял никаких параметров по сравнению с их исходным состоянием.
Определенные запросы к JBoss приводят к транзакциям, которые занимают ровно 10 секунд для завершения, но только с перерывами. Обычно они молниеносны.
Я не могу найти ничего в my.cnf или в переменных Mysql, что соответствует этой 10-секундной задержке. Я вижу, как транзакции появляются в Innotop, но если я переключаюсь в режим Q - query, я не могу увидеть полный запрос, нажав f.
Кажется, нет никакого отката, потому что даже при задержке функциональность не нарушается. У JBoss тайм-аут транзакции составляет 300 с согласно стандартной конфигурации.
Я не вижу превышения лимитов в /proc/user_beancounters (OpenVZ отслеживает, когда виртуальные машины превышают свои квоты ресурсов, для тех, кто не знает, что это такое).
Я изо всех сил пытаюсь определить, откуда взялось это узкое место.
решение1
Хорошо, теперь я могу ответить.
Я прочитал о том, как Mysql обрабатывает соединения, и оказалось, что он, по-видимому, всегда пытается выполнить обратный поиск, если только вы не скажете ему этого не делать, и при попытке выполнить эту попытку истекает время ожидания через 10 секунд.
Я не знаю, почему в моей сети периодически возникали тайм-ауты, но добавив:
пропустить-имя-разрешить
в my.cnf, проблема исчезла.
На самом деле, мне это не совсем понятно, поскольку Jboss использует пул соединений, который должен оставаться активным из-за большого объема регулярной активности, но неважно.