@vitalyg

Переносить ли Mysql?

Есть сервер. 3000 уников ежедневно. Но вот в чем беда, стал тормозить сервак.
Есть возможность перетащить на другой сервак Mysql.
Я конечно понимаю что можно "улучшать говнокод", можно "тюнить" базу ...
Но сил уже нет смотреть как всё тормозит.
Основной сервер: 8 ядрыв, 50 гб оперы, RAID-1.
Второй сервер: 4 ядры, 4 гб оперы, SSD.
Гонял по базе на ССД - прирост в половину (в 2 раза быстрее!), но есть одно но - сервер без вебморды, никто в его не обращается.
На основном серваке: 40-50 запросов\сек
На втором: 0...
Кто сподмогёт? :)
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 3
@Vasily_Pechersky
Системщик с опытом
Однозначно только тюнить !
Притом не базу, а конфиг Mysql ! Там, к примеру, есть параметры кэша, для результата Join`ов.
Прогоните mysqltuner.
Если есть доступ к коду / это CMS с поддержкой memcached или подобной системы - неприменно воспользуйтесь / модифицируйте код.
Посмотрите сколько памяти использует непосредственно MySqld. По умолчанию он всех приведенных 50 гб и не думает использовать, ворочаясь в несчасных 2 гб и убивая Проц и Диск !
В вашем же вопросе Как ускорить работу Percona-server(mysql)? вам дали дельные советы.

Удачи !
Ответ написан
Комментировать
@AlikDex
SELECT много много полей price AS prize, IF(id, 1, 0) AS rice_exists ,manager,idh,himg_src
FROM `vahvah` AS `h`
JOIN (
    SELECT id
    FROM `vahvah`
    WHERE `city`=777 AND `tus` = "active" AND `blocked` = 0
        AND (`rice` IS NOT NULL AND `rice` > 0)
) AS h2 USING (id)
LEFT JOIN `zvezdi` AS `co` ON `co`.`co`=`h`.`h`
LEFT JOIN `nebo` AS `ci` ON `ci`.`ci`=`h`.`h`
LEFT JOIN `hom` hm ON hm.l=h.l_id
LEFT JOIN `hots` si ON si.hot=h.hot_id
LEFT JOIN `hoions` exh ON exh.l=h.l_id
LEFT JOIN `horts` air ON air.l=h.l_id
LEFT JOIN `howays` ra ON ra.h=h.l_id
LEFT JOIN `geo_jects` hge ON hge.id=h.h_id
LEFT JOIN `prices` `p` ON `h`.`hotel_id`=`p`.`l_id` AND p.`from`=12.12.2999 AND p.`to`=12.12.2999

Предлагаю тюнингнуть запрос немного, без изменений архитектуры бд. Смысл вот в чем: сначала выбираем нужные айдишники по условию (с индексами), затем джойним остальное к только найденым. В вашем примере джойн будет по всем полям, пока не найдет нужное. условие. Т.е. если данные берутся с главной таблицы ("vahvah") из конца то произойдет проверка всей таблицы вместе с джойнами, а это 9 вложенных циклов мускуля на каждую запись.

`tus` = "active" я бы сделал численным (или булевым, если статус бинарный) параметром, а не строковым. Но это уже мелкий тюнинг самой бд врятли сильно поможет, но все же =)

П.С.
Это примерный набросок, может не работать, но мысль думаю понятна.
Ответ написан
@LiguidCool
Лучше тюнингуйте свой говнокод, ибо на такое количество уников производительности должно хватать (если там конечно не 8 ядерный селерон и Рейд на IDE дисках).
Почему не новый серв? Да потому что база еще чутка вырастет и все опять "умрет".
Ответ написан
Ваш ответ на вопрос

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

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