Spec-Zone .ru
спецификации, руководства, описания, API
|
В MySQL 5.6.5 и ранее, для механизмов хранения такой как MyISAM
это фактически выполняет блокировки на уровне таблицы, выполняя DML или
операторы DDL, такой оператор, влияющий на разделенную таблицу, наложенную блокировка на таблицу в целом; то
есть, все разделы были заблокированы, пока оператор не был закончен. MySQL 5.6.6 реализует сокращение блокировки раздела, которое устраняет ненужные блокировки во многих
случаях. В MySQL 5.6.6 и позже, большинство операторов, читающих из или обновляющих разделенный MyISAM
табличная причина только произведенные разделы, которые будут
заблокированы. Например, до MySQL 5.6.6, a SELECT
от разделенного MyISAM
таблица, вызванная блокировка на всей таблице; в MySQL 5.6.6
и позже, только те разделы, фактически содержащие строки, которые удовлетворяют SELECT
оператор WHERE
условие блокируется. Это имеет
эффект увеличения скорости и эффективности параллельных операций на разделенном MyISAM
таблицы. Это улучшение становится особенно примечательным, работая с MyISAM
таблицы, у которых есть многие (32 или больше) разделы.
Это изменение в поведении не оказывает влияния на операторы, производящие разделенные таблицы, используя
механизмы хранения такой как InnoDB
,
та работа блокировка на уровне строки и фактически не выполняет (или должен выполнить), блокировки до сокращения
раздела.
Следующие немного абзацев обсуждают эффекты сокращения блокировки раздела для различных операторов MySQL на таблицах, используя механизмы хранения, которые используют блокировки на уровне таблицы.
SELECT
операторы (включая тех, которые содержат объединения или соединения)
теперь, блокируют только те разделы, которые фактически должны быть считаны. Это также применяется к SELECT ... PARTITION
.
UPDATE
сокращает блокировки только для таблиц, на которых не обновляются никакие столбцы разделения.
REPLACE
и INSERT
теперь заблокируйте только те разделы, имеющие строки, которые будут
вставлены или заменены. Однако, если AUTO_INCREMENT
значение сгенерировано для
любого столбца разделения тогда, все разделы блокируются.
INSERT ... ON DUPLICATE KEY
UPDATE
сокращается, пока никакой столбец разделения не обновляется.
INSERT ... SELECT
теперь блокировки только те разделы в исходной таблице, которая
должна быть считана, хотя все разделы в целевой таблице блокируются.
INSERT DELAYED
не поддерживается для разделенных таблиц.
Блокировки, наложенные LOAD DATA
операторы на разделенных таблицах не могут быть сокращены.
Присутствие BEFORE INSERT
или BEFORE UPDATE
триггеры
используя любой столбец разделения разделенной таблицы означают, что это соединяется INSERT
и UPDATE
операторы, обновляющие эту таблицу, не могут быть сокращены, так как
триггер может изменить свои значения: A BEFORE INSERT
включите любое из средств
столбцов разделения таблицы что блокировки, установленные INSERT
или REPLACE
не может быть сокращен, начиная с BEFORE
INSERT
триггер может изменить столбцы разделения строки прежде, чем строка будет вставлена, вызывая
строку в различный раздел, чем это было бы иначе. A BEFORE UPDATE
включите средства
столбца разделения что блокировки, наложенные UPDATE
или INSERT
... ON DUPLICATE KEY UPDATE
не может быть сокращен.
CREATE
VIEW
больше причины любые блокировки.
ALTER TABLE ... EXCHANGE
PARTITION
теперь сокращает блокировки; только обмененная таблица и обмененный раздел блокируются.
ALTER TABLE ... TRUNCATE
PARTITION
теперь сокращает блокировки; только разделы, которые будут освобождены, блокируются.
ALTER
TABLE
операторы все еще берут метаданные, соединяет табличный уровень.
LOCK TABLES
не может сократить блокировки раздела.
CALL
stored_procedure(
поддерживает сокращение блокировки,
но оценку expr
)expr
не делает.
DO
и SET
операторы не поддерживают сокращение блокировки разделения.