Сведения о вопросе

ЧОВИД

16:03, 1st July, 2020

Теги

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

Просмотров: 539   Ответов: 14

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

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

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



  Сведения об ответе

LAST

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

SEEYOU

18:03, 1st July, 2020

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

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

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

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

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


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

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


  Сведения об ответе

ЯЯ__4

18:03, 1st July, 2020

Я бы сначала сосредоточился на ваших индексах, а не на том, чтобы администратор сервера посмотрел на ваш OS, и если все это не поможет, возможно, пришло время для настройки master/slave.

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

-> Взгляните на секционирование .


  Сведения об ответе

прога

18:03, 1st July, 2020

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


  Сведения об ответе

piter

18:03, 1st July, 2020

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

2 ГБ на самом деле не считается базой данных "large" - это скорее средний размер.


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

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

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


  Сведения об ответе

SEEYOU

18:03, 1st July, 2020

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


  Сведения об ответе

pumpa

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

LIZA

18:03, 1st July, 2020

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

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


  Сведения об ответе

dump

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

#hash

18:03, 1st July, 2020

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

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


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

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


  Сведения об ответе

dumai

18:03, 1st July, 2020

Нет, это действительно не имеет значения. Скорость MySQL составляет около 7 миллионов строк в секунду. Так что вы можете масштабировать его совсем немного


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться