Как эффективно обрабатывать MySQL соединений с PHP - PullRequest
0 голосов
/ 12 июля 2020

Я запускаю приложение, которое взаимодействует с базой данных mysql, используя собственный Mysql PDO, я не использую laravel или какой-либо фреймворк. Таким образом, большинство API-интерфейсов logi c предназначены для извлечения из БД и / или для вставки.

при работе на производстве я могу видеть высокое использование памяти из mysql задач, проверьте ниже:

вывод команды htop

У меня пара вопросов.

  1. Нормально ли такое большое использование памяти? и как лучше всего управлять правильным соединением PHP - MysQL в многопоточном приложении производственного уровня?
  2. Когда выполняется интенсивный запрос (получение исторических данных для построения графика), Использование ЦП увеличивается до 100%, пока выполнение запроса не завершится, оно возвращается к 2-3%. Но в это время система полностью приостановлена.

Я думаю об аппаратных решениях, таких как отделение сервера базы данных от сервера приложений (в настоящее время они оба работают на одном узле) и управление кластер и с использованием узлов только для чтения.

Но я хотел бы знать, есть ли другие варианты и каков наиболее эффективный способ обработки PHP - MySQL подключений.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Обычно innodb_buffer_pool_size устанавливается примерно на 70% от доступной ОЗУ, а MySQL будет занимать это, а также другое необходимое пространство. Сотрите это; у вас всего 1гб оперативной памяти? Buffer_pool должен быть меньшим процентом. Кажется, что текущее значение довольно хорошее.

Вы top показываете, что MySQL использует только 37,2% ОЗУ - многие потоки используют одну и ту же память.

Сортировка по памяти (в top используйте < или >). Что-то еще потребляет кучу ОЗУ.

query_cache_size должно быть равно нулю.

max_connections должно быть, скажем, 10 или 20.

CPU - Вы есть только одно ядро? Так что следует ожидать большого запроса, загружающего ЦП. Также говорится, что ввода-вывода не было проблем. Вы можете показать нам запрос плюс SHOW CREATE TABLE и EXPLAIN SELECT...; возможно, мы сможем подсказать, как это ускорить.

0 голосов
/ 12 июля 2020

Вы также можете проверить написанный запрос, если он полностью оптимизирован, и соединение закрывается, когда не используется.

Также вы можете уменьшить нагрузку на сервер mysql, балансируя некоторую работу до php .

Также обратите внимание на настройки query_cache_size, innodb_io_capacity, innodb_buffer_pool_size и max_connection в вашем my.cnf.

Также иногда может помочь обновление php и кеширование apache сокращение использования ползуна.

https://phoenixnap.com/kb/improve-mysql-performance-tuning-optimization

...