2016-03-24 6 views
-1

Мы заметили, что некоторые из наших файлов MyISAM .MYD (базы данных MySQL базы данных) копируются очень медленно. Как диск C:, так и диск D: SSD; теоретический предел составляет 500 МБ/с. Для таймингов мы отключим службу MySQL. Вот несколько примеров времени для файла test.myd с 6 ГБ:Очень медленная копия файла MyISAM .MYD

NET STOP MYSQL56 
Step1: COPY D:\MySQL_Data\test.myd C:\Temp  --> 61MB/sec copy speed 
Step2: COPY C:\Temp\test.myd D:\temp   --> 463 MB/sec 
Step3: COPY D:\Temp\test.myd c:\temp\test1.myd --> 92 MB/sec 

Странные результаты; почему скорость в одном направлении была бы настолько отличной от другого направления? Давайте попробуем это:

NET START MYSQL56 
in MySQL: REPAIR TABLE test; (took about 6 minutes) 
NET STOP MYSQL56 
Step4: COPY D:\MySQL_Data\test.myd C:\Temp  --> 463 MB/sec 
Step5: COPY C:\Temp\test.myd D:\temp   --> 463 MB/sec 
Step6: COPY D:\Temp\test.myd c:\temp\test1.myd --> 451 MB/sec 
  • Кто-нибудь может объяснить разницу в скорости копирования?
  • Что могло быть причиной медленной скорости копирования в первую очередь?
  • Что изменит РЕМОНТ, но ОПТИМИЗМ, который мы пробовали , во-первых, не изменил ситуацию.
  • Будет ли какой-либо удар производительности на уровне SQL с исходной версией (т.е. перед РЕМОНТОМ)? К сожалению, я не тестировал этот перед запуском этих тестов.

ответ

0
  • REPAIR будет сканировать через стол и устранить проблемы, которые он находит. Это означает, что таблица полностью прочитана.

  • OPTIMIZE копирует весь стол, затем RENAMEs возвращается к старому названию. Результат выглядит так, как будто вся таблица была прочитана.

  • COPY считывает один файл и записывается в другой файл. Если целевой файл не существует, он должен его создать; это медленный процесс в Windows.

  • При чтении файла данные извлекаются с диска (SSD, в вашем случае) и кэшируются в ОЗУ. Во втором чтении будет использоваться кешированная копия, тем самым будет быстрее.

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

Другая возможность - «выравнивание износа» и/или «стирание перед записью» - два свойства твердотельных накопителей.

Износостойкость - это когда SSD перемещает вещи вокруг, чтобы избежать слишком «износа». Обратите внимание, что блок SSD «изнашивается» после записи N на него. Путем перемещения блоков вокруг этого физического недостатка избегают. (Это особенность SSD корпоративного класса, но может отсутствовать на дешевых дисках.)

Прежде чем запись может возникнуть на SSD, место сначала должно быть «стерто». Этот дополнительный шаг - просто физическое требование работы SSD. Я сомневаюсь, что это влияет на ваш вопрос, но может.

Я удаляю теги [mysql] и [myisam], так как вопрос действительно применим только к файлу COPY с Windows и SSD.

+0

Рик, спасибо за это. Я до сих пор не понимаю, почему файл таблицы после MySQL REPAIR копируется намного быстрее. –