![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
На сервере MySQL жрёт 99% CPU. Как мне оптимизировать скрипты, чтобы меньше жрала, какие есть способы.
|
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 7 Всего: 140 |
m1kle, запросы в студию
-------------------- Amazing ![]() |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
MoLeX, Их куча. В основном в программах, которые выполняются каждую минуту автоматически.
Например: $q_zav=mysql_query("select * from `zavodi`"); $zav=mysql_num_rows($q_zav); или $sel_p1_precomp=mysql_query("select * from `inv` WHERE `stat`='1' and `name`='$p1[4]'"); $p1_precomp=mysql_fetch_array($sel_p1_precomp); |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 7 Всего: 140 |
тогда может кешировать результат?
-------------------- Amazing ![]() |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
MoLeX, а как это? Это сильно уменьшит CPU?
|
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 7 Всего: 140 |
все зависит от того сколько данных в БД. но в основном да...
-------------------- Amazing ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
может, начать поиск узкого места?
или, изучив логи долгих запросов, определил, что узкое место - конкретные запросы? тогда надо колупать конкретные запросы. оптимизация всего - штука не только бессмысленная, но и вредная. можно наоптимизировать, что станет только хуже. т.е. на сервере - только MySQL крутится? ни apache, ни РНР? |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
skyboy, есть Apache и PHP.
Информации около 50 Мб. Просто мне сказали, что стоит оптимизировать код, но я не знаю, как это сделать. Это сообщение отредактировал(а) m1kle - 21.5.2008, 16:11 |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 1 Всего: 32 |
m1kle, делается это просто.
Сначала надо узнать, какой запрос оптимизировать. Внимательно читаем предыдущее предложение. оно в этом топике самое важное. Как и во всех вопросах по оптимизации. Оптимизировать надо не запросы вообще, а те, которые реально тормозят. замеряешь, какие запросы жрут больше всего времени.Для этого надо всего лишь поставить пару операторов microtime до и после каждого запроса и писать разницу в лог или на экран. После того, как нашел самые тормозящие - пытаешься понять их неоптимальность или исправить. Если не можешь самостоятельно - приходишь с этими запросами сюда.
Это можно оптимизировать и без замеров. Оторвав предварительно руки. $q_zav=mysql_query("select count(*) from `zavodi`"); |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
(продолжая тему избирательной оптимизации)....да и вообще не в БД может быть дело. сокеты с большим timeout по дохлым адресам, вызовы сомнительной надежности программ через system.... да, мало ли ещё чего!
вобщем, первая задача - найти узкое место. потом уже разберемся, как оптимирзировать. |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Попробую..
|
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Попробовал
$q_zav=mysql_query("select count(*) from `zavodi`"); Он почему считает только одну надпись. А работать стал действительно быстрее на 1 секунду. |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 3 Всего: 42 |
m1kle,
Слово профайлинг тебе что-то говорит? Если нет, то прочитай эту заметку http://habrahabr.ru/blog/php/37834.html И попробуй сделать то, что там описано. Будут вопросы - задавай. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
он и должен. ты дал код, по которому следует, что выборка всех записей таблицы делается только для того, чтоб получить количество записей вот тебе Feldmarschall и привел пример оптимизации: переделал запрос так, чтоб запрос сразу возвращал только количество(одна запись), а не все подряд, только для подсчета. если тебе надо не только количество, но и данные, то, естественно, такая оптимизация не подходит. но, черт возьми, только ты знаешь, что тебе точно надо. соотвественно, оптимизация - на твоих плечах. P.S. Ну, как? Провел поиск узкого места? или просто на глаз определил, что "так работает быстрее"? |
|||
|
||||
m1kle |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
skyboy, Потихоньку разбираюсь. Мне данные не нужны, только количество. Что-то я непонимаю.
Fortop, профайлинг ничего не говорит, обязательно прочитаю статью. Ещё есть вопрос про оптимизацию. Правда-ли, что " *Селект из базы один *Селект из базы два *Селект из базы один" Будет больше тормозить, чем " *Селект из базы один *Селект из базы один *Селект из базы два " Т.е. лучше сначало работать с одной таблицей, потом с другой, чем сначало с одной, потом со второй, а потом опять с первой. |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |