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, этот запрос теперь и через консоль висит...
Т.е. дело тут вовсе не в 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гб выставляй, на время не влияет.
Вот в консоли результат запроса вылетает мгновенно, и это точно не кеш, переменные разные пробовал:
Тоже самое в phpMyAdmin:
Ещё раз повторюсь, это не мой сайт, а клиентский и оптимизировать SQL я не могу.
Больше похоже на проблему PHP + MariaDB, давно на MySQL с debian 8 таких проблем не замечали. Почему и пишу в администрирование.
Сейчас: Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
Таблица myisam, индекс есть только на user_id, и это не моя таблица, а из одной CMS, т.е. да, можно придумать более оптимизированный запрос, но мой вопрос именно в том, почему тормозит только через PHP. Напрямую через mysql клиент запрос выполняется очень быстро.