graymore2
@graymore2

Почему запрос медленно выполняется MariaDB?

Всем привет.
Есть сервер VDS на нем 4гига ОЗУ. SSD. Проц 2 ядра. MariaDB 10.11, PHP 7.4.

Есть таблица articles (статьи). Данная таблица имеет всего 2 индекса: На поле id и user_id.
Сама таблица имеет около 20к записей.

Выполняю запрос: SELECT * FROM articles LIMIT 1000 время выполнения ~0.5 сек.
Для меня это очень медленно. Эти 0.5 секунд сильно ощущаются на проде.

Выполняю тот же запрос на другом, более мощном сервере: 8 гигов ОЗУ, SSD, проц 4 ядра. MariaDB 10.11, PHP 7.4.
Запрос выполняется почти моментально: ~0.079сек.

В обоих случаях, при выполнении запроса, нагрузка на проц и память почти отсутствует.
Не могу понять в чем дело, в настройках софта или всё таки в железе ?
  • Вопрос задан
  • 240 просмотров
Пригласить эксперта
Ответы на вопрос 3
mayton2019
@mayton2019
Bigdata Engineer
Звездочка * означает что все найденные документы будут физически переданы по сети на клиента.
Поэтому твои два эксперимента надо расширить. Проверить чем отличались условия с точки зрения
сети. Куда (как далеко) пердавались эти 1000 документов.
Ответ написан
Комментировать
@alexalexes
Очень принципиально по производительности имеет значение количество атрибутов в строке выборки, и есть ли там бинарные типы данных или длинные строки - это именно то, что будет просаживать производительность при попытке сделать большую выборку.
Если в реальной системе из этой таблицы выбираются сначала "легкие" атрибуты в тысячи записей, а потом по конкретным записям дозапрашиваются "тяжелые" атрибуты (бинарные данные, длинные строки).
То синтетический тест:
SELECT * FROM articles LIMIT 1000
к реальной жизни не будет иметь никакого отношения, потому, что вы выбираете все атрибуты (*), при наличии "тяжелых" атрибутов, в здравом уме никто не будет делать такие большие выборки. Разве что, если это не импорт/экспорт - но это сам по себе процесс затяжной.
Ответ написан
Комментировать
graymore2
@graymore2 Автор вопроса
Всем спасибо за ответы! Проблема была решена снятием ограничителей MariaDB в my.cnf, а именно: max_connections и max_allowed_packet были увеличены во много раз. Теперь запросы выполняются одинаково моментально на обоих серверах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы