| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > MySQL грузит процессор на все 100% |
| Автор: nIkTo 4.8.2010, 14:38 | ||||
| Доброго времени суток. Подскажите как уменьшить нагрузку на процессор. Раз в минуту скрипт делает выборку заданий :
как только MySQL начинает обрабатывать этот запрос сервер застывает секунд на 5, такие провисания не приемлемы, в таблице около 30милионов записей. Структура таблицы:
Подскажите как оптимизировать мускул чтобы он имел так сказать планку и выше не прыгал. Может что-нибудь в конфигах MySQL сервера оптимизировать ? Буду благодарен за любые идеи. Pentium® 4 CPU 2.40GHz MySQL 5.0.67 |
| Автор: skyboy 4.8.2010, 15:00 |
| что показывает explain? и, может, есть смысл проиндексировать поле status? |
| Автор: nIkTo 4.8.2010, 15:43 | ||
skyboy, explain говорит:
skyboy, сколько на это времени примерно уйдёт? Подозреваю что не мало. |
| Автор: nIkTo 4.8.2010, 18:14 | ||
прошло 2 часа, поле ещё индексируется =) Что быстрее бы отрабатывало (выборка из базы), если для поля status использовать (имеет 3 состояния) :
|
| Автор: skyboy 4.8.2010, 21:10 |
практически пофиг. что-то помнится мне, что для задачи полной (пере)индексации создают копию структуры таблицы с индексом, перегоняют туда данные и переименовывают копию в имя оригинала. |
| Автор: gcc 5.8.2010, 01:19 |
| включи в логах логировать запросы которые долго выполняются... если фрейворк, то можно влючить отладку и смотреть в каких участках медленно выплняются действия в сложно запросе очень часто можно сделать ошибку, где mysql будет грузить сильно CPU |
| Автор: skyboy 5.8.2010, 10:37 |
| я точно не уверен. поиском найти не смог. может, кто-то ещё подскажет. |
| Автор: skyboy 5.8.2010, 11:27 |
| нашел. я дезинформировал тебя. это было http://habrahabr.ru/blogs/mysql/76149/. и идея не просто в создании копии таблицы, а в последующей подмене MYI-файлов. А затем REPAIR TABLE Внимание: в той статье говорится о создании уникального индекса. Применимо ли указанное к неуникальному индексу - для меня загадка. жаль, что без подмены файлов не обойдется :( |
| Автор: nIkTo 5.8.2010, 11:44 | ||||||||||
Дело в том что
что делать ? Добавлено через 4 минуты и 6 секунд Запросы типа
Добавлено через 6 минут и 23 секунды explain говорит :
|
| Автор: skyboy 5.8.2010, 11:51 |
| долго индекс создавался-то? к сожалению, помочь не могу(даже боюсь навредить - опыта работы с такими большими таблицами у меня нет). стоит посмотреть в логах. может, ошибка загрузки индекса в память или ещё что. быстрее, после создания индекса? |
| Автор: nIkTo 5.8.2010, 11:57 |
| skyboy, индекс около 4х часов создавался. Гораздо быстрее стало, раньше ~ 10 сек теперь меньше секунды =) |
| Автор: Zloxa 6.8.2010, 10:46 |
весьма вероятно, для запроса select count(*) from tasks where status='done', использование индекса происходит не на благо а во вред. А план показывает что индекс использвуется. Если более 20% записей попадают под критерий status='done', то использование индекса для отбора по этому предикату, как правило, оказвается не эффективным. Если этот тот самый случай, лучшеhttp://dev.mysql.com/doc/refman/5.5/en/index-hints.html, что индекс использовать не стоит. |
| Автор: nIkTo 6.8.2010, 11:49 | ||
Zloxa, действительно, игнорируя индекс запрос :
выполняется, хотя и не так быстро как хотелось бы. |
| Автор: Zloxa 6.8.2010, 11:55 |
было бы настораживающе странно, если бы 30млн записей пересчитались мгновенно. |
| Автор: Бонифаций 10.8.2010, 10:20 |
| А вот интересно key_buffer_size у вас сколько? |
| Автор: nIkTo 10.8.2010, 11:14 | ||
Бонифаций, в файле my.cnf записано только :
так что предполагаю key_buffer_size по дефолту |
| Автор: Бонифаций 12.8.2010, 05:13 |
| Дефольные натсройки - это _очень_мало. Потому и тормоза. У вас, кстати, myisam? |