优化锁定操作
- 内部锁定方法
- 本节讨论内部锁定。也就是说,在MySQL服务器本身内执行锁定,以管理多个会话对表内容的争用。这种类型的锁定是内部锁定,因为它完全由服务器执行,并且不涉及其他程序。有关其他程序对MySQL文件执行的锁定,请参见“外部锁定”。行级锁定表级锁定选择锁定类型行级锁定MySQL 对表使用行级锁定,InnoDB
- 表锁定问题
- InnoDB表使用行级锁定,因此多个会话和应用程序可以同时读取和写入同一个表,而不会彼此等待或产生不一致的结果。对于此存储引擎,请避免使用该LOCK TABLES语句,因为它不提供任何额外的保护,而是减少了并发性。自动行级锁定使这些表适合于具有最重要数据的最繁忙的数据库,同时由于不需要锁定和解锁表,
- 并发插入
- 该MyISAM存储引擎支持并发插入,减少读者和作者之间的竞争给定表:如果一个MyISAM表已经在数据文件中没有孔(中删除的行),一个INSERT语句可以执行行添加到表的末尾同时该SELECT语句正在从表中读取行。如果有多个INSERT语句,它们将与这些SELECT语句同时排队并按顺序执行。并发的结果
- 元数据锁定
- MySQL使用元数据锁定来管理对数据库对象的并发访问并确保数据一致性。元数据锁定不仅适用于表,而且还适用于模式,存储程序(过程,函数,触发器,计划的事件),表空间,通过GET_LOCK()函数获取的用户锁(请参见“锁定函数”)和通过函数获取的锁。“锁定服务”中描述的锁定服务。性能模式metadata
- 外部锁定
- 外部锁定是使用文件系统锁定来管理MyISAM多个进程对数据库表的争用。在不能将单个进程(例如MySQL服务器)假定为唯一需要访问表的进程的情况下,可以使用外部锁定。这里有些例子:如果运行多个使用相同数据库目录的服务器(不建议),则每个服务器必须启用了外部锁定。如果使用myisamchk对表执行表维护
MySQL使用锁定管理表内容的争用:
- 内部锁定在MySQL服务器本身内部执行,以管理多个线程对表内容的争用。这种类型的锁定是内部锁定,因为它完全由服务器执行,并且不涉及其他程序。请参见“内部锁定方法”。
- 当服务器和其他程序锁定
MyISAM
表文件以相互协调哪个程序可以在何时访问表时,就会发生外部锁定。请参见“外部锁定”。