Могут ли страницы innoDB MySQL фрагментироваться на жестком диске?Или InnoDB предотвращает это, чтобы ускорить запросы? - PullRequest
0 голосов
/ 20 декабря 2018

Под страницами я подразумеваю:

https://dev.mysql.com/doc/internals/en/innodb-page-structure.html

Могут ли эти 16-килобайтные страницы MySQL фрагментироваться внутри памяти или диска?имеется в виду, что если мы возьмем образ диска или образ памяти, может ли быть вероятность того, что эти 16-килобайтные страницы будут фрагментированы?То есть, если я возьму образ папки MySQL, будут ли страницы размером 16 КБ быть непрерывными блоками или некоторые из них могут быть фрагментированы?

или MySQL реализует их так, чтобы они не фрагментировались?если да, то как?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

(Я уже обсуждал длину диска в вашем подобном вопросе. Я расскажу об ОЗУ здесь.)

Возможно, два десятилетия назад более половины процессоров перешли на "виртуальные" адреса, отличные от "физические адресаЧтобы достичь этого, специалисты по аппаратному обеспечению реализовали механизм «перевода», который отображал 32-битный (или 64-битный) виртуальный адрес, который программа использует в физический адрес для доступа к ОЗУ.Это было сделано на относительно низком уровне оборудования.Наряду с аппаратным обеспечением появилась обработка исключения, когда физический адрес был перенесен на диск или еще не был выделен для пользовательской программы.

Производители в основном остановились на размере страницы 4 КБ для точности перевода.То есть младшие 12 бит (2 ^ 12 = 4K) поступают через перевод без изменений;старшие биты отображаются (через таблицу поиска на кристалле, поддерживаемую массивом в ОЗУ), от виртуального к физическому.Это делается для каждого доступа к памяти (за исключением, может быть, во время загрузки).

С этим механизмом пользовательские программы могут полностью не обращать внимания на то, где 4 КБ страницы находятся в ОЗУ, а также на то, являются ли ониразбросаны или нет.

Итог: забудьте об изображении в памяти.Фрагментация на самом деле не проблема.

С другой стороны, обмен может быть проблемой.Я думаю, что MySQL и InnoDB разработаны с предположением, что все в оперативной памяти остается в оперативной памяти.Обратите внимание на то, как они прилагают усилия для кэширования блоков данных, блоков индекса, определений таблиц и т. Д. Итак, не настраивайте MySQL так, чтобы система должна была поменяться.

0 голосов
/ 20 декабря 2018

Это больше вопрос файловой системы или операционной системы, чем MySQL или InnoDB.InnoDB выполняет запись в файл, и действительно возможно, что файловая система фрагментирует записи на одну страницу InnoDB объемом 16 КиБ, чтобы она не была непрерывной на физическом диске.Однако с современными серверами и хранилищем SSD это в основном происходит 100% времени в любом случае на базовом носителе.

...