Вы должны понимать, что вычисление MySQLtuner "Max MySQL Memory" - полная чушь.
Это основано на теоретическом максимуме - который возможен, только если вы максимизируете max_connections
, а затем каждое соединение выполняетсязапрос в точно в тот же момент, и каждый из этих запросов использует максимально возможные буферы сортировки, буферы чтения и буферы соединения.Реально, это никогда не произойдет на реальном сервере.
Когда я запускаю MySQLTuner на большинстве поддерживаемых серверов баз данных, максимальный объем памяти MySQL сообщается как в сотни раз больше , чемфактическая физическая память на сервере.Это не проблема, потому что это теоретический максимум, которого никогда не будет на самом деле.
Если вы запустите SHOW PROCESSLIST
на своем сервере базы данных, даже если все 150 или 250 потоков подключены, вы увидите только 6-8 потоков выполняют запрос, в то время как большинство других потоков находятся в состоянии «Sleeping».
Это как если бы вы вошли на сервер с ssh
и ваш терминал готов к работе по приглашению оболочки.У вас есть какая-нибудь команда?Нет. Ваша оболочка бездействует.Но вы все еще подключены .
То же самое относится и к MySQL.Ваше приложение может быть подключено к базе данных, но ваше приложение еще не выполняет запрос.И даже когда он выполняет запрос, он, вероятно, не будет использовать максимально допустимые ресурсы.А затем он быстро завершится и снова вернет соединение в состояние ожидания.
В любой данный момент число подключенных потоков может быть большим, даже если эти соединения, на самом деле выполняющие запрос, невелики.Вы можете сравнить:
mysql> show global status like 'Threads%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 510 |
| Threads_running | 13 |
+-------------------+-------+
Выше приведены типичные числа из занятого производственного экземпляра MySQL.По моему опыту, соотношение потоков, подключенных к потокам, работает в диапазоне от 10: 1 до 100: 1.
Но вычисления MySQLTuner не реалистичны - они предполагают, что отношение потоков, подключенных к потокам, составляет 1: 1.
Таким образом, память, которую вы выделяете для MySQL, не имеет ничего общего с max_connections
, который вы разрешаете.
Вы можете обнаружить, что увеличение некоторых параметров настройки полезно для производительности, но оно имеетбольше о размере ваших данных и типах запросов, которые вы выполняете к этим данным.
Я рекомендую прочитать https://www.percona.com/blog/2016/10/12/mysql-5-7-performance-tuning-immediately-after-installation/
Или, если вы хотите углубиться в изучение, прочитайте: Высокопроизводительный MySQL, 3-е издание