Dimanych

Рейтинг
155
Регистрация
05.06.2007

danforth, одно мне точно понятно, запрос ужасен и это проблема сайта)

Видимо логика обработки на deb8 mariadb 10.0 всё таки была немного другая или ещё что-то повлияло - ведь тормоза ранее не ощущались.

Всем спасибо за помощь, наверное дальше уже не стоит мусолить эту тему.

Dram, Отличия в консоле или с сайта есть, смотря какой запрос, но дело не в консоле, а дело в том какую логику выбирает база в конечном итоге. Через консоль также можно получить долгое и быстрое выполнение всего лишь убрав или добавив limit 1 (казалось бы это ничего измениться не должно, но есть отличия или 2 сек или 0.1)

Про индекс изначально всё ясно, но это не интересно. Вот на вскидку, база 25мб, всего 500к записей, с чего бы ради базе думать 2 секунды. При этом есть запросы которые также проходят все 500к записей и при этом без кеша выполняются за 0.1сек. Видимо вы пропустили этот пост:

/ru/forum/comment/15566054

danforth, Сейчас скину.

Dram, линк отправил

iHead, а вот это уже достаточно интересно, спасибо, попробую.

telemad, всё понял, у вас mariadb 5.5.56, с 10й версии вроде нет совместимости уже.

Волк загнанный в угол)

После первого перехода на MariaDB (из-за её фишечек), это было ещё более года назад, я тоже был разочарован, очень много проблем вылезло, пришлось тюнить много параметров чтобы база не висла и не падала , например open_files_limit пришлось довести до 32к, в то время как mysql отлично работал с 4к, а также значительное увеличение параметров innodb. (бывали полные локи базы по непонятным причинам) И всё вроде бы со временем стало хорошо на 10.0, но вот обновление на новую ось и 10.1 опять падение производительности доп тормаза, пришлось некоторые таблицы innodb перезалить в базу, так как после upgrade база на них падала. На одном сервере пришлось полностью перезалить весь дамп в чистую базу, с разросшимся файлом innodb пошло что-то не так, хотя уже давно настроено сохранение в отдельные файлики.

То что myisam летает на mysql и постоянно с проблемами в mariadb это я давно знаю, но это как правило все старые сайты, так как новые движки все переходят на innodb. Я также сравнивал переход с myisam на innodb, скорость обработки заметно падает для всех видов запросов, но нет, абсолютно везде пишут ай-я-яй, использовать только innodb - для очень нагруженных сайтов только он, поэтому жертвуем скоростью.

Сам задумываюсь о возвращении на MySQL, но на сколько я знаю не так просто будет вернуться, совместимости в обратную сторону уже нет и дамп всей базы просто не зальётся. Как вы вернулись на MySQL ?

И так, чтобы подвести итог, у Mobiaaa вышли аналогичные результаты хоть и быстрее моих, с limit 1 выполняется намного дольше, даже на марии 10.0 (логика выполнения просто другая) От сюда я делаю вывод что проблема не в конфигурации моего сервера, и возможно с переходом на новую ось и базу данных тормоза просто стали более заметными. Так же есть мысли что новое ядро и патчи на meltdown spectre тоже делают своё дело. Кто его знает чем теперь занимается процессор)) Это может быть причиной того что база в целом работает медленнее?

PS> я также переносил личные крупные проекты с деб8 на сервера с деб9 (такой же конфиг), и заметил что база разгребает запросы где то на 20-30% медленнее.

Кто нибудь замечал падение производительности после обновления ОС?

Ситуация развернулась ещё интереснее, всего лишь добавив в запрос limit 1, этот запрос теперь и через консоль висит...


MariaDB [(none)]> SELECT SQL_NO_CACHE count(*) FROM table WHERE user_name="admin" GROUP BY user_id;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.11 sec)

MariaDB [(none)]> SELECT SQL_NO_CACHE count(*) FROM table WHERE user_name="admin" GROUP BY user_id LIMIT 1;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (1.86 sec)

Т.е. дело тут вовсе не в PHP и не в способе подключения и даже не в конфиге базы.

Подозреваю что это какой-то баг базы данных, так как нагуглил много похожих ситуаций с вечными Sending data даже при небольших таблицах. Хочу заметить что в течении этих 2х секунд, процесс базы нагружен на 100%, а диск без нагрузки. Также заметил что профайлинг при быстром выполнении выдаёт create tmp table, при тормозящем этой строки нет. Пробовал установить MariaDB 10.2 и 10.3, ситуация не меняется. Казалось бы добавление LIMIT 1 должно ускорить процесс, но нет, тут просто практически висит база, а если параллельно 5 таких запросов, то вижу нагрузку 500%.

PS> Могу через личку скинуть линк на дамп реальной таблицы 25мб, если кто-то желает запустить у себя ради эксперимента.

Повторюсь ещё раз, добавление индекса решает проблему, но такое решение не подходит, сайты клиентские и хочется узнать причину тормазов. Самое интересное что запрос который тормазит в phpMyadmin - не тормазит через консоль, но добавив limit 1 он начинает тоже тормазить через консоль.

Профилирование показало задержку только в этом:

Array

(

[Status] => Sending data

[Duration] => 1.736824

)

Да, на сайтах как обычно идёт подключение через localhost.

Однако пока не понятно, если возвращаемый результат должен быть всего лишь 1 число, то почему так долго, ощущение что он передаёт всю эту таблицу на 25мб с 500к строк. 😒

Параметры эти увеличивал, хоть 1гб выставляй, на время не влияет.

Вот в консоли результат запроса вылетает мгновенно, и это точно не кеш, переменные разные пробовал:

MariaDB [(none)]> SELECT SQL_NO_CACHE count(*) FROM table WHERE user_name="admin" GROUP BY user_id;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.11 sec)

Тоже самое в phpMyAdmin:

Отображение строк 0 - 0 (1 всего, Запрос занял 1.7214 сек.)
SELECT SQL_NO_CACHE count(*) AS cnt FROM voc_quiz_top WHERE user_name="admin" GROUP BY user_id

Ещё раз повторюсь, это не мой сайт, а клиентский и оптимизировать SQL я не могу.

Больше похоже на проблему PHP + MariaDB, давно на MySQL с debian 8 таких проблем не замечали. Почему и пишу в администрирование.

Сейчас: Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Таблица myisam, индекс есть только на user_id, и это не моя таблица, а из одной CMS, т.е. да, можно придумать более оптимизированный запрос, но мой вопрос именно в том, почему тормозит только через PHP. Напрямую через mysql клиент запрос выполняется очень быстро.

Всего: 830