本节讨论内部锁定;也就是说,在MySQL服务器本身中执行锁定,以管理多个会话对表内容的争用。这种类型的锁定是内部的,因为它完全由服务器执行,不涉及其他程序。有关其他程序对MySQL文件执行的锁定,请参阅第8.11.5节,“外部锁定”.
MySQL使用行级锁定对于InnoDB公司
要支持多个会话的同时写入访问的表,使其适用于多用户,高度并发和OLTP应用程序。
避免死锁在单个服务器上执行多个并发写操作时InnoDB公司
表,通过发出a,在交易开始时获得必要的锁选择...进行更新
语句,即使数据更改语句出现在事务的后面。如果事务修改或锁定多个表,则在每个事务中以相同的顺序发出适用的语句。死锁影响性能而不是表示严重错误,因为InnoDB公司
自动检测默认情况下的死锁条件并滚动受影响的事务之一。
在高并发系统上,死锁检测可能会导致众多线程等待同一锁时会导致放缓。有时,禁用死锁检测并依赖于此可能更有效innodb\锁定\等待\超时
发生死锁时的事务回滚设置。可以使用死锁检测innodb死锁检测
配置选项。
行级锁定的优点:
当不同的会话访问不同的行时,锁冲突更少。
回滚更改更少。
可以长时间锁定一行。
MySQL使用台面锁定对于密萨姆
,记忆
,和合并
表,一次只允许一个会话更新这些表。此锁定级别使这些存储引擎更适合于只读、多读或单用户应用程序。
这些存储引擎避免死锁通过始终在查询的开头请求一次性锁定,并始终以相同的顺序锁定表。权衡是该策略减少了并发性;想要修改表的其他会话必须等到当前数据更改语句完成。
表级锁定的优点:
所需内存相对较少(行锁定要求每行或一组锁定的行具有内存)
在表的很大一部分上使用时速度很快,因为只涉及一个锁。
如果你经常这么做,那就快点
分组依据
在大部分数据上的操作或必须经常扫描整个表。
MySQL授权表写入锁如下:
如果表上没有锁,请在其上设置写锁。
否则,将锁请求放入写锁队列。
MySQL Grants表读锁如下:
如果表上没有写锁,请在其上设置读锁。
否则,将锁请求放入读锁队列。
表更新的优先级高于表检索。因此,当释放锁时,该锁将对写锁队列中的请求可用,然后对读锁队列中的请求可用。这样可以确保不更新表“饿死”即使有沉重的选择
表的活动。但是,如果一个表有许多更新,选择
语句将等待,直到不再有更新。
有关更改读写优先级的信息,请参阅第8.11.2节“表锁定问题”.
您可以通过检查表\u锁定\u立即
和表\u锁定\u等待
状态变量,分别表示可以立即授予表锁请求的次数和必须等待的次数:
mysql>显示状态,如“Table%”;+--------------------------+-----------+|变量|名称|值|+-------------------------------+|表|锁|立即| 1151552 | |表|锁| 15324 |+-----------------------+---------+
性能架构锁定表还提供锁定信息。看第27.12.13节“性能架构锁表”.
这个密萨姆
存储引擎支持并发插入,以减少给定表的读写器之间的争用:如果密萨姆
表在数据文件的中间没有空闲块,行总是插入到数据文件的末尾。在这种情况下,您可以自由混合并发插
和选择
A的陈述密萨姆
没有锁的桌子。也就是说,可以将行插入到密萨姆
表同时其他客户正在从中读取。可以在表中删除或更新的行中删除的孔来导致孔。如果有孔,则禁用并发插入,但是当所有孔填充新数据时,都会自动启用。要控制此行为,请使用concurrent_insert.
系统变量。看第8.11.3节,“并发插入”.
如果使用锁定表格
,你可以要求一个阅读本地
锁定而不是阅读
锁定以启用其他会话以在锁定表时执行并发插入。
表演许多插
和选择
表上的操作t1级
当不能同时插入时,可以将行插入到临时表中温度t1
并使用临时表中的行更新实际表:
mysql>锁表t1 WRITE,temp\u t1 WRITE;mysql>INSERT INTO t1 SELECT*FROM temp\u t1;mysql>从temp\u t1中删除;mysql>解锁表;
通常,表锁在以下情况下优于行级锁:
使用更高级别的锁,您可以通过支持不同类型的锁来更轻松地调优应用程序,因为锁开销比行级别的锁小。
行级锁定以外的选项:
版本控制(例如MySQL中用于并发插入的版本),其中一个writer可以同时拥有多个reader。这意味着数据库或表支持不同的数据视图,具体取决于访问何时开始。其他常用术语有“时间旅行,”“写作,”或“按需复制。”
按需复制在许多情况下优于行级锁定。然而,在最坏的情况下,它可以使用比使用普通锁多得多的内存。
您可以使用应用程序级锁,例如
获取\锁定()
和释放锁()
在MySQL中。这些锁是建议锁,因此它们只适用于相互协作的应用程序。看到了吗第12.15节“锁定功能”.