Может ли массивный импорт данных MySQL на SSD повредить его?


28

Мне нужно импортировать довольно много данных (~ 100 миллионов строк, ~ 100 раз) в базу данных MySQL. В настоящее время он хранится на моем жестком диске, и узким местом моего импорта является скорость записи на жесткий диск.

Я слышал, что твердотельные накопители не любят массовых непрерывных операций записи, и это может привести к их повреждению. Что вы думаете? Это действительно проблема современных SSD?


Пока вы оставляете (скажем) 2-3 ГБ за пределами разделенной области для избыточного выделения ресурсов, я думаю, вы в безопасности. Я не вижу особых проблем с этим. У большинства SSD уже есть часть диска, которая недоступна для операционной системы. Это пространство используется для выравнивания износа и чрезмерной подготовки, если жесткий диск переполнен. Эти дополнительные гигабайты предоставят SSD больше возможностей для распространения данных во избежание повреждений. Если вы заядлый и хотите пойти дальше, вы можете узнать, сколько микросхем памяти у вашего ssd и дать 1 Гб за чип. 10 чипов - это 10 неразделенных ГБ.
Исмаэль Мигель

5
Для чего бы это ни стоило, мы обычно импортируем гораздо больше данных, чем это. В одной из наших таблиц содержится гораздо больше данных, чем вы импортируете, и у нас есть пара сотен таблиц. Мы используем SSD. Я ожидаю, что вы будете в порядке.
ChrisInEdmonton

4
В настоящее время твердотельные накопители достаточно умны, чтобы справляться с выравниванием износа даже без поддержки ОС (даже несмотря на то, что ОС просит перезаписать один и тот же блок, контроллер SSD каждый раз прозрачно записывает в другой блок), так что все будет в порядке.

7
Красная сельдь Не стоит беспокоиться о частоте отказов твердотельных накопителей - они будут достаточно длинными, чтобы прослужить дольше, чем эквивалентная вращающаяся ржавчина.
Sobrique

2
Люди слишком беспокоятся о своих SSD. По сути, вам никогда не удастся «уничтожить» ваш SSD случайно, и даже для того, чтобы сделать это специально, могут потребоваться недели или месяцы непрерывной записи. Даже если вы «уничтожите» его, он все равно предоставит данные только для чтения. Перестань беспокоиться и просто используй это. Вы также можете спросить о том, как головка чтения / записи вашего жесткого диска изнашивается ускорениями.
mic_e

Ответы:


27

Это действительно не простой ответ на это.

SSD не заботятся о непрерывной записи столько, сколько сколько-нибудь конкретный сектор перезаписывается. Когда впервые появились SSD, что-то вроде SQL было плохим словом, поскольку операционная система в целом относилась к диску как к традиционному жесткому диску, и сбои были очень частыми.

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

SSD в SQL не только распространены, но и часто поощряются. Не стесняйтесь просматривать дочерний сайт DBA .

Я думаю сделать это, предполагая, что сервер SQL построен правильно с избыточными дисками. Если нет, то в любом случае ожидайте сбой.


5
«Если нет, то в любом случае ожидаем провала». Если сервер действительно использовать резервные диски, по- прежнему определенно ожидают неудачи в какой - то момент, и план для него. Просто при наличии избыточности отказ одного устройства хранения данных значительно снижает вероятность простоя системы.
CVn

@ MichaelKjörling да, именно так. По моему мнению, «правильно построенный» также предполагает резервное копирование базы данных в случае сбоя ... Но иногда даже нужно сказать то, что должно быть в порядке, чтобы о нем не говорили, спасибо.
Остин Т Френч

19

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

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

Позвольте мне просто сказать, что ограничения на запись для новых корпоративных дисков огромны. Возьмите новый Samsung 845DC Pro. Это хорошо для 10 приводов в день в течение 5 лет по гарантии. Я предполагаю, что это сделает вдвое больше. Чтобы выразить это в цифрах, это 14 600 ТБ, написанных за 5 лет на модели 800 ГБ.
Или 2920 ТБ в год,
или 8 ТБ в день, на пять лет .

Покажите мне жесткий диск с гарантией, которая распространяется на такое большое использование. Я даже не уверен, что вы могли бы записать 8 ТБ на жесткий диск в день: - (средняя пропускная способность 50 МБ / с * 60 (секунд) * 60 (минут) * 24 (часов) = 4 320 000 МБ / день = 4,32 ТБ / день) Оказывается, вы не можете (на среднем диске).

