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


в какой момент база данных MySQL начинает терять производительность?

  • имеет ли значение размер физической базы данных?
  • имеет ли значение количество записей?
  • является ли ухудшение производительности линейным или экспоненциальным?

У меня есть то, что я считаю большой базой данных, с примерно 15M записей, которые занимают почти 2 ГБ. Основываясь на этих цифрах, есть ли у меня стимул для очистки данных, или я могу позволить ему продолжать масштабирование еще на несколько лет?

13 261

13 ответов:

физический размер базы данных не имеет значения. Количество записей не имеет значения.

по моему опыту самая большая проблема, с которой вы собираетесь работать, - это не размер, а количество запросов, которые вы можете обрабатывать одновременно. Скорее всего, вам придется перейти к конфигурации master/slave, чтобы запросы чтения могли выполняться против подчиненных устройств, а запросы записи-против ведущего устройства. Однако если вы еще не готовы к этому, вы всегда можете настроить свои индексы для запросы, которые вы выполняете, чтобы ускорить время отклика. Также есть много настроек, которые вы можете сделать для сетевого стека и ядра в Linux, которые помогут.

У меня был мой получить до 10 ГБ, только с умеренным количеством соединений, и он обрабатывал запросы просто отлично.

Я бы сначала сосредоточился на ваших индексах, а затем попросил администратора сервера посмотреть на вашу ОС, и если все это не поможет, возможно, пришло время реализовать конфигурацию master/slave.

В общем это очень тонкий вопрос и не тривиально. Я призываю вас читать mysqlperformanceblog.com и Высокая Производительность MySQL. Я действительно думаю, что нет общего ответа на этот вопрос.

Я работаю над проектом, который имеет базу данных MySQL с почти 1 Тб данных. Наиболее важным фактором масштабируемости является оперативная память. Если индексы ваших таблиц вписываются в память и ваши запросы сильно оптимизированы, вы можете обслуживать разумное количество запросов со средней машиной.

количество записей имеет значение, в зависимости от того, как выглядят ваши таблицы. Это разница, чтобы иметь много полей varchar или только пару ints или long.

физический размер базы данных также имеет значение: подумайте о резервных копиях, например. В зависимости от вашего движка ваши физические файлы БД растут, но не сжимаются, например, с innodb. Так что удаление большого количества строк, не помогает уменьшить ваш физический файлы.

есть много к этим вопросам, и как во многих случаях дьявол находится в деталях.

размер базы данных имеет значение. Если у вас есть более одной таблицы с более чем миллионом записей, то производительность начинает действительно ухудшаться. Количество записей, конечно, влияет на производительность: MySQL может быть медленным, с большими таблицами. Если вы нажмете один миллион записей, вы получите проблемы с производительностью, если индексы не установлены правильно (например, нет индексов для полей в "WHERE statements" или "ON conditions" в соединениях). Если вы нажмете 10 миллионов записей, вы начнете получать проблемы с производительностью, даже если у вас есть все ваши индексы правильно. Обновление оборудования-добавление большего объема памяти и большей мощности процессора, особенно памяти-часто помогает уменьшить самые серьезные проблемы, снова увеличивая производительность, по крайней мере до определенной степени. Например 37 сигналов пошли от 32 ГБ ОЗУ до 128 ГБ ОЗУ для сервера базы данных Basecamp.

Я бы сосредоточился сначала на ваших индексах, чем на том, чтобы администратор сервера посмотрел на вашу ОС, и если все это не поможет, возможно, пришло время для конфигурации master/slave.

Это правда. Еще одна вещь, которая обычно работает, - это просто уменьшить количество данных, с которыми неоднократно работали. Если у вас есть "старые данные "и" новые данные " и 99% ваших запросов работают с новыми данными, просто переместите все старые данные в другую таблицу - и не смотрите на нее;)

-> есть а посмотрите на перегородки.

2GB и около 15M записей-это очень маленькая база данных - я запускал гораздо большие на pentium III(!) и все еще работает довольно быстро.. Если ваш медленный, это проблема проектирования базы данных/приложений, а не mysql.

бессмысленно говорить о" производительности базы данных"," производительность запросов " - лучший термин здесь. И ответ: это зависит от запроса, данных, с которыми он работает, индексов, аппаратного обеспечения и т. д. Вы можете получить представление о том, сколько строк будет сканироваться и какие индексы будут использоваться с синтаксисом EXPLAIN.

2GB на самом деле не считается "большой" базой данных - это больше среднего размера.

также следите за сложными соединениями. Сложность транзакций может быть большим фактором в дополнение к объему транзакций.

рефакторинг тяжелых запросов иногда предлагает большой прирост производительности.

однажды меня призвали посмотреть на mysql, который"перестал работать". Я обнаружил, что файлы БД находились на сетевом устройстве filer, установленном с помощью NFS2 и с максимальным размером файла 2 ГБ. И конечно же, таблица, которая перестала принимать транзакции, была ровно 2 ГБ на диске. Но что касается кривой производительности, мне сказали, что она работала как чемпион вплоть до того, что она вообще не работала! Этот опыт всегда служит для меня хорошим напоминанием о том, что есть всегда размеры выше и ниже того, что вы естественно подозреваете.

точка для рассмотрения также является целью системы и данных в повседневной жизни.

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

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

в настоящее время я управляю базой данных MySQL на облачной инфраструктуре Amazon, которая выросла до 160 ГБ. Производительность запросов в порядке. То, что стало кошмаром, - это резервное копирование, восстановление, добавление подчиненных устройств или что-то еще, что связано со всем набором данных или даже DDL на больших таблицах. Получение чистого импорта файла дампа стало проблематичным. Для того, чтобы сделать процесс достаточно стабильным для автоматизации, необходимо было сделать различные варианты для приоритизации стабильности над производительностью. Если бы нам когда-нибудь пришлось аварийное восстановление с помощью резервной копии SQL, мы бы на несколько дней.

горизонтальное масштабирование SQL также довольно болезненно, и в большинстве случаев приводит к его использованию способами, которые вы, вероятно, не намеревались, когда вы решили поместить свои данные в SQL в первую очередь. Shards, read slaves, multi-master и т. д., Все они действительно дерьмовые решения, которые добавляют сложность всему, что вы когда-либо делали с БД, и ни один из них не решает проблему; только смягчает ее в некотором роде. Я бы сильно предложите взглянуть на перемещение некоторых ваших данных из MySQL (или действительно любого SQL), когда вы начинаете приближаться к набору данных такого размера, где эти типы вещей становятся проблемой.

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

Если у вас есть правильные индексы, используйте правильные движки (не используйте MyISAM, где ожидается несколько DMLs), используйте разделение, выделяйте правильную память в зависимости от использования и, конечно же, имейте хорошую конфигурацию сервера, MySQL может обрабатывать данные даже в терабайтах!

всегда есть способы повысить производительность базы данных.

Это зависит от вашего запроса и проверки.

например, я работал с таблицей 100 000 препаратов, которая имеет общее имя столбца, где оно имеет более 15 символов для каждого препарата в этой таблице .Я поставил запрос, чтобы сравнить общее название лекарств между двумя таблицами.Выполнение запроса занимает больше минут.То же самое,если вы сравниваете препараты с использованием индекса наркотиков, используя столбец id (как сказано выше), это занимает всего несколько секунд.

размер базы данных имеет значение с точки зрения количества байтов и строк таблицы. Вы заметите огромную разницу в производительности между база и объект заполнен. Как только мое приложение застряло, потому что я помещаю двоичные изображения внутри полей вместо того, чтобы хранить изображения в файлах на диске и помещать только имена файлов в базу данных. Повторение большого количества строк с другой стороны не является бесплатным.