Семейство InnoDB Дж. Коула - 3. Основы пространственного расположения файлов InnoDB

база данных MySQL

Оригинальный адрес:блог. Подождите. US/2013/01/03/…

В модели хранения данных обычно есть "космос"Эта концепция, известная в MySQL как "табличное пространство", иногда упоминаемый в InnoDB как "файловое пространство". Пространство может состоять из нескольких реальных файлов в операционной системе (например, ibdata1, ibdata2 и т. д.), но на самом деле это всего лишь один логический файл - несколько текстовых файлов обрабатываются как один объединенный файл.

Каждый в InnoDBкосмосВсем выделяется 32-битный целочисленный идентификатор пространства без знака, который используется для ссылки на это пространство в различных местах. InnoDB всегда имеет «системное пространство», идентификатор пространства которого равен 0. Системное пространство используется для хранения записей серии метаданных InnoDB. С MySQL InnoDB в настоящее время поддерживает только дополнительное пространство в форме пространства «одна таблица — один файл», которое создает файл .ibd для каждой таблицы MySQL. Внутренне этот файл .ibd на самом деле является полнымкосмос, но в реализации MySQL он может содержать только одну таблицу.

Страница

каждыйкосмосразделен наСтраница, обычно каждыйСтраница16 КиБ (также можно указать во время компиляции, указавUNIV_PAGE_SIZEизменены или с включенным сжатием InnoDB).космоссерединаСтраницаназначается 32-битный номер страницы, называемыйкомпенсировать, на самом деле этот номер страницы взят изкосмосначиная с адресасмещение страницы. Таким образом, страница 0 находится в файле со смещением 0, страница 1 — в файле со смещением 16384 и так далее. Может быть, некоторые люди здесь помнят, InnoDBОграничение на размер данных — 64 ТиБ., это на самом деле каждыйкосмосограничение по размеру. Поскольку номер страницы представляет собой 32-разрядное целое число без знака, а размер страницы по умолчанию составляет 16 КиБ, максимальный размер пространства составляет 2 ^ 32 * 16 КиБ = 64 ТиБ.

СтраницаСтруктура выглядит следующим образом:

image

Каждая страница имеет 38-байтовыйFILголова иFILхвостик (FILИмя на самом деле является сокращением от «файл»). Заголовок содержит поле, указывающее тип страницы, который определяет структуру остальной части страницы.FILголова иFILСтруктура хвоста выглядит так:

image

FILГолова и хвост содержат следующие структуры:

  • тип страницы(2 байта): это важно для анализа остальных данных страницы. Многим модулям и сценариям необходимо выделить страничное хранилище, в том числеУправление файловым пространством,Управление объемом,система транзакций,поле данных,undo log,большие двоичные данныеипоказательа такжеданные таблицы.
  • Идентификатор пространства(4 байта)
  • номер страницы(4 байта): КогдаСтраницаНомер страницы сохраняется при ее инициализации. Проверка того, что номер страницы, содержащийся в этом поле, совпадает с номером страницы, считанным из смещения файла, помогает указать, было ли чтение правильным. И, если это поле инициализировано, это указывает на то, что этоСтраницатакже инициализирован
  • checksum(4 байта) истарая контрольная сумма(4 байта)
  • Предыдущая страница(4 байта) сследущая страница(4 байта) указатель: это может создать двусвязный список и использоватьпоказательЧто касается страниц, то все страницы связаны на одном уровне, что повышает эффективность полного сканирования индекса. Но есть много типов страниц, которые не используют эти поля.
  • сохранение головыПоследний измененный соответствующий LSN(серийный номер журнала, 8 байт) и серийный номерМладшие 32 бита также хранятся в хвосте..
  • Наибольший глобальный порядковый номер журнала(называется флеш LSN, 8 байт), реальный серийный номер хранится только на 0-й странице 0-го пространства, а значение этого поля на других страницах равно 0, что эквивалентно мультиплексированию 0-й страницы 0-го пространства. этого поля. Таким образом, когда происходит глобальная модификация, необходимо изменить только одно поле.

космосдокумент

Одинкосмический файлэто многоСтраница(до 2^32) агрегированные ссылки для более эффективного управления,СтраницаСобранный в несколько блоков по 1 МБ (64 последовательных страницы, размер страницы по умолчанию — 16 КиБ), этот блок называется «экстентом». Многие структуры только по ссылкеПлощадьприйти вкосмоснаделСтраница

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

image

космосПервая страница вFSP_HDR(страница заголовка файлового пространства).FSP_HDRстраница содержитFSPструктура, записи типаразмер помещения,свободная площадь,Площадь фрагментаиполная площадьсписок и другие данные (подробную статью о внедрении управления свободным пространством я напишу в будущем). одна страницаFSP_HDRТолько достаточно, чтобы сохранить 256Площадь(эквивалентно 16384Страница, 256 Мбайт) информационного пространства, поэтому после каждых 16384 страниц требуется дополнительное место для записи информации этих страниц.XDESстраница иFSP_HDRСтруктура страницы такая же, только вXDESсерединаFSPЗанятое хранилище заполнено нулями. эти дополнительныеСтраницаОн автоматически выделяется по мере роста файла пространства.

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

IBUF_BITMAPСтраница содержит информацию о кэшировании вставки и выходит за рамки этой серии.

системакосмос

системное пространство(Пробел 0) является особым и содержит множество страниц, выделенных фиксированными номерами страниц для хранения больших объемов информации, важной для операций InnoDB. Системное пространство, как и любое другое пространство, также требуетFSP_HDR, IBUF_BITMAP,InodeЭти три страницы служат первыми тремя страницами. После этого он немного отличается от других страниц.

image

  • стр. 3,SYSТип: информация заголовка, относящаяся к кэшу вставки.
  • страница 4,INDEXТип: корневая страница структуры индекса для буферизации вставки.
  • стр. 5,TRX_SYSТип: информация, относящаяся к работе системы транзакций InnoDB, такая как идентификатор последней транзакции, информация двоичного журнала MySQL и расположение диапазона буфера двойной записи.
  • стр. 6,SYSТип: Первая страница сегмента отката. Дополнительные страницы (или целые экстенты) выделяются по мере необходимости для хранения данных сегмента отката.
  • стр. 7,SYSТип: информация заголовка, относящаяся к словарю данных, содержащая номер корневой страницы индексов, составляющих словарь данных. Эту информацию можно найти в любом другом указателе (таблице), так как их номера корневых страниц хранятся в этом словаре данных.
  • Страницы 64–127: первый блок (содержит страницу 64) буфера двойной записи, который является важной частью механизма восстановления InnoDB.
  • Страницы 128 - 191: Второй блок в двойном буфере записи

Другие страницы выделяются по запросу для индексов, сегментов отката, журналов отмен и т. д.

на файл табличного пространства

InnoDB предоставляет режим «файл на таблицу», который создает файл для каждой таблицы MySQL (на самом делекосмос). Возможно, правильнее было бы назвать это «одно место на таблицу». Каждая таблица будет создана.ibdфайл, который имеет следующую структуру:

image

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

Поскольку большая часть структур метаданных InnoDB хранится всистемное пространство, поэтому большинство страниц, размещенных в «одном месте на таблицу»,INDEXвводить и хранить табличные данные.