Spec-Zone.ru › MariaDB

Формат строк InnoDB DYNAMIC

DYNAMIC — это стандартный формат строк InnoDB.

Формат строк DYNAMIC похож на формат строк COMPACT, но таблицы, использующие формат DYNAMIC, могут хранить ещё больше данных на страницах переполнения, чем таблицы, использующие формат COMPACT. Это приводит к более эффективному хранению данных, особенно для таблиц, содержащих столбцы типов данных VARBINARY, VARCHAR, BLOB и TEXT, по сравнению с таблицами, использующими формат COMPACT. Однако таблицы InnoDB, использующие формат COMPRESSED более эффективны.

Формат строк DYNAMIC был первоначально представлен в MariaDB 5.5.

Использование формата строк DYNAMIC

MariaDB начиная с 10.2.2

В MariaDB 10.2.2 и более поздних версиях, формат строк по умолчанию — DYNAMIC, если переменная системы innodb_default_row_format не была изменена. Поэтому в этих версиях самый простой способ создать таблицу InnoDB, использующую формат DYNAMIC, — это не устанавливать параметр ROW_FORMAT в операторе CREATE TABLE или ALTER TABLE.

Рекомендуется установить переменную системы innodb_strict_mode в значение ON, когда используется этот формат строк.

Например:

SET SESSION innodb_strict_mode=ON;

SET GLOBAL innodb_default_row_format='dynamic';

CREATE TABLE tab (
   id int,
   str varchar(50)
) ENGINE=InnoDB;
MariaDB до 10.2.1

В MariaDB 10.2.1 и ранее, самый простой способ создать таблицу InnoDB, использующую формат DYNAMIC — установить параметр ROW_FORMAT в значение DYNAMIC в операторе CREATE TABLE или ALTER TABLE.

Рекомендуется установить переменную системы innodb_strict_mode в значение ON, когда используется этот формат строк.

Формат строк DYNAMIC поддерживается только в формате файлов Barracuda InnoDB. Вследствие этого, в MariaDB 10.1 и ранее формат строк DYNAMIC поддерживается только при использовании формата файла Barracuda. Следовательно, переменная системы innodb_file_format должна быть установлена в значение Barracuda, чтобы использовать эти форматы строк в этих версиях.

В MariaDB 10.1 и ранее формат строк DYNAMIC также поддерживается только если таблица находится в табличном пространстве file per-table. Следовательно, переменная системы innodb_file_per_table должна быть установлена в значение ON для использования этого формата строк в этих версиях.

Например:

SET SESSION innodb_strict_mode=ON;

SET GLOBAL innodb_file_per_table=ON;

SET GLOBAL innodb_file_format='Barracuda';

CREATE TABLE tab (
   id int,
   str varchar(50)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

Префиксы индексов с форматом строк DYNAMIC

Формат строк DYNAMIC поддерживает префиксы индексов длиной до 3072 байт. В MariaDB 10.2 и ранее, максимальная длина префикса индекса настраивается с помощью переменной системы innodb_large_prefix. В этих версиях, если innodb_large_prefix установлена в ON, максимальная длина префикса составляет 3072 байта, а если в OFF, — 767 байт.

Страницы переполнения с форматом строк DYNAMIC

Все форматы строк InnoDB могут хранить некоторые типы данных на страницах переполнения. Это позволяет максимальному размеру строки в таблице InnoDB быть больше максимального размера данных, который может быть сохранён на главной странице данных строки. Подробнее о других факторах, влияющих на максимальный размер строк в таблицах InnoDB, см. Максимальный размер строки.

В формате строк DYNAMIC переменные столбцы, такие как столбцы типов данных VARBINARY, VARCHAR, BLOB и TEXT, могут быть полностью сохранены на страницах переполнения.

InnoDB рассматривает использование страниц переполнения только если размер строки таблицы больше половины размера страницы innodb_page_size. Если размер строки больше этого значения, InnoDB переносит переменные столбцы на страницы переполнения до тех пор, пока размер строки не станет меньше половины размера страницы innodb_page_size.

Для столбцов BLOB и TEXT только значения длиной более 40 байт рассматриваются для хранения на страницах переполнения. Для столбцов VARBINARY и VARCHAR только значения длиной более 255 байт рассматриваются для хранения на страницах переполнения. Байты, используемые для отслеживания длины значения, не учитываются в этих ограничениях. Эти ограничения основаны только на длине фактических данных столбца.

Эти ограничения отличаются от ограничений для формата строк COMPACT, где ограничение составляет 767 байт для всех типов.

Столбцы фиксированной длины, превышающие 767 байт, кодируются как переменные столбцы, поэтому они также могут быть сохранены на страницах переполнения, если размер строки таблицы больше половины размера страницы innodb_page_size. Несмотря на то, что столбец типа CHAR может содержать не более 255 символов, столбец CHAR может превысить 767 байт в некоторых случаях. Например, столбец CHAR может превысить 767 байт, если используется набор символов utf8mb4.

Если столбец выбрано для хранения на страницах переполнения, то всё значение столбца хранится на страницах переполнения, а на главной странице хранится 20-байтовый указатель на первую страницу переполнения столбца. Каждая страница переполнения имеет размер innodb_page_size. Если столбец слишком велик для хранения на одной странице переполнения, то он хранится на нескольких страницах переполнения. Каждая страница переполнения содержит часть данных и 20-байтовый указатель на следующую страницу переполнения, если такая страница существует.

Это поведение отличается от поведения формата строк COMPACT, который всегда хранит префикс столбца на главной странице. Это позволяет таблицам, использующим формат DYNAMIC , содержать большое количество столбцов типов данных VARBINARY, VARCHAR, BLOB и TEXT.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-dynamic-row-format/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API