Оригинальный адрес:блог. Подождите. 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 ТиБ.
СтраницаСтруктура выглядит следующим образом:
Каждая страница имеет 38-байтовыйFIL
голова иFIL
хвостик (FIL
Имя на самом деле является сокращением от «файл»). Заголовок содержит поле, указывающее тип страницы, который определяет структуру остальной части страницы.FIL
голова иFIL
Структура хвоста выглядит так:
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 необходимо сделать некоторые записи метаданных, чтобы отслеживать всеСтраница,Площадьа такжекосмоссам.
космосПервая страница вFSP_HDR
(страница заголовка файлового пространства).FSP_HDR
страница содержитFSP
структура, записи типаразмер помещения,свободная площадь,Площадь фрагментаиполная площадьсписок и другие данные (подробную статью о внедрении управления свободным пространством я напишу в будущем).
одна страницаFSP_HDR
Только достаточно, чтобы сохранить 256Площадь(эквивалентно 16384Страница, 256 Мбайт) информационного пространства, поэтому после каждых 16384 страниц требуется дополнительное место для записи информации этих страниц.XDES
страница иFSP_HDR
Структура страницы такая же, только вXDES
серединаFSP
Занятое хранилище заполнено нулями. эти дополнительныеСтраницаОн автоматически выделяется по мере роста файла пространства.
INODE
страница для сохранения файловчасть(Сегментация, содержит наборПлощадьи массив осколков, которые будут выделяться только по отдельности). каждыйINDOE
85 страниц можно сохранитьINODE
элементы, вам нужно два для каждого индексаINODE
элементы (в будущем я напишу подробную статью о содержании элементов INDOE и документацииПлощадьстатья).
IBUF_BITMAP
Страница содержит информацию о кэшировании вставки и выходит за рамки этой серии.
системакосмос
системное пространство(Пробел 0) является особым и содержит множество страниц, выделенных фиксированными номерами страниц для хранения больших объемов информации, важной для операций InnoDB. Системное пространство, как и любое другое пространство, также требуетFSP_HDR
, IBUF_BITMAP
,Inode
Эти три страницы служат первыми тремя страницами. После этого он немного отличается от других страниц.
- стр. 3,
SYS
Тип: информация заголовка, относящаяся к кэшу вставки. - страница 4,
INDEX
Тип: корневая страница структуры индекса для буферизации вставки. - стр. 5,
TRX_SYS
Тип: информация, относящаяся к работе системы транзакций InnoDB, такая как идентификатор последней транзакции, информация двоичного журнала MySQL и расположение диапазона буфера двойной записи. - стр. 6,
SYS
Тип: Первая страница сегмента отката. Дополнительные страницы (или целые экстенты) выделяются по мере необходимости для хранения данных сегмента отката. - стр. 7,
SYS
Тип: информация заголовка, относящаяся к словарю данных, содержащая номер корневой страницы индексов, составляющих словарь данных. Эту информацию можно найти в любом другом указателе (таблице), так как их номера корневых страниц хранятся в этом словаре данных. - Страницы 64–127: первый блок (содержит страницу 64) буфера двойной записи, который является важной частью механизма восстановления InnoDB.
- Страницы 128 - 191: Второй блок в двойном буфере записи
Другие страницы выделяются по запросу для индексов, сегментов отката, журналов отмен и т. д.
на файл табличного пространства
InnoDB предоставляет режим «файл на таблицу», который создает файл для каждой таблицы MySQL (на самом делекосмос). Возможно, правильнее было бы назвать это «одно место на таблицу». Каждая таблица будет создана.ibd
файл, который имеет следующую структуру:
Игнорируя индексы быстрого добавления (т. е. добавление индексов во время выполнения), после необходимых 3 начальных страниц следующая страница, выделенная в пространстве, будет корневой страницей для каждого индекса в таблице, согласноПорядок индексов, определенный при создании таблицырасположение.Страница 3 будет корнем кластеризованного индекса.,Страница 4 будет корнем первого вторичного индекса, и так далее.
Поскольку большая часть структур метаданных InnoDB хранится всистемное пространство, поэтому большинство страниц, размещенных в «одном месте на таблицу»,INDEX
вводить и хранить табличные данные.