Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 24 Май, 2012, 02:34:16

Страниц: [1] 2
Печать
Автор Тема: MySQL стала раком =)  (Прочитано 1417 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Batler    ↓ 
27 Октябрь, 2009, 08:49:11
НЕ ХУЕТА! ХУЕТА!

Карма: 4
Сообщений: 142
Сила слова: 2.82

Назрела необходимость оптимайзить базу. Основной запрос занимает секунд 15
В базе ~ 220к записей (140к в 1 таблице , 70к в другой)
На ВДСке 128МБ памяти всего, 40МБ Active, остальное либо inactive wired buf и т.п.
Когда mysqld работает всю свободную память съедает.
Впринципе рассматриваю вариант с переходом на тариф с 256 мб.
Ключи какие можно было создал (по которым джоин идет). Основное время (по запросу) занимает сортировка (ORDER by price) без него выполняется не дольше 0.001 секунды. Какие параметры лучше потюнить?
Увеличивал key_buffer join_buffer и sort buffer - почти никакого эффекта.
базы в сумме занимают мегов 40, но могут вырасти.
Записан
phpdude    ↓ 
27 Октябрь, 2009, 09:00:12 , спустя 11 минут 1 секунду
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

Batler, значит не все ключи создал))
 
раз ордер бай прайс так тормозит.
 
попробуй избавиться от filesort в explain
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
adw0rd    ↓ 
27 Октябрь, 2009, 09:30:36 , спустя 30 минут 24 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

http://habrahabr.ru/blogs/mysql/70435/
http://highload.com.ua/index.php/tag/mysql/
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
AlexB    ↓ 
28 Октябрь, 2009, 12:39:21 , спустя 15 часов 8 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3424
Сила слова: 2.6


Основное время (по запросу) занимает сортировка (ORDER by price) без него выполняется не дольше 0.001 секунды. Какие параметры лучше потюнить?
1. Попробуй содать еще поле negativeprice, где хранить цену с отрицательным значением, индексы по обоим полям и сортировка только ASC.
2. Тебе реально надо все 240K сортировать по цене? Наверняка есть какие-то ограничения, например сортировать только товары в рубрике тогда AND rubid=6 c индексом по rubid сократит время запроса во столько раз, сколько у тебя рубрик.
Это кстати совет всем, если вам надо показать три последние новости никогда не делайте ORDER BY time по всей таблице, наложите ограничение по времени - например выбираем только за последний месяц.
3. Самый ценный совет - открой для себе команду EXPLAIN
Записан

md5    ↓ 
28 Октябрь, 2009, 12:43:46 , спустя 4 минуты 25 секунд
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19


если вам надо показать три последние новости никогда не делайте ORDER BY time по всей таблице, наложите ограничение по времени - например выбираем только за последний месяц.
это оч круто, кстати, еще когда ты мне сказал, я сразу сделал и охуел)
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
phpdude    ↓ 
28 Октябрь, 2009, 01:08:18 , спустя 24 минуты 32 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

мускуль легко оптимизировать. помню както правильно поставленный лимит обогатил мну на 150 баксов ...
 
ибо у парней выборка выполнялась 40 секунд (контекстная реклама, 600млн строк + жойнилось несколько таблиц по 100к), после моих маленьких манипуляций стал выполняться 0.005 секунды ... :)))))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
adw0rd    ↓ 
28 Октябрь, 2009, 01:11:39 , спустя 3 минуты 21 секунду
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

phpdude, вместо лимита заюзал "where id > 0 and id < 30", что-то типа того?
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
phpdude    ↓ 
28 Октябрь, 2009, 01:40:10 , спустя 28 минут 31 секунду
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

adw0rd, нет, просто сортировал только нужные данные, а не 600млн строк )))
 
писать запросы по учебникам + 6ая нормализация УГ в мускуле)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Batler    ↓ 
28 Октябрь, 2009, 04:34:44 , спустя 2 часа 54 минуты 34 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 4
Сообщений: 142
Сила слова: 2.82

AlexB, В самом общем случае желательно сортировать без дополнительных параметров.
Потом появляются некоторые условия. В любом случае выборка ограничена 20 строками (LIMIT 20)
 
Запрос с джоином, и как показал EXPLAIN он пытался сортировать базу которая джойнится к основной (порядка 20к записей) причем в файле. И говорил что создает временную таблицу.
 
Добавил 13 символов в запрос => время сократилось с 17.59 секунд до 0.05 секунд. =)
Исчезли всякие временные таблицы и filesort =)
Всем спасибо.
Спустя 1 минуту 59 секунд добавил
phpdude, про учебники абсолютно согласен, равно как и про нормализацию.
 
Пример: в справочной литературе пишут, что чтобы выбрать одну случайную запись надо писать так:
SELECT * FROM tbl ORDER BY RAND() LIMIT 1
Записан
phpdude    ↓ 
28 Октябрь, 2009, 05:15:14 , спустя 40 минут 30 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

SELECT * FROM tbl ORDER BY RAND() LIMIT 1

я помянул твой сервер ...
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
CTAPbIu_MABP    ↓ 
28 Октябрь, 2009, 05:49:20 , спустя 34 минуты 6 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

6ая нормализация УГ
ебанирот
 
SQL
SELECT * FROM tbl ORDER BY RAND() LIMIT 1
нет вот єто ебанирот
Записан

java.lang.OutOfMemoryError
AlexB    ↓ 
28 Октябрь, 2009, 06:12:04 , спустя 22 минуты 44 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3424
Сила слова: 2.6


AlexB, В самом общем случае желательно сортировать без дополнительных параметров.
Потом появляются некоторые условия. В любом случае выборка ограничена 20 строками (LIMIT 20)
Я это делаю так
 
select @id:=id from news Order by DateTimeDESC limit 200000,1;
select * from news where id>@id Order by DateTimeDESC limit 20;
 
вместо
 
select * from news Order by DateTimeDESC limit 200000,20;
Записан

phpdude    ↓ 
28 Октябрь, 2009, 07:32:37 , спустя 1 час 20 минут 33 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

AlexB, ты правильно делаешь :)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Batler    ↓ 
29 Октябрь, 2009, 05:54:33 , спустя 10 часов 21 минуту 56 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 4
Сообщений: 142
Сила слова: 2.82

Я тупой =)
поясните в чем принципиальное отличие от запроса все в одном?
Я бы просто ключ добавил к полю DateTimeDESC
Записан
AlexB    ↓ 
29 Октябрь, 2009, 11:15:57 , спустя 5 часов 21 минуту 24 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3424
Сила слова: 2.6

Вообще-то это некоторая magic. mysql плохо умеет использовать индекс для сортироки.
Видимо тут какое-то шаманство, во всяком в первом случае он вообще не обращается в таблицу, а все берет из индекса, а во втором индекс игнорирует для больших значений limit. В общем, глянь планы запросов - увидишь.
 
using index - в первом
using filesort - во втором (force index улучшает ситуацию незначительно)
Записан

Страниц: [1] 2
Печать
 

Перейти в: