Spec-Zone.ru › MariaDB

Ограничения InnoDB

У движка InnoDB есть следующие ограничения.

Ограничения схемы

  • Таблицы InnoDB могут содержать максимум 1017 столбцов. Это включает виртуальные вычисляемые столбцы.
  • Таблицы InnoDB могут содержать максимум 64 вторичных индекса.
  • Многоколоночный индекс в InnoDB может использовать максимум 16 столбцов. Если вы попытаетесь создать многоколоночный индекс, использующий более 16 столбцов, MariaDB вернёт ошибку 1070.

Ограничения размера

  • За исключением столбцов переменной длины (то есть VARBINARY, VARCHAR, BLOB и TEXT), строки в InnoDB имеют максимальную длину примерно половину размера страницы для размеров страниц 4KB, 8KB, 16KB и 32KB.
  • Максимальный размер столбцов BLOB и TEXT составляет 4 ГБ. Это также относится к LONGBLOB и LONGTEXT.
  • MariaDB накладывает ограничение на размер строки в 65 535 байт для суммарного размера всех столбцов. Если таблица содержит столбцы BLOB или TEXT, в этом расчёте они учитываются только 9-12 байтами, учитывая, что их содержимое хранится отдельно.
  • 32-разрядные операционные системы имеют максимальный предел размера файла 2 ГБ. При работе с большими таблицами с использованием этой архитектуры настройте InnoDB на использование меньших файлов данных.
  • Максимальный размер объединённых файлов журнала InnoDB составляет 512 ГБ.
  • Для табличных пространств минимальный размер составляет 10 МБ, максимальный размер зависит от размера страницы InnoDB.
Размер страницы InnoDB Максимальный размер табличного пространства
4KB 16TB
8KB 32TB
16KB 64TB
32KB 128TB
64KB 256TB

Размеры страниц

Используя системную переменную innodb_page_size, вы можете настроить размер в байтах для страниц InnoDB. По умолчанию страницы составляют 16KB. Существуют определённые ограничения на использование этой переменной.

  • Экземпляры MariaDB, использующие один размер страницы, не могут использовать файлы данных или файлы журнала из экземпляра, использующего другой размер страницы.
  • При использовании размера страницы 4KB или 8KB максимальная длина ключа индекса пропорционально уменьшается.
Размер страницы InnoDB Длина ключа индекса
4KB 768B
8KB 1536B
16KB 3072B

Большой префиксный размер

До MariaDB 10.3.1, системная переменная innodb_large_prefix позволяла устанавливать большие префиксные размеры. То есть, при включении (по умолчанию начиная с MariaDB 10.2) InnoDB использует префиксы ключей индекса размером 3072B для форматов строк DYNAMIC и COMPRESSED. При отключении он использует префиксы ключей размером 787B для таблиц любого формата строк. Использование ключа индекса, превышающего этот предел, приводит к ошибке.

Начиная с MariaDB 10.3.1, InnoDB всегда использует большие префиксные размеры ключей индексов.

Ограничения таблиц

InnoDB имеет следующие ограничения, относящиеся к таблицам.

  • При выполнении оператора DELETE InnoDB не пересоздаёт таблицу, а удаляет каждую строку из таблицы по одной.
  • При запуске MariaDB на Windows, InnoDB хранит базы данных и таблицы в нижнем регистре. При перемещении баз данных и таблиц в двоичном формате из Windows в Unix-подобную систему или из Unix-системы в Windows, необходимо переименовать их, используя строчные буквы.
  • При использовании каскадных внешних ключей, операции в каскаде не активируют триггеры.

Анализ таблиц

MariaDB поддерживает использование оператора SQL ANALYZE TABLE для анализа и хранения распределения ключей таблицы. Когда MariaDB выполняет этот оператор, он вычисляет кардинальность индекса с помощью случайных проходов по дереву индекса. Это делает его быстрым, но не всегда точным, так как он не проверяет все строки. Данные представляют собой только оценку, и повторные выполнения этого оператора могут возвращать разные результаты.

В ситуациях, когда точные данные из оператора ANALYZE TABLE имеют значение, включите системную переменную innodb_stats_persistent. Кроме того, вы можете использовать системную переменную innodb_stats_transient_sample_pages, чтобы изменить количество случайных проходов.

При запуске оператора ANALYZE TABLE дважды для таблицы, в которой выполняются операторы или транзакции, MariaDB блокирует второй оператор ANALYZE TABLE до завершения оператора или транзакции. Это происходит потому, что оператор или транзакция блокируют второй оператор ANALYZE TABLE от перезагрузки определения таблицы, что ему необходимо сделать, поскольку старое определение было помечено как устаревшее после первого оператора.

Статус таблицы

Аналогично оператору ANALYZE TABLE, операторы SHOW TABLE STATUS не предоставляют точной статистики для InnoDB, за исключением физического размера таблицы.

Двигатель InnoDB не поддерживает внутренний подсчёт строк. Транзакции изолируют записи, что означает, что параллельные транзакции не будут иметь одинаковое количество строк.

Столбцы с автоинкрементом

  • При определении индекса для столбца с автоинкрементом, он должен быть определён так, чтобы допускать эквивалентные операциям SELECT MAX(col) запросы к таблице.
  • Перезапуск MariaDB может привести к тому, что InnoDB повторно использует старые значения автоинкремента, например, в случае транзакции, которая была отменена.
  • Если столбцы с автоинкрементом исчерпают свои значения, операторы INSERT сгенерируют ошибки дублирования ключей.

Транзакции и блокировки

  • Вы можете изменять данные в максимум 96 * 1023 параллельных транзакциях, которые генерируют записи отката.
  • Из 128 сегментов отката InnoDB назначает 32 для журналов не-redo для транзакций, которые изменяют временные таблицы и связанные объекты, снижая максимальное количество параллельных транзакций, изменяющих данные, до 96 000 с 128 000.
  • Предел составляет 32 000 параллельных транзакций, когда все транзакции, изменяющие данные, также изменяют временные таблицы.
  • Выполнение оператора LOCK TABLES устанавливает две блокировки на каждую таблицу, когда системная переменная innodb_table_locks включена (по умолчанию).
  • При подтверждении или отмене транзакции любые блокировки, установленные в транзакции, снимаются. Вам не нужно выполнять операторы LOCK TABLES, когда переменная autocommit включена, так как InnoDB сразу же снимет блокировки на таблице.
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки 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-limitations/

Spec-Zone.ru

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