相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.4 kb
手册页(Zip)- 347.1 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

22.6.4分区和锁定

对于存储引擎,例如MyISAM在执行DML或DDL语句时实际执行表级锁,在MySQL的旧版本(5.6.5及更早版本)中,这样的语句会影响分区表,将锁施加到整个表上;也就是说,所有分区都被锁定,直到语句完成。在MySQL 5.7中,分区锁修剪在许多情况下消除了不需要的锁,以及从分区中读取或更新的大多数语句MyISAM表导致只有受影响的分区被锁定。例如,选择从一个分区MyISAM表只锁定那些实际包含满足选择声明的在哪里条件已锁定。

对于使用存储引擎(例如InnoDB,使用行级锁并且在分区修剪之前不实际执行(或需要执行)锁,这不是一个问题。

下面几段将讨论使用使用表级锁的存储引擎对表上的各种MySQL语句进行分区锁修剪的影响。

对DML语句的影响

选择语句(包括那些包含联合或连接的语句)只锁定那些实际需要读取的分区。这也适用于选择……分区

一个更新只对没有更新分区列的表修剪锁。

取代而且插入只锁定那些有要插入或替换行的分区。然而,如果AUTO_INCREMENT值,然后锁定所有分区。

插入……关于重复密钥更新只要没有更新分区列,就会被修剪。

插入……选择只锁定源表中需要读取的分区,而锁定目标表中的所有分区。

加载数据不能删除分区表上的语句。

存在之前插入在更新之前使用分区表的任何分区列的触发器意味着锁定插入而且更新更新该表的语句不能被修剪,因为触发器可以改变它的值之前插入在表的任何分区列上的触发器意味着所设置的锁插入取代不能修剪,因为之前插入触发器可能会在插入行之前更改行的分区列,迫使该行进入不同的分区。一个在更新之前在分区列上的触发器意味着由更新插入……关于重复密钥更新不能修剪。

受影响的DDL语句

创建视图不会导致任何锁。

修改表…交换分区李子锁;只有交换的表和交换的分区被锁定。

修改表…截断分区李子锁;只有要清空的分区是锁着的。

此外,ALTER TABLE语句在表级别上接受元数据锁。

其他语句

锁表无法修剪分区锁。

调用stored_procedure (expr支持锁修剪,但支持求值expr没有。

而且语句不支持分区锁修剪。