Пока вы используете такой диск, основанный на V-NAND (или одинаково надежный SLC), а не тот, который основан на TLC или плохой флэш-памяти MLC, у вас все будет в порядке. И в любом случае, RAID 10 и резервные копии - ваш друг по определенной причине. И, по крайней мере, если ограничение записи SSD действительно становится проблемой, вы все равно можете прочитать данные, хранящиеся в неисправных битах.

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


12
Могу ли я спросить, почему понизить?
Ctrl-alt-dlt

Вы можете спросить, но вы не получите, по-видимому.
Фонд Моника иск

12

Запись на SSD не обязательно плохая. Это написание и перезапись одного блока, это плохо. Это означает, что если вы пишете файл, удалите его, а затем запишите его снова или внесите небольшие изменения в файл снова и снова. Это вызывает износ SSD. Базы данных определенно вписываются в эту категорию.

Однако, согласно этой статье , петабайты данных были записаны на SSD и все еще работоспособны. Вероятно, это связано с достижениями выравнивания износа :

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

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

Примечание: RAID-массивы НЕ являются резервными копиями !!!! Независимо от того, используете ли вы RAID-массив или нет, создайте резервную копию. Независимо от того, используете вы SSD или нет, создайте резервную копию.


1
RAID1 будет очень мало для того типа повреждения, о котором вы говорите. Уровень износа, вероятно, будет детерминированным, что означает, что они будут изнашиваться с одинаковой скоростью и в одинаковой степени, в результате чего ошибки будут происходить почти точно в тех же местах.
Арон

из связанной статьи: «электроника в SSD выйдет из строя задолго до того, как изнашивается NAND» ... подождите, что?
Майкл

4

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

Это означает, что при добавлении данных они всегда записываются в новый сектор. Могут быть некоторые буферы / свопы, которые многократно перезаписываются / записываются, но игнорируя это, все эти вставки теоретически приводят к не более чем одной записи на сектор . В зависимости от того, как реализован MySQL, и какой тип массовой вставки вы выполняете, вы можете создать второй набор записей позже, когда журнал транзакций интегрирован в основной файл данных (я ухожу от понимания различных механизмов БД и предполагая, что MySQL несколько похож в том, как очищаются журналы транзакций).

Суть в том, что вы не «сбиваете» SSD. То есть вы не делаете много изменений / перемещений / удалений / и т.д. это потенциально может переписать один и тот же сектор много раз. Таким образом, вы, по сути, собираетесь генерировать очень небольшое количество записей на сектор, и это то, что действительно имеет значение.

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

(Индексы могут быть другим вопросом. Поскольку кластеризованные индексы во многих БД вносят множество изменений по мере вставки данных. Обычно при выполнении больших операций в среде хранилища данных вы отключаете индексы во время массового импорта, а затем обновляете их после.)


3

Это не проблема.

Прежде всего, SSD значительно улучшились за последние годы. Избыточное выделение и выравнивание износа (и, в небольшой степени, команда TRIM, хотя и не применимо в вашем случае) сделали их вполне пригодными в качестве сверхмощных дисков общего назначения. Я не использую ничего, кроме SSD, на своем компьютере для разработки (который регулярно выполняет большую часть компиляции), даже не приближаясь к количеству циклов стирания.

Далее это утверждение:

Твердотельные накопители не любят массовых непрерывных записей, и это может привести к их повреждению

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

В отличие от традиционных жестких дисков, твердотельные накопители (или, скорее, флэш-память на основе NAND) физически организованы в большие блоки, которые логически содержат несколько секторов. Типичный размер блока составляет 512 КБ, тогда как секторы (которые являются единицей, которую использует файловая система) традиционно составляют 1 КБ (возможны разные значения, два десятилетия назад 512 В были обычным явлением).
С 512kB-блоком можно сделать три вещи. Его можно прочитать, часть его или все можно запрограммировать (= записать), и все это можно стереть. Стирание - это то, что проблематично, потому что количество циклов стирания ограничено, и вы можете стереть только полный блок.

Поэтому большие записи очень удобны для SSD, а маленькие - нет.

В случае небольших записей контроллер должен прочитать блок, изменить копию, стереть другой блок и запрограммировать его. Без кеширования, в самом худшем случае, вам потребуется стереть 512 000 блоков, чтобы записать 512 килобайт. В лучшем случае (большая непрерывная запись) вам нужно сделать ровно 1 стирание.

Выполнение импорта в базу данных MySQL сильно отличается от выполнения множества отдельных запросов на вставку. Движок способен объединять множество записей (как данных, так и индексов) вместе и не нуждается в синхронизации между каждой парой вставок. Это составляет гораздо более дружественный для SSD шаблон записи.


