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

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

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

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

 

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

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

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

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

 

В целом это очень тонкий вопрос , и не тривиальный вообще. Я призываю вас читать [mysqlperformanceblog.com](http://mysqlperformanceblog.com) и [High Performance MySQL](http://rads.stackoverflow.com/amzn/click/0596101716) . Я действительно думаю , что нет общего ответа на это.

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

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

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

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

 

Размер базы данных **имеет значение** . Если у вас есть более одной таблицы с более миллиона записей, то производительность начинает действительно деградировать. Количество записей , делает конечно влияет на производительность: [MySQL может быть медленной , с большими таблицами](http://www.mysqlperformanceblog.com/2006/06/09/why-mysql-could-be-slow-with-large-tables/) . Если вы нажмете один миллион записей вы получите проблемы с производительностью , если индексы не не установлены верно (например , не индексов для полей в « где заявления» или «ON» в условиях соединения). Если вы попали 10 миллионов записей, вы начнете получать проблемы с производительностью , даже если у вас есть все ваши индексы правильно. Модернизация оборудования - добавление памяти и больше мощности процессора, особенно памяти - часто помогают снизить наиболее серьезные проблемы, снова увеличивая производительность, по крайней мере , до некоторой степени. Например[37 сигналов изменились с 32 Гб ОЗУ 128 Гб оперативной памяти](http://37signals.com/svn/posts/1185-the-need-for-speed-making-basecamp-faster) для сервера базы данных Basecamp.

 

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

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

-> Посмотрите на [разбиении](http://dev.mysql.com/doc/refman/5.1/en/partitioning.html) .

 

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

 

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

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

 

Точка рассмотреть также цель системы и данные в день в день.

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

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

 

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

 

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

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

 

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

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

 

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

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

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

 

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

 

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

Например, я работал с таблицей 100 000 лекарственных средств, имеет столбец родовое название, где он имеет более чем 15 символов для каждого препарата в этой таблице .Я поставил запрос сравнить общее название наркотиков между двумя tables.The запроса требуется больше минут run.The же, если вы сравните наркотики с помощью индекса наркотиков, используя колонку ID (как сказано выше), она занимает всего несколько секунд. 

 

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