Перенес базу на mysql 5.7
Заметил, что легкие запросы стали наоборот дольше отрабатывать, примерно в 2 раза. Но это не страшно, т.к. все равно очень быстро выполняются.
А вот сложные запросы - стали в 4 раза быстрее отрабатывать.
Спасибо за рекомендацию!
У меня много запросов:
SELECT * FROM table WHERE id IN (1,2,3.......9998,9999)
Если в IN несколько элементов - то отрабатывает мгновенно.
Если в IN несколько сотен элементов то 0.1-0.2 сек. запрос выполняется.
Если в IN несколько тысяч элементов то до 20 сек. запрос выполняется.
Поиск идет по PRIMARY id.
Я так понимаю, что это можно ускорить настройкой сервера, просто не хватает знаний как правильно настроить.
Все таки решил поставить memcache, чтобы ускорить работу. При нескольких запросах в секунду сервер начинает ложиться :(
Но проблема в том, что не ставится мемкеш. Помогите, как понять, где ошибка?
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
Выдает
Could not connect
В ISP maneger включил memcache.
phpinfo();
Выдает: https://yadi.sk/i/fwXkSwiO3MzxPw
Подскажите, куда копать?
На сайте более 20 000 000 страниц, исходя из этого на одну и ту же страницу пользователь будет попадать не так часто. А вот сбивать кеш придется достаточно часто, т.к. данные постоянно добавляться буду в базу.
Согласен, что кеш все равно ускорит. Но тем не менее, каждый новый заход пользователя (после сбивания кеша) будет все равно грузить базу, по этому и хотелось реализовать без кеширования на стороне ВЕБ сервера.
Совершенно верно, SSD.
Что сделал в итоге:
1. Усилил сервер: купил больше оперативки и увеличил количество процессоров.
2. Перешел на PHP 7.1
3. Сервер базы остался прошлой версии, не получилось пока перейти на новую версию.
4. Все таблицы из innoDB перевел в MYISAM.
5. Немного изменил архетиктуру БД. В таблице где выбирал ID организаций по категории - добавил ещё id города.
Теперь запрос выглядит так:
SELECT organization_id FROM `organization_category` WHERE category_id=90 AND city_id=518
Благодаря такому запросу теперь выборка не по 100 000 записей идет, а в большинстве случаев до 5 000 записей.
После увлечения процессоров и обновления до PHP 7.1 сам скрипт (не считая запросы в БД) стал работать до 100 раз быстрее.
Ну и после добавления города в запрос и перевода таблиц в другой движок - БД тоже стала работать намного быстрее.
Как итог: теперь практически все страницы открываются быстро. До 0.2 сек.
Конечно хотелось бы ещё быстрее, т.к. Google Page Speed иногда ругается, что слишком долгий ответ от сервера.
+ осталась проблема с некоторыми категориями в городе Москва. Там при выборке id организаций не до 5000 записей, а около 50 000 записей, такие страницы грузятся 1-3 сек.
Но пока так оставлю. Спасибо всем за советы.
Версия сервера: 5.5.52-MariaDB - MariaDB Server
Версия протокола: 10
Версия PHP: 5.4.16
InnoDB - тип всех таблиц
Попробовал разделить запросы и произвести настройку сервера (параметры mysql).
Сейчас стало намного быстрее, но все равно 1-5 секунды загружается страница, что очень долго.
Вот например если взять такой запрос:
SELECT organization_id FROM `organization_category` WHERE category_id=90
Он бывает выполняется 1 секунду и делает выборку = 100 000 записей из 18 000 000.
При этом индекс category_id стоит.
Ещё, что интересно. Когда выполняю такой запрос в PHPmyadmin - выдает время на выполнение 0.05 секунд примерно.
А когда выполняю в PHP - первый раз выдает 0.5-1 сек, а потом когда берет с кеша уже уже менее 0.05 сек.
В PHP считаю время так:
$start = microtime(TRUE);$res = mysqli_query($this->conn, $query);$timer = microtime(TRUE) - $start;
И вот замечаю, что когда в phpmyadmin выполняю запрос: страница вроде грузиться долго, около 1 сек, а потом выдает что запрос выполнен за 0.05 сек.
Ребят спасибо за помощь.
Может кому пригодится. В итоге сработал такой вариант:
$conn = $app->entityManager->getConnection(); $users = $conn->fetchAll('SELECT * FROM users'); // Например, если нужно делать выборку
Спасибо за ответ. Но все равно не могу разобраться. Не могу подключить DBAL.
Кто хорошо знает symfony - напишите, пожалуйста, в личку.
Помогите за деньги. Буду очень рад.
Знающему человеку тут делов на 20-30 минут, я так полагаю.
Всем спасибо за ответы! Буду изучать)
Спасибо за помощь!