2
Секторы традиционно 1 КиБ? Цитировать, пожалуйста. На ротационных дисках распространены два размера секторов: 512 байт (традиционные, как на моих 4-ТБ жестких дисках, в IBM-совместимых датируются примерно 1981 годом или около того) и 4096 байт («расширенный формат»). Единицы выделения на уровне файловой системы могут различаться по размеру, но это совершенно другой вопрос, и это чисто конструкция файловой системы, позволяющая поддерживать структуры данных, отслеживающие выделение разумного размера в файловых системах, которые не увеличивают их динамически по мере необходимости. ; кроме того, я сомневаюсь, что фиксированные размеры блоков в 1 КиБ очень распространены на практике.
CVn

@ MichaelKjörling: Спасибо за ваш очень ценный вклад. Вы, конечно, прочитали и поняли ответ, не так ли? Важным фактом является то, что твердотельные накопители имеют физические размеры блоков, которые намного больше, чем это, независимо от размера логического сектора (который я видел в любом месте от 500 до 4096 байт, даже не с степенью двойки). Цитирование не требуется.
Деймон

1

SSD не нравятся. Если вы сохраняете максимальную скорость записи в течение 5-10 лет (24 часа в сутки, 7 дней в неделю), то у вас может получиться сломанный SSD.

Ofc. Через 5 лет большинство серверов достигли своего экономичного конца.


Отказ от ответственности:
не пытайтесь сделать это с самым первым поколением SSD. Те, где менее устойчивы.


Я хорошо знаю, что использование любого диска с максимальной емкостью 7/24 может привести к его повреждению ... Мой вопрос: безопасен ли он в течение ограниченного периода времени (скажем, несколько раз по 2-3 часа)
christophetd

@ christophetd - Это зависит. Обновите свой вопрос, чтобы оценить объем данных. Его больше о проценте привода. Писать 20 ГБ в час на твердотельном накопителе объемом 80 ГБ хуже, чем 20 ГБ в час на твердотельном накопителе объемом 1 ТБ.
Ramhound

На том же примечании: Наличие в основном пустого накопителя означает, что многие «пустые» флэш-ячейки используются для выравнивания износа. (и больший диск с тем же объемом данных -%, в то время как он более пустой).
Хеннес

1

Если вы действительно заинтересованы в выяснении деталей, то вам нужно ответить на следующий вопрос:

В среднем, сколько байтов в каждом ряду?

Если вы можете сказать мне, что есть 10 столбцов, каждый столбец - varchar (100), а кодировка - UTF-8, то в худшем случае я могу предположить, что у вас есть 4000 байтов данных на строку и добавьте еще несколько байтов для метаданные, так скажем, 4200 байт?

Ваш SQL пытки вычисляет до 4,200 x 100 x 100,000,000 = 42,000,000,000,000 bytesданных, записанных на диск

42 000 000 000 000/1000 = 42 000 000 000 КБ

42 000 000 000/1000 = 42 000 000 МБ

42 000 000/1000 = 42 000 ГБ

42 000/1000 = 42 ТБ

В этом теоретическом наихудшем сценарии вы будете записывать 42 ТБ на диск

Согласно этой статье , предоставленной @KronoS, вы должны быть готовы еще к 25 раундам своего пыточного SQL.


-2

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

  • биты сохраняются в {1,2,3} -битных ячейках. У них ограниченная продолжительность жизни.
  • ячейки сгруппированы в страницы размером [2-16] КБ (наименьшая записываемая единица)
  • страницы сгруппированы в (128-256 стр.) блоков (наименьший стираемый блок)
  • для перезаписи страницы сначала необходимо удалить ее - и весь ее блок -

Вот почему рекомендуется

  • никогда не пишите меньше страницы сразу,
  • небольшие буферы записи и
  • отдельные запросы на чтение и запись
  • «Большая однопоточная запись лучше, чем многие параллельные записи»

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


2
Этот ответ на самом деле не дает никакой релевантной информации, которая не была сказана, кроме того, это в основном комментарий со ссылкой, содержащейся в нем.
Ramhound

@Ramhound: не могли бы вы дать согласие на комментарий (спасибо, кстати), и это тоже помечено как устаревшее? Или вы до сих пор считаете информацию уже сказанной / неактуальной?
Серв-ин

Хотя эта техническая информация больше не является ссылкой, если честно, техническая информация сама по себе не относится к вопросу пользователя о работе базы данных на SSD I
Ramhound

@Ramhound: мне показалось, что дело в импорте, а не в работе. Судя по отрицательным голосам, кажется, что вы правы
serv-inc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.