у меня есть AWS EC2
экземпляр с DUAL-CORE
а также 4 GB Memory
, Я настроил мой Apache2 HTTP server
Бег PHP "7.0.30"
а также MySQL "Ver 14.14 Distrib 5.7.22"
,
Существуют различные устройства, которые отправляют GET/POST
просьба к моему Http server
, Каждое сообщение и получить запрос с помощью запросов выбора и обновления.
Щас вокруг 200 устройств которые бьют меня Http server
одновременно и ударяя SQL queries
выбрать и обновить вместе. Эти хиты содержат данные в JSON
форматы.
Проблема в том, что мой сервер MYSQL стал слишком медленным. Сбор данных по отдельным запросам и загрузка страниц занимает много времени.
От phpMyAdmin
Я вижу ряд спящих процессов в статусе для запросов. Я также настроил различные параметры моего SQL server
но нет результата.
Одним из основных запросов, который требует времени, является запрос на обновление, который обновляет длинные текстовые данные в таблице и поступает с устройства через каждые 60 секунд одновременно, и мы видим его процессы пустыми после длительного периода времени в состоянии сервера MYSQL.
Есть ли способ оптимизировать его с помощью параметров SQL, чтобы сервер MYSQL работал быстро даже при тысячах запросов с несколькими подключениями, которые обновляют столбец таблицы с длинным текстом?
Большинство глобальных переменных имеют значения по умолчанию. Я также попытался изменить значения переменных различных глобальных, но это не дало никакого результата.
Как я могу уменьшить эту медленную обработку запросов?
П.С .: Я считаю, что проблема связана с запросами на обновление. Я настроил запросы Select, и они, кажется, в порядке. Но для запросов UPDATE я вижу до 12 секунд на вкладке «Процессы» в phpMyAdmin.
Я добавил ссылку на изображение, имеющее эту проблему
(Здесь вы можете увидеть спящие даже 13 секунд, все в запросах ОБНОВЛЕНИЯ):
Вот PasteBin для запроса операции UPDATE:
https://pastebin.com/kyUnkJmz
Это ~ 25 КБ для JSON! (Может быть, 22 КБ, если обратный слеш исчезает.) И 40 вставок в секунду, но чаще каждые 2 минуты.
Я бы хотел увидеть SHOW CREATE TABLE
, но я все еще могу сделать некоторые комментарии.
BLOB
не TEXT
,autocommit=ON
), то есть дополнительная запись — для целостности транзакции. Это можно отключить (компромисс между скоростью и безопасностью): innodb_flush_log_at_trx_commit = 2
, Если вы не возражаете, рискуя данными за 1 секунду, это может быть простым решением.Больше
usermac
таким образом UPDATE
не нужно пролистывать всю таблицу в поисках нужной строки. Вы могли бы бросить id
и добавить PRIMARY KEY(usermac)
,Других решений пока нет …