Большие БД

12
totamon
На сайте с 12.05.2007
Offline
437
#11
Neostar:
Вместо оптимизации БД

ну не в вместо только))

sidorka, мыслей не особо, а почитать можно http://ruhighload.com/ про Mysql пара хороших статей и масштабирование.

зы. всегда есть какой-то задел по оптимизации запросов, нужно пробовать менять, может разбивать на несколько, мониторить время. и зачем вам CONCAT в запросе? лишними операциями БД грузануть? Я не эксперт mysql, и сам бы такой запрос никогда не написал, select в select дает реальное ускорение или в смысле "от перемены слагаемых сумма не меняется"?

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
doctorpc
На сайте с 12.07.2009
Offline
112
#12

Без детальной информации сложно будет чем-то помочь.

1) Информация о железе, настройки mysql (mysqltuner, например, вам в помощь), что еще работает на этом сервере и сколько берет ресурсов?

2) Детальная схема всех участвующих таблиц в запросе, включая индексы (на скриншотах их не видно).

3) Конкретный запрос. Очень тажке поможет результат explain по конкретному запросу.

А дальше уже можно говорить о SSD дисках, если выяснится, что узкое место - жесткий диск.

---------- Добавлено 07.07.2015 в 11:55 ----------

Без детальной информации сложно будет чем-то помочь.

1) Информация о железе, настройки mysql (mysqltuner, например, вам в помощь), что еще работает на этом сервере и сколько берет ресурсов?

2) Детальная схема всех участвующих таблиц в запросе, включая индексы (на скриншотах их не видно).

3) Конкретный запрос. Очень тажке поможет результат explain по конкретному запросу.

А дальше уже можно говорить о SSD дисках, если выяснится, что узкое место - жесткий диск.

sidorka
На сайте с 17.08.2012
Offline
211
#13
totamon:
select в select

totamon, это чтобы джоины облегчить. Я надеюсь, что понял правильно их работу. Кстати, прямо сейчас увидел еще косяк - NOT и != работает же без индексов вроде?

doctorpc, мне бы просто направление куда двигаться, желательно в картинках, хотелось бы самому докопаться до решения.

Дешевые домены для дорвеев и не только - от 55р (https://goo.gl/Wtnwqp)
Goshas
На сайте с 22.02.2011
Offline
50
#14

В общем вам правильно сказали, что без конкретных данных по архитектуре БД и выполняемых запросов - сложно что-то рекомендовать.

Из общего - диск побыстрее и в силу огромных размеров таблиц - оперативной памяти поболее. Смотрите на архитектуру, занимайтесь нормализацией таблиц.

Solmyr
На сайте с 10.09.2007
Offline
501
#15

100 миллионов строк - это не так много, чтобы обычные индексы не работали. Просто оптимизируйте индексы в своих запросах - разберитесь как они работает и создайте в таблицах нужные индексы и удалите ненужные. В крайнем случае используйте конструкцию USE INDEX

doctorpc
На сайте с 12.07.2009
Offline
112
#16
sidorka:

doctorpc, мне бы просто направление куда двигаться, желательно в картинках, хотелось бы самому докопаться до решения.

Я бы начал с изучения Explain (ссылка 1, ссылка 2 и также google в помощь), в плане архитектуры и с анализа и оптимизации mysql настроек с помощью mysqltuner

PN
На сайте с 22.08.2012
Offline
103
#17
sidorka:
Как грамотно работать с большими БД?
Данные однотипны, только вот записей несколько сотен миллионов - медленно, индексы не спасают :(
Может в несколько таблиц оформлять, разбивая по первичному ключу? Или в несколько баз?
NoSQL, наверное, не пойдет - нужно сортировать и группировать результаты.

Поделитесь мыслями или подкиньте ссылок на актуальные грамотные статьи по этой теме, пж.

когда-то давно на очень слабом сервере работал с данными объемом 1 Гб MySQL-ISAM. Тормозило все, конечно, нереально. Тогда я разбил данные на несколько десятков таблиц (все автоматически) и проект заработал на том же слабом сервере☝

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
sidorka
На сайте с 17.08.2012
Offline
211
#18

proksey-net, тоже пришел к такому решению. Буду пробовать.

T
На сайте с 06.06.2013
Offline
81
#19

Запросы к БД могут тормозит всего по двум причинам: перегруз диска и перегруз процессора.

Для начала опередите, что происходит в вашем случае. Если диск, то:

1) Если памяти меньше, чем размер БД, то однозначно масштаб выигрыша от SSD не будет сравним ни с чем другим.

Ответ на вопрос "как жили раньше без SSD" - в идеале ставили достаточно памяти, чтобы все индексы и большая часть базы в ней могли закешироваться.

2) Проверьте, чтобы для всех полей, которые участвуют в связях были построены индексы. Например, для вашего "JOIN keywords AS k ON k.id = p.keyword_id" надо, чтобы на keyword_id и id были индексы.

Если процессор, то пересмотрите все запросы с конструкциями distinct, group by, order by, и по возможности избавьтесь от запуска таких запросов на большом количестве данных.

Как вариант, кэшируйте в отдельных таблицах результаты group by.

Например, если у вас считается что-то помесячно с group by, то отдельно в таблице храните уже посчитанные и сгруппированные помесячно данные за прошлые периоды, а из большой таблицы берите только за текущий месяц.

Ну и опять же проверьте наличие всех необходимых индексов, чтобы не тратилось процессорное время на сканирование таблиц.

VHS
На сайте с 28.09.2007
Offline
142
VHS
#20

Без структуры выборок сложно понять, по приведенному запросу - add_date timestamp - индекс? Различия с первичным ключем есть, или сортировка будет идентична?

Неясно, зачем джойны по 1 полю из других таблиц? Экономите на размерах таблиц?

Зачем выбирать Select * если в запросе нужно всего несколько полей?

Я не уверен, что при верной настройке запроса вложенный даст лучший результат чем стандартный джойн.

На самом деле тюнингом можно победить многое, размер тут имеет значение, но не первостепенное. Для горячих данных можно создавать временные таблицы, срезы, изначально структурированные для высоконагруженных мест.

Самое простое и правильное направление - EXPLAIN SELECT курить до полной оптимизации всего и вся.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий