原创转载请注明出处:http://agilestyle.iteye.com/blog/2369740
表级锁、行级锁、页面锁
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
锁具体实现算法
InnoDB实现了两种类型的锁机制:共享锁(S)和排他锁(X)。共享锁允许⼀个事务读数据,不允许修改数据,如果其他事务要再对该⾏加锁,只能加共享锁;排他锁是修改数据时加的锁,可以读取和修改数据,⼀旦⼀个事务对该⾏数据加锁,其他事务将不能再对该数据加任务锁。
InnoDB既实现了⾏锁,也实现了表锁。⾏锁是通过索引实现的,如果不通过索引条件检索数据,那么InnoDB将对表中所有的记录进⾏加锁,其实就是升级为表锁了。
⾏锁的具体实现算法有三种:record lock、gap lock以及next-key lock。record lock是专门对索引项加锁;gap lock是对索引项之间的间隙加锁;next-key lock则是前⾯两种的组合,对索引项以其之间的间隙加锁。
只在可重复读或以上隔离级别下的特定操作才会取得gap lock或next-key lock,在Select 、Update和Delete时,除了基于唯⼀索引的查询之外,其他索引查询时都会获取gap lock或next-key lock,即锁住其扫描的范围。
相关推荐
MySQL数据库管理系统提供了多种锁机制,包括行级锁、表级锁和页级锁,这些锁的使用和理解对于优化并发性能和避免死锁至关重要。 1. 行级锁(Row-Level Locking) 行级锁是MySQL中最细粒度的锁,它只锁定操作的特定...
在MySQL中,有三种主要的锁定级别:行级锁、表级锁和页级锁。 1. **行级锁**:行级锁(Row-Level Locking)是最细粒度的锁,只锁定单个数据行。这使得其他事务可以同时对表中的其他行进行读写操作,从而提高了并发...
InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MySQL这3种锁的特性可大致归纳如下。 开销、加锁速度、死锁、粒度、并发性能 l 表级锁:开销小,加锁快;...
MySQL支持不同存储引擎采用不同的锁机制,常见的有表级锁、行级锁和页面锁。其中表级锁适用于查询为主的应用,如Web应用;行级锁适用于OLTP系统,其中存在大量并发更新少量不同数据的场景;而页面锁介于表级锁和行级...
MyISAM和MEMORY存储引擎使用表级锁,BDB存储引擎支持页面锁,同时也可以使用表级锁,而InnoDB存储引擎则同时支持行级锁和表级锁,默认采用行级锁。 表级锁具有开销小,加锁速度快的特点,不会出现死锁,但是锁定...
MySQL支持多种锁类型,包括表级锁、行级锁和页面锁等,每种锁都有其适用场景。 #### 二、锁的基本概念 在多用户环境中,锁的作用主要体现在以下几个方面: - **协调并发访问**:确保多个用户或进程在访问同一资源...
页面锁是一种介于表级锁和行级锁之间的锁机制,如BDB存储引擎所使用,它的锁定粒度比表级锁小,但比行级锁大,因此在并发性能和资源消耗上处于两者之间。 在MySQL中,可以使用`SHOW ENGINES;`命令查看支持的存储...
Informix 支持多种类型的锁,这些锁主要分为两大类:行级锁和表级锁。 1. 行级锁:这种锁针对数据库中的单行数据进行锁定,提高并发性能。行级锁包括共享锁(S 锁)和独占锁(X 锁)。共享锁允许读取一行,但不允许...
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking),BDB存储引擎采用的是页面锁(page-level locking),InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。...
- BDB 使用页面锁,也可用表级锁。 二、行锁 行级锁分为共享锁(读锁)和排他锁(写锁): A. 共享锁: - 允许读取数据,但不允许修改。 - 语法:`SELECT ... LOCK IN SHARE MODE;` B. 排他锁: - 允许读取...
在SQL Server中,锁升级是自动进行的,当事务中的锁数量达到一定的阈值时,系统会将行级锁和页面锁升级为表级锁。这个阈值是系统内部设定的,用户通常不需要手动干预。 数据库锁的模式决定了资源的访问权限。SQL ...
- 锁可以作用于不同的数据粒度上,包括行级锁、页级锁、表级锁等。 - **行级锁**:锁定特定的行,适用于对单个记录的加锁,如更新某一条记录。 - **页级锁**:锁定包含多条记录的页面,适用于对一组记录的加锁。 ...
当一个事务中涉及的锁数量达到一定的阈值(锁升级门限)时,系统会自动将行级锁和页面锁升级为表级锁,以减少锁的数量,提高系统性能。这个过程是自动的,用户通常无需手动干预。 锁在SQL Server中有多种模式,每种...
以及行级锁、页面锁和表级锁等不同粒度的锁。 2. **锁的粒度**:粒度是指锁控制的数据范围。SQL Server支持多粒度锁定,允许从行级到表级的灵活锁定。行级锁提供最高的并发性,但管理成本高;表级锁则限制并发,但...
BDB采用页面锁(page-leve locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 各种锁特点 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生冲突的概率最高,...
- **页级锁**:锁定一个或多个连续的页面,适用于批量操作。 - **表级锁**:锁定整个表,通常用于大型操作或维护活动。 - **模式锁**:用于锁定数据库对象的元数据,如表结构、索引等。 - **超级排他锁(Z)**:用于...
3. 页面锁:锁定数据块,介于表级锁和行级锁之间。 4. 间隔锁(Gap Locks):防止在已存在的索引键值之间插入新记录,避免幻读问题。 5. 临键锁(Next-Key Locks):结合了行锁和间隔锁,防止插入重复键值,也是...
例如,当一个事务对同一表的多条记录进行操作时,如果行级锁的数量达到一定阈值(锁升级门限),SQL Server会将这些行级锁升级为表级锁。 #### 五、SQL Server锁的类型 SQL Server支持多种类型的锁,每种锁都有其...
MySQL支持多种类型的锁,包括表级锁、行级锁和页面锁,这些锁的特性各有不同,适用于不同的场景。 1. **表级锁**: - **开销和速度**:表级锁的加锁速度快,开销小,因为它们不涉及具体的行。 - **死锁**:表级锁...
非聚集索引可能导致页面级锁,因为非聚集索引的键可能分布在多个页上。因此,明智地设计和使用索引可以优化锁的效率。 七、锁的实际应用 在数据库设计和查询优化中,理解锁的原理至关重要。例如,避免全表扫描可以...