Spec-Zone .ru
спецификации, руководства, описания, API
|
Не преобразовывайте системные таблицы MySQL в mysql
база данных от MyISAM
к InnoDB
таблицы! Это - недопустимая операция. Если Вы делаете это, MySQL не перезапускает, пока Вы не
восстанавливаете старые системные таблицы от резервного копирования или регенерируете их с mysql_install_db сценарием.
Это не
хорошая идея сконфигурировать InnoDB
использовать файлы данных или файлы
журнала на объемах NFS. Иначе, файлы могли бы быть заблокированы другими процессами и становиться
недоступными использованию MySQL.
Таблица может содержать максимум 1020 столбцов. (Повышенный в MySQL 5.6.9 от более раннего предела 1000.
Таблица может содержать максимум 64 вторичных устройств, индексирует.
По умолчанию, индексировать ключ для единственного столбца индексируют, могут быть
до 767 байтов. Тот же самый предел длины применяется к, любой индексирует ключевой префикс. См. Раздел
13.1.11,"CREATE INDEX
Синтаксис". Например, Вы могли бы
совершить нападки, этот предел с префиксом столбца индексируют больше чем
255 символов на a TEXT
или VARCHAR
столбец,
принимая набор символов UTF-8 и максимум 3 байтов для каждого символа. Когда innodb_large_prefix
параметр конфигурации включается, этот предел
длины повышается до 3072 байтов, для InnoDB
таблицы, которые используют
DYNAMIC
и COMPRESSED
форматы строки.
Когда Вы пытаетесь определить индексировать длину префикса дольше чем позволенный, длина тихо
уменьшается до максимальной длины для группового, индексируют. Для уникального индекса, превышая
индексировать префиксный предел производит ошибку. Чтобы избежать таких ошибок для конфигураций
репликации, избегите устанавливать innodb_large_prefix
у опции на ведущем устройстве, если это не
может также быть установлено на ведомых устройствах, и ведомых устройствах, есть уникальные индексы,
на которые мог влиять этот предел.
Этот параметр конфигурации изменяет обработку ошибок для некоторых комбинаций формата строки и длины
префикса дольше чем позволенный максимум. См. innodb_large_prefix
для деталей.
InnoDB
внутренняя максимальная длина ключа составляет
3500 байтов, но сам MySQL ограничивает это 3072 байтами. Этот предел применяется к длине объединенного,
индексируют ключ в многоколонном, индексируют.
Если Вы уменьшаете InnoDB
размер
страницы к 8 Кбитам или 4 Кбитам, определяя innodb_page_size
опция, создавая экземпляр MySQL, максимальная длина
индексировать ключа понижается пропорционально, основанная на пределе 3072 байтов для размера страницы
16 Кбит. Таким образом, максимум индексируют длину ключа, 1536 байтов, когда размер страницы составляет
8 Кбит, и 768 байтов, когда размер страницы составляет 4 Кбита.
Максимальная длина строки, за исключением столбцов переменной длины (VARBINARY
, VARCHAR
, BLOB
и TEXT
),
немного меньше чем половина страницы базы данных. Таким образом, максимальная длина строки составляет
приблизительно 8000 байтов для размера страницы значения по умолчанию 16 Кбит; если Вы уменьшаете размер
страницы, определяя innodb_page_size
опция, создавая экземпляр MySQL, максимальная длина
строки составляет 4000 байтов для страниц 8 Кбит и 2000 байтов для страниц 4 Кбит. LONGBLOB
и LONGTEXT
столбцы должны составить меньше чем 4 Гбайт, и длина строки
итогов, включая BLOB
и TEXT
столбцы, должны быть меньше чем 4 Гбайт.
Если строка меньше чем половина страницы длиной, все это сохранено локально в пределах страницы. Если это превышает половину страницы, столбцы переменной длины выбираются для внешнего хранения вне страницы до судорог строки в пределах половины страницы, как описано в Разделе 5.3.2, "управление Файловым пространством".
Хотя InnoDB
поддерживает размеры строки, больше чем 65
535 байтов внутренне, сам MySQL налагает предел размера строки 65 535 для объединенного размера всех
столбцов:
mysql>CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
->c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
->f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB;
ERROR 1118 (42000): Row size too large. The maximum row size for theused table type, not counting BLOBs, is 65535. You have to change somecolumns to TEXT or BLOBs
См. Раздел D.10.4, "Пределы на Столбце таблицы граф и Размер Строки".
На некоторых более старых операционных системах файлы должны составить меньше чем 2
Гбайт. Это не ограничение InnoDB
непосредственно, но если Вы потребуете
большой табличной области, то Вы должны будете сконфигурировать ее использующий несколько меньших файлов
данных, а не один или файл большие файлы данных.
Объединенный размер InnoDB
файлы журнала могут
составить до 512 Гбайт.
Минимальный размер табличной области немного больше чем 10 МБ. Максимальный размер табличной области является четырьмя миллиардами страниц базы данных (64TB). Это - также максимальный размер для таблицы.
Размер
страницы базы данных значения по умолчанию в InnoDB
16 Кбит, или можно
понизить размер страницы к 8 Кбитам или 4 Кбитам, определяя innodb_page_size
опция, создавая экземпляр MySQL.
Увеличение размера страницы не является поддерживаемой работой: нет никакой гарантии
этого InnoDB
будет обычно функционировать с размером страницы,
больше чем 16 Кбит. Проблемы компилирующий или рабочий InnoDB могут произойти. В частности ROW_FORMAT=COMPRESSED
у Барракуды формат файла предполагает, что
размер страницы - самое большее 16 Кбит и использует 14-разрядные указатели.
Экземпляр MySQL, используя деталь InnoDB
размер страницы
не может использовать файлы данных или файлы журнала от экземпляра, который использует различный
размер страницы. Это ограничение могло влиять на восстановление или понизить операции, используя
данные от MySQL 5.6, который делает размеры сайта поддержки кроме 16 Кбит.
InnoDB
табличная поддержка FULLTEXT
индексирует. См. Раздел 14.2.3.13.3,"FULLTEXT
Индексирует" для деталей.
InnoDB
таблицы поддерживают пространственные типы
данных, но не индексирует на них.
ANALYZE TABLE
определяет индексируют количество элементов (как выведено на экран в Cardinality
столбец SHOW INDEX
вывод), делая случайные
погружения к каждому из индексировать деревьев и обновления индексируют оценки количества
элементов соответственно. Поскольку они - только оценки, повторенные выполнения ANALYZE TABLE
мог произвести различные числа. Это делает ANALYZE TABLE
быстро на InnoDB
таблицы,
но не 100 %, точных, потому что это не принимает все строки во внимание.
Можно сделать статистику
собранной ANALYZE TABLE
более точный и более устойчивый, включая innodb_stats_persistent
параметр конфигурации, как объяснено в Разделе 14.2.4.2.10,
"Персистентная Статистика Оптимизатора для Таблиц InnoDB". Когда та установка
включается, важно работать ANALYZE
TABLE
после того, как существенные изменения к индексированным данным столбца, потому
что статистические данные периодически не повторно вычисляются (такой как после перезапуска сервера)
как они традиционно, были.
Можно изменить число случайных погружений, изменяя innodb_stats_persistent_sample_pages
системная переменная (если
персистентная установка статистики включается), или innodb_stats_transient_sample_pages
системная переменная (если
персистентная установка статистики выключается). Для получения дополнительной информации см. Раздел 14.2.5,"InnoDB
Функции Гибкости, Простоты использования и Надежности"
.
Использование MySQL индексирует оценки количества элементов только в оптимизации соединения. Если
некоторое соединение не оптимизируется правильным способом, можно попытаться использовать ANALYZE TABLE
. В
немногих случаях это ANALYZE
TABLE
не производит значения, достаточно хорошие для Ваших определенных таблиц, можно
использовать FORCE INDEX
с Вашими запросами, чтобы вызвать
использование детали индексируют, или устанавливают max_seeks_for_key
системная переменная, чтобы гарантировать, что
MySQL предпочитает, индексирует поиски по сканированиям таблицы. См. Раздел
5.1.4, "Системные Переменные Сервера", и Раздел
C.5.6, "Связанные с оптимизатором Проблемы".
SHOW TABLE
STATUS
не дает точную статистику по InnoDB
таблицы, за
исключением физического размера зарезервированы таблицей. Количество строки является только грубой
оценкой, используемой в оптимизации SQL.
InnoDB
не проводит внутренний подсчет строк в таблице,
потому что параллельные транзакции могли бы "видеть" различные числа строк одновременно. Обработать a
SELECT COUNT(*) FROM t
оператор, InnoDB
сканирует индексирование таблицы, которая занимает время, если индексирование не находится полностью в
пуле буферов. Если Ваша таблица часто не изменяется, используя кэш запроса MySQL хорошее решение. Чтобы
получить быстрое количество, необходимо использовать встречную таблицу, которую Вы составляете
самостоятельно и позволяете своему приложению обновлять его согласно вставкам, и удаляет это, делает.
Если приблизительное количество строки достаточно, SHOW TABLE STATUS
может использоваться. См. Раздел
14.2.4.1,"InnoDB
Настраивающие Подсказки по производительности"
.
На Windows, InnoDB
всегда имена базы данных хранилищ и
имена таблиц внутренне в нижнем регистре. Чтобы переместить базы данных в двоичный формат от Unix до
Windows или от Windows до Unix, создайте все базы данных и таблицы, используя строчные имена.
AUTO_INCREMENT
столбец ai_col
должен быть определен как часть индексирования так, что, возможно выполнить эквивалент индексированного
SELECT MAX(
поиск на
таблице, чтобы получить максимальное значение столбца. Как правило, это достигается, делая столбец,
который индексирует первый столбец некоторой таблицы. ai_col
)
Инициализируя ранее указанный AUTO_INCREMENT
столбец
на таблице, InnoDB
устанавливает монопольную блокировку на конце
индексирования связанного с AUTO_INCREMENT
столбец. Получая доступ к
автоинкрементному счетчику, InnoDB
использует определенное AUTO-INC
режим блокировки таблицы, где блокировка длится только до конца
текущего SQL-оператора, не до конца всей транзакции. Другие клиенты не могут вставить в таблицу в то
время как AUTO-INC
блокировка таблицы сохранена. См. Раздел
5.4.4,"AUTO_INCREMENT
Обработка в InnoDB
".
Когда Вы перезапускаете сервер MySQL, InnoDB
май снова
использует старое значение, которое было сгенерировано для AUTO_INCREMENT
столбец, но никогда сохраненный (то есть, значение, которое было сгенерировано во время старой
транзакции, которая откатывалась).
Когда AUTO_INCREMENT
целочисленный столбец исчерпывает
значения, последующее INSERT
работа возвращает двойную ключевую ошибку. Это
- общее поведение MySQL, подобное как MyISAM
работы.
DELETE FROM
не регенерирует таблицу, но вместо этого удаляет все строки, один за другим. tbl_name
В настоящий момент каскадные действия внешнего ключа не активируют триггеры.
Невозможно составить таблицу с именем столбца, которое соответствует имя
внутреннего столбца InnoDB (включая DB_ROW_ID
, DB_TRX_ID
,
DB_ROLL_PTR
, и DB_MIX_ID
). Сервер сообщает об
ошибке 1005 и обращается к ошибке–1 в сообщении об ошибке. Это ограничение применяется только к
использованию имен в верхнем регистре.
LOCK
TABLES
получает два, соединяет каждую таблицу если innodb_table_locks=1
(значение по умолчанию). В дополнение к блокировке
таблицы на уровне MySQL это также получает InnoDB
блокировка таблицы.
Версии MySQL прежде 4.1.2 не получали InnoDB
блокировки таблицы; старое
поведение может быть выбрано, устанавливая innodb_table_locks=0
. Если нет
InnoDB
блокировка таблицы получается, LOCK TABLES
завершается, даже если некоторые записи таблиц
блокируются другими транзакциями.
В MySQL 5.7, innodb_table_locks=0
не имеет никакого эффекта для таблиц,
заблокированных явно с LOCK TABLES ... WRITE
. Это действительно имеет эффект для таблиц,
заблокированных для чтения, или пишет LOCK TABLES ... WRITE
неявно (например, через триггеры) или LOCK TABLES ...
READ
.
Все InnoDB
блокировки, сохраненные транзакцией,
выпускаются, когда транзакция фиксируется или прерывается. Таким образом не имеет большого количества
смысла вызывать LOCK
TABLES
на InnoDB
таблицы в autocommit=1
режим, потому что полученный InnoDB
блокировки таблицы были бы сразу выпущены.
Невозможно заблокировать дополнительные таблицы в середине транзакции потому что LOCK TABLES
выполняет неявное COMMIT
и UNLOCK TABLES
.
Предел на изменяющих данные транзакциях теперь 96 * 1023 параллельных транзакции, которые генерируют записи отмены. С MySQL 5.7.2, 32 128 откатов сегменты присваиваются нежурналам отката для транзакций, которые изменяют временные таблицы и связанные объекты. Это уменьшает максимальное количество параллельных изменяющих данные транзакций от 128 K до 96 K. 96 K предела предполагает, что транзакции не изменяют временные таблицы. Если все изменяющие данные транзакции также изменяют временные таблицы, предел составляет 32 K параллельных транзакций.